Показать сообщение отдельно
  #2  
Старый 01.08.2019, 03:15
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,015
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Очень зависит от типа загрузки. Как я понимаю, тут несколько проблем.
1. Тип вычислений. Похоже у тебя идет в основном целочисленная нагрузка. Т.О. уже на четырех физ. ядрах использованны все блоки целочисленных вычислений проца, так что виртуальные ядра, фактически, конкурируют с физическими за те же ресурсы. Т.е. при отключении виртуализации у тебя должна получиться загрузка 4х ядер на 50%
2. Надо смотреть как реализованна обработка данных. Есть вариант, что у тебя процессор ждет память (т.е. пока подгрузится нужный кусок в кеш процессора). Тут м.б. имеет смысл поиграться с кол-вом потоков и размером буферов, которые ты выделяешь для загрузки данных из файлов.
3. Связанная с п.2 проблема. Если ты оперируешь большими кусками памяти (в сумме больше, чем есть доступной физ. памяти), то винда начинает свопиться. Это убивает производительность дисковой подсистеся и процессор, опять же, ждет пока будут подгруженны нужные страницы из свопа.

С первым ничего поделать скорее всего не получится. Если только попробовать переписать код с испольщованием SIMD инструкций.
С 2 и 3 надо играться с кол-вом потоков vs размером буферов. Может помочь частичть с загрузкой проца.
Ответить с цитированием