Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
 Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

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

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

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

Всем ответившим по делу заранее спасибо.
31 июл 19, 20:46    [21939306]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3884
Pcrepair,

1. Много дисковой активности, всё начинает упираться в диск
2. Много операций с памятью, всё упирается в однопоточный менеджер памяти
3. Потоки манипулируют разделяемыми данными, вися на блокировках
31 июл 19, 21:46    [21939328]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 28278
Pcrepair
все рано загрузка процессора 11-13%

100% / 8 ядер = ... о ужас, 12.5. То есть, программа параллельно не работает, и грузит только ОДНО ядро.
1 авг 19, 00:06    [21939373]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
white_nigger
Member

Откуда: Тула
Сообщений: 2209
Pcrepair,
А если заменишь ssd на hdd - то, о ужас, загрузка процессора ещё уменьшится.
PS: И всё же, что за мода - пытаться вогнать компутер в ступор?...
1 авг 19, 03:38    [21939392]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair,

отделить операции чтения и особенно записи от зависимости к количеству потоков, эмпирическим путем установить при каком достигается 100% загрузка очереди диска - создать свою очередь файлов, которую уже анализировать отдельными потоками, на диск же делать запись большими кусками, а не кучей мелких задач.
1 авг 19, 06:10    [21939401]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair,

еще как вариант по железу - собрать из ссд раид 0 с чередованием )
1 авг 19, 06:14    [21939402]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair
Вопрос: как всетаки загрузить проц на все 200% ?

формально получается на все 800% )
1 авг 19, 06:17    [21939403]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
wolverin
еще как вариант по железу - собрать из ссд раид 0 с чередованием )

+ раид контроллер внешний с большим кешем и обратной записью ))
1 авг 19, 06:26    [21939404]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 26132
Pcrepair
настройка от 2 до 100 потоков

Попробуй поиграться с affinity mask.
Я грузил процессор на 100%, задействовав все ядра.
1 авг 19, 07:31    [21939424]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 10980
wadman
Попробуй поиграться с affinity mask.
Я грузил процессор на 100%, задействовав все ядра.
У меня в расчетной задачи грузится на 100% без игр с масками, даже антивирь эпизодически беспокоится, не вирус ли.
У автора, скорее всего, где-то бутылочное горло типа Synchronize()
1 авг 19, 07:41    [21939429]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 26132
Соколинский Борис
У меня в расчетной задачи грузится на 100% без игр с масками

Если потоков больше, чем ядер, то так или иначе ОС примерно распараллелит.
Я обычно ограничиваю по количеству ядер и в этом случае бывает всякое.
Проще ручками указать.
1 авг 19, 08:35    [21939448]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 703
насчет Synchronize() идея интересная, но нет все по прежнему

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

операции с памятью... если потоков 2 тогда 15 мб, если 100 тогда 0.8...1.3 гб(но без сбоев), но загрузка проца по прежнему

"программа параллельно не работает, и грузит только ОДНО ядро" вот тут не понял, распределением нагрузки ОС же заведует и при много потоках ОС должна все ресурсы отдать. и что такое "программа параллельно не работает"

"Попробуй поиграться с affinity mask" ??? а моЖет для потока выставить tpHigher, tpHighest сейчас tpNormal

К сообщению приложен файл. Размер - 55Kb
1 авг 19, 08:47    [21939457]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 26132
Pcrepair
"Попробуй поиграться с affinity mask" ??? а моЖет для потока выставить tpHigher, tpHighest сейчас tpNormal

Это из другой оперы и вряд-ли поможет.

Но код лучше не показывать, т.к. гадать намного интереснее.
1 авг 19, 08:53    [21939465]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair
в диск ничего не упирается, если отключить запись все по прежнему

а при одном потоке такая же загрузка ядра?
1 авг 19, 09:00    [21939471]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 10980
Pcrepair
насчет Synchronize() идея интересная, но нет все по прежнему
Это я как пример привел, таких проблемных мест может быть много.

Pcrepair
в диск ничего не упирается, если отключить запись все по прежнему
А если отключить чтение - просто инициализровать буфер случайными байтами?


операции с памятью... если потоков 2 тогда 15 мб, если 100 тогда 0.8...1.3 гб(но без сбоев), но загрузка проца по прежнему

"программа параллельно не работает, и грузит только ОДНО ядро" вот тут не понял, распределением нагрузки ОС же заведует и при много потоках ОС должна все ресурсы отдать. и что такое "программа параллельно не работает"

"Попробуй поиграться с affinity mask" ??? а моЖет для потока выставить tpHigher, tpHighest сейчас tpNormal

Картинка с другого сайта.[/quote]
1 авг 19, 09:05    [21939476]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 703
"А если отключить чтение - просто инициализровать буфер случайными байтами?" ну тогда обрабатывать будет нечего и ессевтвенно производительность скакнет до небес даже со случайными байтами

вообще программа анализирует тексты(строки) в частности там есть много циклов ДЛЯ и ПОВТОР в том числе сравнение может идти 1500 строк с 50000 строк. может это уже проц быстрее не тянет? или где ограничение...
1 авг 19, 09:11    [21939480]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 10980
Pcrepair
"А если отключить чтение - просто инициализровать буфер случайными байтами?" ну тогда обрабатывать будет нечего и ессевтвенно производительность скакнет до небес даже со случайными байтами

Если так, значит именно чтение и тормозит. Логично?
У Интела есть ряд примочек для ускорения работы с дисками для пары SSD-HDD, мне в свое время это помогло разрешить похожую проблему, когда после перехода c W7 на W10 внезапно стало все работать в разы медленнее, затык был именно на дисковых операциях.
1 авг 19, 09:18    [21939484]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair,

на одном ядре попробуйте без потоков
1 авг 19, 09:18    [21939485]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair
"А если отключить чтение - просто инициализровать буфер случайными байтами?" ну тогда обрабатывать будет нечего и ессевтвенно производительность скакнет до небес даже со случайными байтами

а как вы вообще определили тогда что в диск не упирается?
1 авг 19, 09:20    [21939488]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair,

а какой средний размер и количество файлов?
1 авг 19, 09:25    [21939492]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1702
wolverin
Pcrepair,
отделить операции чтения и особенно записи от зависимости к количеству потоков, эмпирическим путем установить при каком достигается 100% загрузка очереди диска - создать свою очередь файлов, которую уже анализировать отдельными потоками, на диск же делать запись большими кусками, а не кучей мелких задач.

wolverin
еще как вариант по железу - собрать из ссд раид 0 с чередованием )

wolverin
+ раид контроллер внешний с большим кешем и обратной записью ))


может сначала проблему найти?
1 авг 19, 10:06    [21939543]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Дегтярев Евгений
может сначала проблему найти?

а я как написал?
wolverin
эмпирическим путем установить при каком достигается 100% загрузка очереди диска
1 авг 19, 10:18    [21939552]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 48611

Pcrepair
или где ограничение...

Ограничение в том, что ты всё ещё продолжаешь писать валидный, но совершенно кривой код.

Posted via ActualForum NNTP Server 1.5

1 авг 19, 10:53    [21939586]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 703
wolverin
Pcrepair, а какой средний размер и количество файлов?

файлов сотни тысяч, размер от 1000 байт до 20 мбайт. были еще от 20 до 100 мб но там уже памяти не хватает и поэтому такие файлы из обработки исключаются. да там и нет ничего полезного это дефектные данные
1 авг 19, 11:18    [21939620]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1702
Pcrepair,

возьми уже профайлер
1 авг 19, 11:22    [21939626]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить