Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 31.07.2019, 20:49
Pcrepair Pcrepair вне форума
Новичок
 
Регистрация: 20.01.2015
Сообщения: 52
Версия Delphi: Pascal
Репутация: 10
По умолчанию Многопоточность и загрузка 8-и ядерного процессора

Добрый день. Есть следующая ситуация:
1. Комп(i7 8 вирт. ядер; 8гб ОЗУ; ВЫНь7 х64; SSD для хранения данных; ХЕ10.2.3)
2. программа для обработки текстовых файлов в многопоточном режиме (настройка от 2 до 100 потоков)
- вызывается поток
- потоку передается путь к файлу
- поток считывает файл, изучает содержимое(есть несколько циклов ДЛЯ с большим числом итераций)
- поток принимает решение и копирует файл в другие каталоги

Результаты:
- сколько не выставляй количество потоков, все рано загрузка процессора 11-13% (всегда только 4-е ядра загружены на 25%) - это все по манагеру задач конечно
- пропорциональный рост потребляемой памяти, тут все понятно

Вопрос: как всетаки загрузить проц на все 200% ?
видимо есть какие то варианты?
или какието встроенные ограничения?

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

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

С первым ничего поделать скорее всего не получится. Если только попробовать переписать код с испольщованием SIMD инструкций.
С 2 и 3 надо играться с кол-вом потоков vs размером буферов. Может помочь частичть с загрузкой проца.
Ответить с цитированием
  #3  
Старый 01.08.2019, 09:01
Pcrepair Pcrepair вне форума
Новичок
 
Регистрация: 20.01.2015
Сообщения: 52
Версия Delphi: Pascal
Репутация: 10
По умолчанию

" Тип вычислений. Похоже у тебя идет в основном целочисленная нагрузка." вычислений(арифметических действий над ИНТ) практически нет. зато есть операции сравнения строк в цикле ДЛЯ и ПОВТОР причем доходит до 1500 на 50000(строк). программа анализирует тексты

"то винда начинает свопиться" если отключить перезапись файлов то все по прежнему

наверно затычка в циклах, проц не тянет крутить цикл быстрее. но для этого вводилась многопоточность, типа один не тянет пускай другие ядра пашут. но ядра то загружены на 25%

что то рисунок из каталога не вставить, а сцылки нет
в общем 4-е ядра нагружены на 25% и не выше
Ответить с цитированием
  #4  
Старый 02.08.2019, 00:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,003
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

1. Сравнение строк это и есть целочисленная арифметика.
2. Я говорю про своп памяти. То, что ты там у себя отключаешь в коде тут неважно.
3. Да как бы сами циклы тут точно непричем. Тут дело в теле цикла. Я же говорю, что очень похоже на попадание мимо кеша + своп памяти. Проц просто тупо ждет пока данные в кеш попадут.
Ответить с цитированием
  #5  
Старый 02.08.2019, 07:29
Pcrepair Pcrepair вне форума
Новичок
 
Регистрация: 20.01.2015
Сообщения: 52
Версия Delphi: Pascal
Репутация: 10
По умолчанию

понятно. будем думать. а тут есть серверок многопроцессрный и многоядерный, будет неудачно грузить его на 1% от возможного
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 14:24.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter