Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.06.03;
Скачать: CL | DM;

Вниз

Многопоточность на SMP-системах   Найти похожие ветки 

 
BreakPoint ©   (2006-12-28 23:24) [0]

Получив в распоряжение двухядерный процессор и свободное время я принялся искать себе проблемы на, мягко выражаясь, голову. Вобщем за 5 минут написал прогу в которой два потока постоянно прибавляют к счетчику (count1 и count2) 1 и замерял скорость прибавления этих самых единиц. Но даже на такой простой прожке вылезла куча приколов.
Во-первых, на двух ядрах она работала в 2 раза медленнее чем на одном! Что это такое, сброс кэша? Но ведь на одном ядре кеш тоже должен сбрасываться.
Во-вторых, засунув count1 и count2 в раздел public потока один поток стал работать в два раза быстрее чем второй, причем быстрее работал поток созданный первым.
В-тетьих, оставив count1 в разделе public, а count2 сделав глобальной переменной я получил реальное увелечение в 2 раза по сравению с одним ядром. Тут наверное дело в том что count1 и count2 разнесены в памяти и кэш не сбрасывается (если я правильно понимаю суть происходящего). Но что происходит во втором случае???

Может кто подскажет хорошие статьи по оптимизации многопоточности к многопроцессорным системам.


 
tesseract ©   (2006-12-28 23:29) [1]

Раздел Public?  Где это он в потоках?

Посмотри ка про память в общем, и про то чем SMP от NUMA отличаеться.

Самые лучшие статьи по оптимизации лежат на  сайтах INTEL, AMD  а ести под Windows то MSDN :-)


 
BreakPoint ©   (2006-12-28 23:37) [2]


> Раздел Public?  Где это он в потоках?

Не в потоках, а в объекте TThread.


 
tesseract ©   (2006-12-29 00:13) [3]

Delphi мало приспособлен для многоядерности. Основное торможение вызывает процесс обмена данными между ядрами. Главное снизить этот обмен до минимума. А вообще оптимизация многопроцессорных систем - это тема диссертации.


 
BreakPoint ©   (2006-12-29 00:38) [4]


>  оптимизация многопроцессорных систем - это тема диссертации

Это я уже понял:)

> Delphi мало приспособлен для многоядерности

Насколько я знаю на С тоже есть проблемы со сбросом кэша. Управление потоками идет глубоко в недрах Винды и на аппаратнм уровне, так что от отдельно взятого компилятора наверно мало что зависит.

Кстати, если есть какая то функция, которая одновременно вызывается из нескольких потоков, что происходит с ее локальными переменными, не могжет ли один поток изменить из значения для другого потока?


 
atruhin ©   (2006-12-29 06:28) [5]

> Кстати, если есть какая то функция, которая одновременно
> вызывается из нескольких потоков, что происходит с ее локальными
> переменными, не могжет ли один поток изменить из значения
> для другого потока?

нет



Страницы: 1 вся ветка

Текущий архив: 2007.06.03;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.058 c
2-1179143854
Gentos
2007-05-14 15:57
2007.06.03
a--->ф , q --->й


3-1173938073
In/Out
2007-03-15 08:54
2007.06.03
Запрос SQL


15-1178259777
Jeer
2007-05-04 10:22
2007.06.03
Пятничные чтения


11-1160821604
vampir_infernal
2006-10-14 14:26
2007.06.03
Exception, TNotifyEvent и не только


15-1178814105
Ccill
2007-05-10 20:21
2007.06.03
Предложение к командирам сайта