Войти
ПрограммированиеФорумОбщее

Многоядерность в различных версиях Windows

#0
8:23, 10 авг. 2010

Попытался найти информацию о том, в каких ОС как устроена работа системы с потоками, но чтото внятной инфы нигде не нашёл...
Много писали о том, что ХП работает хуже с многоядерностью, чем Виста/7 и лично я это замечал...
Вопрос в следующем, берём приложение (всего один поток главный), запускаем его и садим на CPU0, потом снова запускаем, но уже с маской CPU0 + CPU1 (два ядра)...
На ХП разницы нет, на 7ке разница есть, гдето ФПС выше 30-35%...
Собственно главный вопрос... В чём разница между ХП и Вистой/7кой при работе системы с потоками?
Я обладаю лишь инфой из книжки о том, как это работает в Винде 2000, хотелось бы знать как работает в других системах...

З.Ы. Холивары на тему XP vs Vista/7 буду жестоко присякать, нужны только факты...


#1
10:15, 10 авг. 2010

>На ХП разницы нет, на 7ке разница есть, гдето ФПС выше 30-35%...
1. Просто 7-ка жрет больше и жрет ядра по очереди. Поэтому при маске CPU0 приложение притормаживается, а при маске CPU0+CPU1 приложение выталкивается на более свободное ядро, туда-сюда-туда-сюда.
2. На самом деле графическое приложение не такое и однопоточное, еще есть дровишки и ГПУ, работающий параллельно ЦПУ.
3. Третий вариант пока не придумал.

#2
12:03, 10 авг. 2010

В семёрке, похоже, много думали над вопросами масштабируемости.
Т.е. сейчас количество процессоров/ядер активно изменяется в большую сторону. И в цитадели добра это заметили.

По наблюдениям, ряд механизмов допилили.
Пробовал тестировать память в XP/2003 server vs Vista vs 7/2008 server. Тестировал new/delete и свой аллокатор.
На 4-х ядрах 8 потоков выделяли/освобождали куски памяти произвольного (до 64 байт) размера.
Итог: XP/2003 server в двое медленней моего аллокатора. Виста примерно на 50% отстаёт. В семёрке и 2008 сервере мои извращения с выделением памяти работают примерно на 5% быстрее операторов new/delete.
Причем, производительность моего аллокатора также возрастает при смене операционки.

#3
12:45, 10 авг. 2010

А почему не спросить у мелкомягких? :)

#4
14:26, 10 авг. 2010

При синхронизации, когда несколько потоков залочивают ресурс.

Допустим у нас есть потоки A, B, C, которые последовательно, друг, за другом лочат, скажем, мутекс.
Ситуация: A владеет ресурсом, B и C ожидают его освобождения.
A,B находятся на одном ядре. С - на втором.

В XP используется FIFO-алгоритм для ожидающих освобождения ресурса потоков. Т.е. после освобожения ресурса потоком А, следующий кто им завладеет будет поток B.

Такая схема оказалась нееффективна для многоядерных процов.
Если A и B находятся на одном ядре, то после разлочивания ресурса, поток A все еще выполняется, пока не истечет его квант/слайс (тут деталей не знаю).
В это время ресурс находится в сворбодном состоянии, хотя на его владение уже выставилась учередь из потоков B и C.


В Vista/Win7 эту ситуацию исправили, и там используется другой алгоритм:  при освобождении ресурса потоком А, им сразу же, не ожидая, завладевает поток С, который находится на другом ядре. Т.е. исключается простой равный остатку кванта/слайса потока А.

#5
23:46, 16 авг. 2010

Executor
Ну что там?
Для чего нужно было?
Что накопал?

#6
10:32, 17 авг. 2010

Спасибо за ответы...
Да просто информации ради, чтобы понять почему так происходит... :)
Теперь понятнее вроде...

ПрограммированиеФорумОбщее

Тема в архиве.