Главная страница
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.042 c
2-1178911016
programmist87
2007-05-11 23:16
2007.06.03
Завершение приложения после исключительной ситуации


8-1159108278
_SuN_
2006-09-24 18:31
2007.06.03
Рисование на рабочем столе


8-1159187580
tst
2006-09-25 16:33
2007.06.03
TActiveMovie


2-1179133124
dobry
2007-05-14 12:58
2007.06.03
отображение memo поля


15-1178045625
Kerk
2007-05-01 22:53
2007.06.03
Как поднять себе настроение и при этом не испортить его другим?