![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Многопоточность на SMP-системах [D7, Win2k]
BreakPoint © (2006-12-28 23:24:00)Получив в распоряжение двухядерный процессор и свободное время я принялся искать себе проблемы на, мягко выражаясь, голову. Вобщем за 5 минут написал прогу в которой два потока постоянно прибавляют к счетчику (count1 и count2) 1 и замерял скорость прибавления этих самых единиц. Но даже на такой простой прожке вылезла куча приколов.
Во-первых, на двух ядрах она работала в 2 раза медленнее чем на одном! Что это такое, сброс кэша? Но ведь на одном ядре кеш тоже должен сбрасываться.
Во-вторых, засунув count1 и count2 в раздел public потока один поток стал работать в два раза быстрее чем второй, причем быстрее работал поток созданный первым.
В-тетьих, оставив count1 в разделе public, а count2 сделав глобальной переменной я получил реальное увелечение в 2 раза по сравению с одним ядром. Тут наверное дело в том что count1 и count2 разнесены в памяти и кэш не сбрасывается (если я правильно понимаю суть происходящего). Но что происходит во втором случае???
Может кто подскажет хорошие статьи по оптимизации многопоточности к многопроцессорным системам.
atruhin (2006-12-29 06:28:00) [1]> Кстати, если есть какая то функция, которая одновременно
> вызывается из нескольких потоков, что происходит с ее локальными
> переменными, не могжет ли один поток изменить из значения
> для другого потока?
нет
BreakPoint (2006-12-29 00:38:00) [2]
> оптимизация многопроцессорных систем - это тема диссертации
Это я уже понял:)
> Delphi мало приспособлен для многоядерности
Насколько я знаю на С тоже есть проблемы со сбросом кэша. Управление потоками идет глубоко в недрах Винды и на аппаратнм уровне, так что от отдельно взятого компилятора наверно мало что зависит.
Кстати, если есть какая то функция, которая одновременно вызывается из нескольких потоков, что происходит с ее локальными переменными, не могжет ли один поток изменить из значения для другого потока?
tesseract (2006-12-29 00:13:00) [3]Delphi мало приспособлен для многоядерности. Основное торможение вызывает процесс обмена данными между ядрами. Главное снизить этот обмен до минимума. А вообще оптимизация многопроцессорных систем - это тема диссертации.
BreakPoint (2006-12-28 23:37:00) [4]
> Раздел Public? Где это он в потоках?
Не в потоках, а в объекте TThread.
tesseract (2006-12-28 23:29:00) [5]Раздел Public? Где это он в потоках?
Посмотри ка про память в общем, и про то чем SMP от NUMA отличаеться.
Самые лучшие статьи по оптимизации лежат на сайтах INTEL, AMD а ести под Windows то MSDN :-)