Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "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
Время: 0.038 c
3-1174234575
kaif
2007-03-18 19:16
2007.06.03
DBLookupComboBox с дополнительными кнопками


9-1152542077
VolanD666
2006-07-10 18:34
2007.06.03
Задачка по математике


15-1178473877
Knight
2007-05-06 21:51
2007.06.03
Тут кто-нить змеев делал?


1-1176118886
oxffff
2007-04-09 15:41
2007.06.03
Очередные баги компилятора.


1-1175838763
atruhin
2007-04-06 09:52
2007.06.03
Не приходит событие OnActivate





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский