Главная страница
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.056 c
15-1177673583
Kerk
2007-04-27 15:33
2007.06.03
Умер Патриарх Алексий второй


11-1160962882
Grademax
2006-10-16 05:41
2007.06.03
Как в KOL создать кнопку в стиле XP с картинкой


15-1178619022
Jeer
2007-05-08 14:10
2007.06.03
В память о войне


8-1157826089
Voper
2006-09-09 22:21
2007.06.03
Сохранение картинок в 1 файл


3-1173464796
databaser
2007-03-09 21:26
2007.06.03
Поиск в найденном