Не мог бы кто-нибудь набросать пример, использующий 1, 2, 4, и более ядер процессора? А то часто встречаю оговорку что многоядерность имеет смысл лишь при программной поддержке. А как в Хиасм ее реализовать? Я так навскидку понимаю, это нужно в логике программы предусмотреть разделение ресурсоемких процессов на части и каждую часть запускать при помощи элемента Поток, например внутри динамического контейнера. Операционка, обнаружив 2 и более параллельных потока, сама будет их распределять по ядрам или нет и это тоже как-то нужно делать програмно? И как?
Этот топик читают: Гость
Ответов: 1291
Рейтинг: 47
|
|||
карма: 3 |
|
Ответов: 4628
Рейтинг: 747
|
|||
Достаточно использовать Поток. Нужно разделить задачу на количество потоков, а также правильно организовывать доступ к общим данным из потоков.
|
|||
карма: 26 |
| ||
Голосовали: | Aziz |
Ответов: 1291
Рейтинг: 47
|
|||
Netspirit, а как быть уверенным что эти потоки по ядрам разошлись, а не остались висеть на одном ядре?
|
|||
карма: 3 |
|
Разработчик
Ответов: 26112
Рейтинг: 2124
|
|||
Всем привет! Я тут мимо проходил
Aziz писал(а): а как быть уверенным что эти потоки по ядрам разошлись, а не остались висеть на одном ядре?Никак. Система сама выбирает свободный процессор, наименее загруженный. Но многократные проверки сего безобразия показали, что если создать количество потоков, равное количеству процессоров, то система равномерно распределит их между процессорами. Использование назначения affinity-маски рабочих процессоров потоку у нас не реализовано, да и не стоит этого делать, КМК. Если почитать комменты вот к этой функции потоков -- https://learn.microsoft.com/ru-ru/windows/win32/api/winbase/nf-winbase-setthreadaffinitymask, то будет понятно почему. Редактировалось 1 раз(а), последний 2023-05-19 01:36:21 |
|||
карма: 22 |
| ||
Голосовали: | Aziz |
Ответов: 771
Рейтинг: 168
|
|||
Aziz писал(а): Не мог бы кто-нибудь набросать пример, использующий 1, 2, 4, и более ядер процессора? А то часто встречаю оговорку что многоядерность имеет смысл лишь при программной поддержке. А как в Хиасм ее реализовать?Уже были похожие темы, вот одна из - них https://forum.hiasm.com/topic/67804/0 Всё зависит от задачи, которую ты пытаешься решить. Возможно, там и не нужна многопроцессорность.
Загрузка всех ядер процессора.PNG |
|||
карма: 15 |
|
Ответов: 1291
Рейтинг: 47
|
|||
nesco, Gunta, спасибо! Все понятно. Просто собрал суперкомп с 36 ядрами и думаю как бы их все использовать - например при обработке видео или нейрообучении.
nesco, привет проходи не мимо почаще) Без тебя тут никак. nesco писал(а): равное количеству процессороРедактировалось 2 раз(а), последний 2023-05-19 08:10:22 |
|||
карма: 3 |
|
Ответов: 8910
Рейтинг: 823
|
|||
nesco, проходя мимо задержитесь здесь. Форум и так, сам по себе, замирает, не ускоряйте его забвение.
|
|||
карма: 19 |
| ||
Голосовали: | kamakama |
Разработчик
Ответов: 26112
Рейтинг: 2124
|
|||
Aziz писал(а): или ему кратное?Ему кратное будет создавать потоки в тех процессорах, которые уже заняты предыдущими. Это не имеет смысла, проще разбить задачу на куски, а куски разбить на кол-во процессоров. В этом случае, каждый кусок будет выполняться мультипроцессорно, но последовательно кусок за куском. Вот тебе пример, как организовано мультипоточное сканирование диапазона IP-адресов: ScanIP
Обрати внимание, что результат считывается в синхронном с основным потоком режиме и не мешает самим потокам. И еще учти то, что ни в коем случае не используй асинхронный режим работы (точка onExec) для вывода результата на визуальные элементы. Леонид писал(а): проходя мимо задержитесь здесьЯ постоянно читаю форум, но не пишу на нем, по вполне понятным причинам. Тч, я никуда пока не уходил полностью. Редактировалось 4 раз(а), последний 2023-05-19 14:51:19 |
|||
карма: 22 |
| ||
Голосовали: | ric |
Ответов: 1291
Рейтинг: 47
|
|||
nesco, спасибо! Целая наука.. Буду вникать. И схема очень полезная в айти работе, я часто настраиваю камеры всякие.
Еще вопрос - а имеет ли смысл делить задачу на количество логических процессоров или это тоже потоки и не имеет смысла? Или это т.н. " гиперпоточность", которая реализована на более низком уровне и потому будет прирост производительности - параллелизма? Редактировалось 2 раз(а), последний 2023-05-20 11:47:13 |
|||
карма: 3 |
|
Ответов: 871
Рейтинг: 322
|
|||
nesco, Целиком присоединяюсь к Леониду.
|
|||
карма: 1 |
|
Ответов: 1291
Рейтинг: 47
|
|||
Схема nesco достойна включения в примеры работы с потоками - очень многому можно научиться.. Жаль, мои способности ставить лайк кончились, они по какому принципу работают - кто сколько тебя лайкнул - столько и ты можешь?)
|
|||
карма: 3 |
|
Разработчик
Ответов: 26112
Рейтинг: 2124
|
|||
Aziz писал(а): Или это т.н. " гиперпоточность", которая реализована на более низком уровне и потому будет прирост производительности - параллелизма?Именно так. Гиперпотоки, находящиеся внутри каждого ядра, для системы являются логическими процессорами. Это все реализованно на низком уровне, тк HT используют время простоя главного потока ядра и находятся на том же ядре, используют общий стек и общий конвеер. Прирост производительности будет по-любому и тем больше, чем меньше загружен основной поток ядра. Процессор с 4С+4HT приблизительно по производительности мультипоточности соответствует процессору 5С, те HT соответствует в среднем 25% производительности основного потока. Но это при больших нагрузках на основной поток, при маленьких нагрузках HT могут работать приблизительно одинаково с основным потоком. Редактировалось 3 раз(а), последний 2023-05-20 16:37:52 |
|||
карма: 22 |
|
Ответов: 1291
Рейтинг: 47
|
|||
nesco, благодарю! Это здорово.
|
|||
карма: 3 |
|
13