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

Откуда:
Сообщений: 702
Добрый день. Есть следующая ситуация:
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

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

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

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

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

Откуда: Тула
Сообщений: 2150
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

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

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

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

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

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

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

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

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

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

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

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

Откуда: Санкт-Петербург
Сообщений: 25729
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

Откуда: Москва
Сообщений: 10424
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

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

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

Откуда: Москва
Сообщений: 10424
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

Откуда: Барнаул
Сообщений: 1635
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

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

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

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

Posted via ActualForum NNTP Server 1.5

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

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

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

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

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

Откуда:
Сообщений: 702
wolverin
а как вы вообще определили тогда что в диск не упирается?

так что если отключить запись на ССД!(файла после анализа в другой каталог. и удаление его же из основного каталога) то ничего не меняется
1 авг 19, 11:22    [21939628]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair
файлов сотни тысяч, размер от 1000 байт

2 года назад начали тут наши сотрудничать с одним "рукоблудом", который для неких задач управления удаленными устройствами закодил gsm/gprs модемы, все это дело управлялось через файлы на ftp, я им еще тогда сказал - пока вы там на коленке обслуживаете "пару" садоводческих товариществ - вы не упираетесь в проблему количества мелких файлов на серваке, это ущербная логика
не поверили, ну и что - теперь переделали на mysql, не так давно меня пытались убедить что надо формировать 10 тык мелких файлов, чем 1 со всеми данными )

так что открывайте хотя бы штатный системный монитор и смотрите счетчики диска - вам не зря сразу об этом написали.
1 авг 19, 11:25    [21939636]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Дегтярев Евгений
Pcrepair,

возьми уже профайлер


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

Откуда:
Сообщений: 1029
Pcrepair
так что если отключить запись на ССД!

ну видимо записи сотни тысяч не осуществляется и тут переполнение очереди записи нет, однако проблема с диском у вас никуда не делась.
1 авг 19, 11:27    [21939644]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3625
Pcrepair
операции с памятью... если потоков 2 тогда 15 мб, если 100 тогда 0.8...1.3 гб(но без сбоев)

Дело не в количестве потребляемой памяти, а в частоте выделения/освобождения.
1 авг 19, 11:40    [21939668]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 10424
Pcrepair
wolverin
а как вы вообще определили тогда что в диск не упирается?

так что если отключить запись на ССД!(файла после анализа в другой каталог. и удаление его же из основного каталога) то ничего не меняется
У Вас с логикой совсем плохо или Вы про быстродействие без чтения просто написали не проверяя?
Запись на диск может быть асинхронной, а чтение файла целиком - нет. Удаление без корзины - операция, практически не требующая дисковой активности.
1 авг 19, 11:59    [21939708]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Uridian
Member

Откуда: Lobnya
Сообщений: 210
Pcrepair
программа для обработки текстовых файлов
поток считывает файл, изучает содержимое
загрузка процессора 11-13%

По моему опыту, наиболее вероятная причина:
Kazantsev Alexey
Много операций с памятью, всё упирается в однопоточный менеджер памяти

Моя рекомендация, исключить все операции, изменяющие переменные типа string, (и другие явные/неявные операции выделения памяти, если они есть), по крайней мере из тела цикла.
1 авг 19, 12:55    [21939757]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Dimitry Sibiryakov
Member

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

Uridian
Моя рекомендация, исключить все операции, изменяющие переменные типа string, (и другие
явные/неявные операции выделения памяти, если они есть), по крайней мере из тела цикла.

Или использовать фиксированные буфера вместо строк.

Posted via ActualForum NNTP Server 1.5

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

Откуда: Москва
Сообщений: 10424
Uridian
Моя рекомендация, исключить все операции, изменяющие переменные типа string, (и другие явные/неявные операции выделения памяти, если они есть), по крайней мере из тела цикла.
Прежде чем давать такие рекомендации нужно, действительно, профилирование запустить.
Маловероятно, чтобы в задаче, где не требуется постоянное реаллоцирование, тормозил именно менеджер памяти. Хотя, конечно, встречаются талантливые люди...
1 авг 19, 13:10    [21939780]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3625
Соколинский Борис
Маловероятно, чтобы в задаче, где не требуется постоянное реаллоцирование, тормозил именно менеджер памяти

IntToStr, и вот тебе пожалуйста...
1 авг 19, 13:15    [21939790]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Kazantsev Alexey
Соколинский Борис
Маловероятно, чтобы в задаче, где не требуется постоянное реаллоцирование, тормозил именно менеджер памяти

IntToStr, и вот тебе пожалуйста...


в коде потока и вызываемых потоком функций IntToStr нет
1 авг 19, 14:27    [21939895]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wadman
Member

Откуда: Санкт-Петербург
Сообщений: 25729
Pcrepair
Kazantsev Alexey
пропущено...

IntToStr, и вот тебе пожалуйста...


в коде потока и вызываемых потоком функций IntToStr нет

Ну вот, одну интригу загубил...
1 авг 19, 14:30    [21939899]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Leonid Kudryavtsev
Member

Откуда:
Сообщений: 7779
wadman
Но код лучше не показывать, т.к. гадать намного интереснее.

+++

Дегтярев Евгений
возьми уже профайлер

---

Не спортивно. Так будет не интересно
1 авг 19, 14:49    [21939920]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Ghost Writer
Member

Откуда: Россия
Сообщений: 821
Pcrepair
Вопрос: как всетаки загрузить проц на все 200% ?
запустить 8 экземпляров программы. не, ну а чоКартинка с другого сайта.
1 авг 19, 14:55    [21939927]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
vavan
Member

Откуда: Казань
Сообщений: 3353
Соколинский Борис
Маловероятно, чтобы в задаче, где не требуется постоянное реаллоцирование, тормозил именно менеджер памяти. Хотя, конечно, встречаются талантливые люди
его может быть столько неявного что ни в чем неповинный, но просто неискушенный пользователь и знать не увидит сколько на пустом казалось бы месте огребает, пока на ассемблерный код не посмотрит, либо профайлер или кто еще не подскажет
1 авг 19, 15:04    [21939932]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3625
Pcrepair
в коде потока и вызываемых потоком функций IntToStr нет

Ну чего в угадайку-то играть...
+ Простейший способ...

unit tracemm;

interface

threadvar

 AllocMemCount   : NativeInt;
 ReallocMemCount : NativeInt;
 FreeMemCount    : NativeInt;

implementation

var

 OldMM : TMemoryManagerEx;
 NewMM : TMemoryManagerEx;

function NewGetMem(Size : NativeInt) : Pointer;
begin

 Inc(AllocMemCount);

 Result := OldMM.GetMem(Size);

end;

function NewFreeMem(P : Pointer): Integer;
begin

 Inc(FreeMemCount);

 Result := OldMM.FreeMem(P);

end;

function NewReallocMem(P : Pointer; Size : NativeInt) : Pointer;
begin

 Inc(ReallocMemCount);

 Result := OldMM.ReallocMem(P, Size);

end;

function NewAllocMem(Size : NativeInt) : Pointer;
begin

 Inc(AllocMemCount);

 Result := OldMM.AllocMem(Size);

end;

initialization

 GetMemoryManager(OldMM);

 NewMM := OldMM;

 NewMM.GetMem     := @NewGetMem;
 NewMM.FreeMem    := @NewFreeMem;
 NewMM.ReallocMem := @NewReallocMem;
 NewMM.AllocMem   := @NewAllocMem;

 SetMemoryManager(NewMM);

finalization

 SetMemoryManager(OldMM);

end.

1. Подключаешь первым модулем в проект.
2. В потоке, в начале итерации, сохраняешь значения счётчиков: AllocMemCount, ReallocMemCount, FreeMemСount в локальные переменные.
3. В конце итерации считаешь разницу и получаешь количество обращений к менеджеру памяти.
4. ПРОФИТ.
1 авг 19, 15:13    [21939943]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Gator
Member

Откуда: Москва
Сообщений: 14720
Друзья, привет! Я, конечно, отстал в больничках, но мы не сгорели, не потонули.
И разъясните, пожалуйста, почему он 200% хочет на единственной тачке?
Pcrepair
Вопрос: как всетаки загрузить проц на все 200% ?

__________
Даже если многомашинную систему соберёт, всё равно N*100% не получит.
Будут потери на связь, диски и другую лабуду-периферию. Хоть в азоте тачки утопи.
1 авг 19, 15:30    [21939966]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Ghost Writer
Pcrepair
Вопрос: как всетаки загрузить проц на все 200% ?
запустить 8 экземпляров программы. не, ну а чо


ну в общем работает. если запустить два раза(на разные базы конечно) то загрузка проца удваивается
1 авг 19, 15:35    [21939973]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Gator
Друзья, привет! Я, конечно, отстал в больничках, но мы не сгорели, не потонули.
И разъясните, пожалуйста, почему он 200% хочет на единственной тачке?
Pcrepair
Вопрос: как всетаки загрузить проц на все 200% ?

__________
Даже если многомашинную систему соберёт, всё равно N*100% не получит.
Будут потери на связь, диски и другую лабуду-периферию. Хоть в азоте тачки утопи.


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

Откуда: Москва
Сообщений: 14720
Pcrepair, нельзя продукты делать на 12% КПД
1 авг 19, 15:41    [21939983]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Kazantsev Alexey
1. Подключаешь первым модулем в проект.
2. В потоке, в начале итерации, сохраняешь значения счётчиков: AllocMemCount, ReallocMemCount, FreeMemСount в локальные переменные.
3. В конце итерации считаешь разницу и получаешь количество обращений к менеджеру памяти.
4. ПРОФИТ.


первым модулем в проект? в манагере проекта что не заметил никакой иерархии модулей

В потоке, в начале итерации
Итерация в программировании — в широком смысле — организация обработки данных, при которой действия повторяются многократно, не приводя при этом к вызовам самих себя (в отличие от рекурсии)

че не там итерации в потоке просто идет вызов функций и логика в конце

в конце итерации то нет

а вообще этот код не сломает компьютер?
1 авг 19, 15:45    [21939990]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Gator
Pcrepair, нельзя продукты делать на 12% КПД


ну да ну да. для того и тему вывесил, чтоб КПД завысить
1 авг 19, 15:47    [21939994]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
vavan
Member

Откуда: Казань
Сообщений: 3353
Pcrepair
вообще этот код не сломает компьютер?
+
с таким ником наверное должно быть не страшно
1 авг 19, 15:48    [21939997]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Kazantsev Alexey
Member

Откуда:
Сообщений: 3625
Вот так пытаешься помочь человеку, а он идиот...
1 авг 19, 15:49    [21939999]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
Kazantsev Alexey
Вот так пытаешься помочь человеку, а он идиот...


ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)
1 авг 19, 15:55    [21940007]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Соколинский Борис
Member

Откуда: Москва
Сообщений: 10424
Pcrepair
ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)
Иногда для педагогического эффекта требуются розги, причем не виртуальные.
1 авг 19, 16:01    [21940018]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Dimitry Sibiryakov
Member

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

Pcrepair
нет плохих учеников, но есть плохие учителя(Ц)

Да, да, можешь и дальше самоутешаться этой инфантильной глупостью. Или таки включить мозг
и начать изучать как работает компьютер и программы.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 579
Pcrepair
Kazantsev Alexey
Вот так пытаешься помочь человеку, а он идиот...


ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)

+1 000 000! Отличный девиз для неудачника.
1 авг 19, 16:37    [21940050]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
NetObserver
Member

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

ну в общем работает. если запустить два раза(на разные базы конечно) то загрузка проца удваивается

Вот! Это показатель того, что программа написана с ошибкой в распараллеливании
потоков. Где-то есть бутылочное горлышко и потоки работают последовательно.
Проверяйте синхронизацию с основным потоком, возможно где-то неявная синхронизация, например выделение памяти или какой-то компонент.
1 авг 19, 19:53    [21940155]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
Pcrepair
ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)

интересный вы человек, вам предлагают варианты - вы не делаете ничего, но уже на 3 страницу перешли )
1 авг 19, 19:57    [21940157]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
wolverin
Pcrepair
ну значит плохо пытаешься. нет плохих учеников, но есть плохие учителя(Ц)

интересный вы человек, вам предлагают варианты - вы не делаете ничего, но уже на 3 страницу перешли )


если удалить повторы-цитаты и просто треп не по делу останется не более одной страницы

но как говориться в таких случаях "нет у меня для вас других форумов"

Вот! Это показатель того, что программа написана с ошибкой в распараллеливании


программа очень простая:
- создается поток и ему передается несколько параметров(строки и числа)
- поток через трубу читает файл с ССД диска и определяет его статус
- копирует в другой каталог
- удаляет файл в первом каталоге
число потоков от 2 до 100, загрузка проца одинакова, меняется только размер занимаемой памяти
прога уже обработала несколько сот тысяч файлов без единого сбоя (исключение)
ага!
1 авг 19, 20:40    [21940184]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Pcrepair
- создается поток и ему передается несколько параметров(строки и числа)

Когда вы перестанете мыслить низкоуровневыми примитивами типа потока, и начнете думать более высокоуровневыми такими как ITask.
Ведь и код проще и поддержка проще.
1 авг 19, 21:14    [21940199]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Ну вот пример
procedure TForm1.Test;
const
  Src = 'e:\DelphiTest\A';
  Dst = 'e:\DelphiTest\B\';
begin
  var Closure :=
    procedure (const aFileName: string)
    begin
      TTask.Run(
        procedure
        begin
          var FileContent := TFile.ReadAllBytes(aFileName);
          TFile.WriteAllBytes(Dst + TPath.GetFileName(aFileName), FileContent);
          TFile.Delete(aFileName);
        end
      );
    end;

  var Files := TDirectory.GetFiles(Src);
  for var FileName in Files do
    Closure(FileName);
end;


Я тут совершенно не понимаю, почему процессор должен быть загружен.
Положил в папку 35 файлов по 25 мб.
Ну перенеслись они за какое-то время... процессор тут при чем?
1 авг 19, 21:54    [21940212]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
А вот если добавить
  var Closure :=
    procedure (const aFileName: string)
    begin
      TTask.Run(
        procedure
        begin
          var FileContent := TFile.ReadAllBytes(aFileName);
          // добавим чтобы нагрузить процессор
          for var ByteContent1 in FileContent do
            for var ByteContent2 in FileContent do
              if Random(10) < 5 then
                Break;

          TFile.WriteAllBytes(Dst + TPath.GetFileName(aFileName), FileContent);
          TFile.Delete(aFileName);
        end
      );
    end;


То и получим 100% на всех ядрах.
1 авг 19, 22:01    [21940216]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
автор
То и получим 100% на всех ядрах.
X-Cite

это все познавательно, занимательно и очень интересно(работа с диском). но не имеет никакого отношения к загрузке проца в моем случае
но все равно спасибо
1 авг 19, 22:38    [21940225]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Pcrepair
автор
То и получим 100% на всех ядрах.
X-Cite

это все познавательно, занимательно и очень интересно(работа с диском). но не имеет никакого отношения к загрузке проца в моем случае
но все равно спасибо


автор
1. Комп(i7 8 вирт. ядер; 8гб ОЗУ; ВЫНь7 х64; SSD для хранения данных; ХЕ10.2.3)


8 одновременных тасок с внутренними циклами загрузят все ядра на 100%.

Уберите вашу работу с потоками на таски и увидите результат.. Если конечно нет каких-то внутренних синхронизаций между ними и пока одна работает другие 7 ждут.
1 авг 19, 22:55    [21940232]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

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

если удалить все ваши посты, потому что они вообще ниачем, то может и еще меньше станет
даже я погуглил варианты которые советуют разработчики крупных систем в вашей ветке - вы же не изучили ничего, все одно и то же городите как попугай, никакого анализа не сделано вами.
2 авг 19, 05:41    [21940282]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Pcrepair
Member

Откуда:
Сообщений: 702
8 одновременных тасок с внутренними циклами загрузят все ядра на 100%

все таки задача не в том чтобы ПРОСТО загрузить проц на 100% а загрузить его на 100% задачами обработки данных. или имеется в виду
procedure Test;
begin
  var Closure :=
    procedure (const aFileName: string)
    begin
      TTask.Run(
        procedure
        begin
          //do something usefull
        end
      );
    end;
end;


типа заменить поток на задание?
2 авг 19, 07:25    [21940304]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
ziv-2014
Member

Откуда:
Сообщений: 376
X-Cite
Pcrepair
пропущено...
X-Cite

это все познавательно, занимательно и очень интересно(работа с диском). но не имеет никакого отношения к загрузке проца в моем случае
но все равно спасибо


автор
1. Комп(i7 8 вирт. ядер; 8гб ОЗУ; ВЫНь7 х64; SSD для хранения данных; ХЕ10.2.3)


8 одновременных тасок с внутренними циклами загрузят все ядра на 100%.

Уберите вашу работу с потоками на таски и увидите результат.. Если конечно нет каких-то внутренних синхронизаций между ними и пока одна работает другие 7 ждут.

А 8 одновременно потоков с внутренними циклами не загрузят все ядра на 100%? ITask - это интерфейс, обертка над TThread и пулом потоков.
2 авг 19, 09:44    [21940382]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
ziv-2014

Вызвать асинхронно метод который выполнчет работу проще для понимания, чем копаться в наследниках tthread.

Сама фраза передачи в поток строки и числа уже говорит о тотальном непонимании как это асе работает...
2 авг 19, 10:11    [21940418]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
wolverin
Member

Откуда:
Сообщений: 1029
X-Cite
Сама фраза передачи в поток строки и числа уже говорит о тотальном непонимании как это асе работает...

т.е. чтение из одной области памяти разными потоками вызывает блокировки?
2 авг 19, 10:15    [21940424]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
wolverin
X-Cite
Сама фраза передачи в поток строки и числа уже говорит о тотальном непонимании как это асе работает...

т.е. чтение из одной области памяти разными потоками вызывает блокировки?

Нет. С чего вдруг?
2 авг 19, 10:21    [21940427]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
ziv-2014
Member

Откуда:
Сообщений: 376
X-Cite
ziv-2014

Вызвать асинхронно метод который выполнчет работу проще для понимания, чем копаться в наследниках tthread.

Сама фраза передачи в поток строки и числа уже говорит о тотальном непонимании как это асе работает...

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

Откуда:
Сообщений: 1029
X-Cite
Нет. С чего вдруг?

говорят тут про блокировки все, понять не могу где они )
2 авг 19, 10:55    [21940458]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
X-Cite
Member

Откуда: Минск
Сообщений: 1515
Я вам привел минимальный код который выполняет мнимую полезную работу согласно вашим пунктам и нагружает соответственно все ядра.
Читает файл. Что-то делает с ним. Записывает его в другое место и удаляет.
У меня hdd. Все работает в параллели и все ядра загружены.
2 авг 19, 11:08    [21940472]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3298
Кода, я так понимаю, мы так и не увидим
4 авг 19, 14:32    [21941551]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
cptngrb
Member

Откуда:
Сообщений: 346
если автор уверен, что в его коде нет блокировок, то ...
был у меня случай на Windows Server какой-то, режим питания стоял по умолчанию и проц никак не хотел "грузиться", но поменяли план электропотребления и чудо произошло
6 авг 19, 12:24    [21942801]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
kdv
Member

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

12% загрузки 8 ядерного процессора это 1/8 от 100% загрузки 8ядерного процессора.
Таким образом, реально загружено только 1 ядро из 8. То, что вы видите в диспетчере задач - ОС просто перекитывает ваш процесс с одного ядра на другое. И вы видите типа "пилу" на нескольких ядрах.
Если бы у вас хоть еще 1 ядро было дополнительно загружено, вы бы увидели общую загрузку процессора между 13 и 25%.

Если у вас в программе n потоков, но используется 1 ядро, это значит, что потоки параллельно не работают - где-то они затыкаются на монопольной синхронизации между потоками.

Для дельфи есть несколько примеров работы с потоками, которые реально распараллеливаются по ядрам.
6 авг 19, 13:08    [21942852]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
b0rk
Member

Откуда: Харьков
Сообщений: 584
Pcrepair
программа очень простая:
- создается поток и ему передается несколько параметров(строки и числа)
- поток через трубу читает файл с ССД диска и определяет его статус
- копирует в другой каталог
- удаляет файл в первом каталоге
число потоков от 2 до 100, загрузка проца одинакова, меняется только размер занимаемой памяти
прога уже обработала несколько сот тысяч файлов без единого сбоя (исключение)
ага!

давно известно, что обращение к диску (хоть HDD, хоть SDD) - это самая медленная операция. если вы упираетесь в скорость чтения/записи диска, то хоть в 100500 потоков запустите, все равно быстрее не станет. и, конечно, ожидать загрузки всех ядер процессора на 100% при дисковых операциях очень наивно.
6 авг 19, 13:50    [21942929]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3298
Как показывает практика, загрузить дисковую систему на 100% сложно, какие-то дополнительные телодвижения есть всегда, и они параллелятся вполне. Нужно подбирать очень особенную задачу наверно, чтобы от распараллеливания выигрыша вообще не было. Другое дело, что ожидать 100% загрузки ядер тоже не всегда стоит.
6 авг 19, 17:02    [21943119]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 30227

06.08.2019 17:02, makhaon пишет:
> Как показывает практика, загрузить дисковую систему на 100% сложно

отформатируй дискетку в Win95

Posted via ActualForum NNTP Server 1.5

6 авг 19, 17:03    [21943121]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Gator
Member

Откуда: Москва
Сообщений: 14720
kdv
используется 1 ядро, это значит, что потоки параллельно не работают
affinitymask?
6 авг 19, 17:07    [21943126]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
b0rk
Member

Откуда: Харьков
Сообщений: 584
makhaon
Как показывает практика, загрузить дисковую систему на 100% сложно, какие-то дополнительные телодвижения есть всегда, и они параллелятся вполне. Нужно подбирать очень особенную задачу наверно, чтобы от распараллеливания выигрыша вообще не было.

Берем 1 физичесое устройство (HDD или SDD) и копируем 100 файлов последовательно и 100 файлов параллельно. Параллельно будет медленее. Нужны весьма специфические условия (например, каждый фал на отдельном физическом носителе), чтобы распаралеливание дисковых операция дало ускорение.
6 авг 19, 17:22    [21943144]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
vavan
Member

Откуда: Казань
Сообщений: 3353
makhaon
Как показывает практика, загрузить дисковую систему на 100% сложно
всем бы такую практику чтоб дисковая не перегружалась
6 авг 19, 17:38    [21943161]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Alex9801
Member

Откуда: Москва
Сообщений: 44
b0rk
Берем 1 физичесое устройство (HDD или SDD) и копируем 100 файлов последовательно и 100 файлов параллельно. Параллельно будет медленее...

При работе с одиночным HDD основное время занимает переход головки с дорожки на дорожку, особенно начало-конец + конец-начало диска. Если использовать асинхронный ввод-вывод, то можно существенно повысить скорость работы, путем уменьшения кол-ва таких переходов.
Ну и порты завершения ввода-вывода в помощь для оптимизации процессорного времени.

Крайне рекомендую 1-ю часть "Программирование серверных приложений для Windows 2000" Рихтера.
6 авг 19, 18:37    [21943206]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
Дегтярев Евгений
Member

Откуда: Барнаул
Сообщений: 1635
b0rk
давно известно, что обращение к диску (хоть HDD, хоть SDD) - это самая медленная операция

неправда, есть еще сеть ))
6 авг 19, 19:59    [21943287]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3298
Мимопроходящий,

Дискету с дисководом найдёшь?
7 авг 19, 09:52    [21943491]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3298
vavan,

Перегружается, если потоков много. Но мы же про один говорим?
7 авг 19, 09:54    [21943494]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3298
Alex9801,

И часто встречается копирование в пределах тома? В реальной программе, а не в тестах?
7 авг 19, 09:57    [21943496]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
makhaon
Member

Откуда: A galaxy far far away
Сообщений: 3298
b0rk,

Предыдущее сообщение было адресовано этому человеку, не туда отписал
7 авг 19, 09:59    [21943501]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
vavan
Member

Откуда: Казань
Сообщений: 3353
makhaon
Перегружается, если потоков много. Но мы же про один говорим?
я хз сколько там потоков по дифолту, но мне для примера даже винрару приоритет понижать приходится и паузы ставить чтоб не ставил раком всю систему при упаковке
7 авг 19, 10:34    [21943533]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
YuRock
Member

Откуда: Донецк
Сообщений: 3961
Архиваторы успешно грузят проц на 100%. И работают при этом с диском активно.
То же самое - редакторы/перекодировщики видео.
7 авг 19, 12:45    [21943705]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
vavan
Member

Откуда: Казань
Сообщений: 3353
YuRock
Архиваторы успешно грузят проц на 100%
в моем случае проца-то и прочим доставалось достаточно а вот дисковая раком
7 авг 19, 12:51    [21943713]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
b0rk
Member

Откуда: Харьков
Сообщений: 584
YuRock
Архиваторы успешно грузят проц на 100%. И работают при этом с диском активно.
То же самое - редакторы/перекодировщики видео.

архиваторы читают файлы в один поток, потом в несколько потоков жмут, и опять в один записывают. архиваторы умные люди писали однако.
7 авг 19, 12:58    [21943724]     Ответить | Цитировать Сообщить модератору
 Re: Многопоточность и загрузка 8-и ядерного процессора  [new]
vavan
Member

Откуда: Казань
Сообщений: 3353
b0rk
архиваторы умные люди писали однако
да, те кто параметры предоставили чтоб притормозить коней можно былоКартинка с другого сайта.
7 авг 19, 13:04    [21943731]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: 1 2 3 4      [все]
Все форумы / Delphi Ответить