Форум: "WinAPI";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
ВнизМногопоточность на 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2007.06.03;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 1.029 c