Я пытаюсь использовать подержанный Dell Poweredge R900 в качестве вычислительного пула (4 квадроцикла дают мне 16 ядер для моделирования). На данный момент он работает под управлением Windows Server 2008 R2 Enterprise.
Я запускаю собственный код .net и могу указать количество потоков, которое мне нужно. Обычно (например, на моей машине с четырьмя ядрами Windows 10) поток рельсы ядра процессора в течение 10 минут или около того. Если я запускаю 7 потоков на моем сервере (например), я вижу, что 7 из моих 16 ядер загораются при использовании 20%. Если я запускаю 16 потоков, я вижу все 16 ядер на ~ 20%. Поэтому я попытался запустить 48 потоков, ожидая, что мои 16 ядер теперь будут иметь по 3 потока и, таким образом, будут загружены на 60%, но без кубиков. Я снова получаю 20% (и каждый поток заметно в 3 раза медленнее, поэтому обрабатываются все 3 потока на ядро). Независимо от того, сколько потоков я запускаю, мое использование никогда не превышает 20% на ядро. Теперь, если я запустил 2 экземпляра своего кода с 16+ потоками каждый, все ядра перейдут на 40%. Третий экземпляр, 60%. Так что это не предел ФСБ или что-то в этом роде. Что-то должно подавлять каждый экземпляр до 20% на ядро.
Я хоть убей не могу понять, где здесь узкое место. это вещь сервера Windows? Что такое dell BIOS? Я переключил ОС с оптимизации для фоновых процессов на оптимизацию для программ ... Похоже, это не повлияло. Я совершенно не знаком с сервером Windows, поэтому будем благодарны за любые идеи!
Похоже, что в Server 2008 R2 есть способ ограничить загрузку ЦП. Я нашел информацию об этом здесь и рекомендую вам прочитать ее и, возможно, попытаться установить свои собственные ограничения:
https://technet.microsoft.com/en-us/library/ff384148(v=ws.10).aspx
Также обратите внимание, что в разделе комментариев к указанной выше ссылке есть 2 ссылки на дальнейшие объяснения по этому вопросу ...