Здравствуйте, sof.bix, Вы писали:
SB>В общем сравнивалось время выполнения двух версий программы. В ней есть параллельно идущие и нераспараллеленые куски кода, выполняющиеся по одиночке примерно за 200сек. Одна была с отключеной поддержкой OpenMP, другая включеной (число потоков=числу ядер фиксированно). Запуск разных версий шел естественно последовательно, но в разных, параллельно идущих, количествах копий . 4-8. Скорость падала при количестве процессов, сравнимым с количеством ядер.
Ну а что Вы хотите? У Вас при включенном OpenMP каждый из 4-8 процессов запускает минимум 4 потока, всего имеете от 16 до 32 потока, одновременно конкурирующих за процессорное время 4-х ядер. Oversubscription, однако; как следствие — увеличение накладных расходов на переключение контекстов, а если вычисления ещё и с памятью что-то делают — значительно больше промахов по кэшу. Если OpenMP отключить — 4-8 потоков на 4 ядра, соответственно и проблем нет.
SB>Коллективная мысль наводит что дело в Виндовом шедулере, т.е. под саляркой меньшие потери будут!?