|
252 / 128 / 54
Регистрация: 04.05.2013
Сообщений: 346
|
||||||
Загрузка ядер при паралельных вычислениях08.10.2014, 01:13. Показов 1568. Ответов 5
Метки нет (Все метки)
Имеем: Phenom II x4 B50
Задача: Параллельно посчитать произведение/сумму матриц/векторов . Алгоритм использован наипростейший - базовый (в некоторых книгах ленточным обзывают). Если в диспетчере для процесса отрубить 1 ядро, то все 3 грузятся без проблем на 100%. Если запустить на всех ядрах, то загрузка начинает плавать на всех ядрах от ~70% до ~90%. Повышение приоритета процесса через диспетчер вносит вообще полный хаос в загрузку ядер. Проблема в том, что при использовании и 3-х и 4-х ядер время вычисления толком не меняется. Как можно решить сию проблему? Кусок кода, касающегося всего воздействия на потоки.
0
|
||||||
| 08.10.2014, 01:13 | |
|
Ответы с готовыми решениями:
5
Загрузка всех ядер ЦПУ Intel Core i5 4690 загрузка 4-х ядер Некорректная загрузка N ядер на 100% (малая производительность) |
|
Ушел с форума
|
|||||||||
| 08.10.2014, 01:22 | |||||||||
|
или еще чего-нибудь. Имея перед глазами код, можно было бы сказать больше. А для того, чтобы сообщить системе, работа какого потока/процесса более важна, а какого менее. Для нагруженных сценариев типа 100% CPU на всех ядрах игры с приоритетами ничего не дадут. Как и игры с affinity mask (привязка потоков/процессов к логическим/физическим CPU/Cores/HT-Threads).
0
|
|||||||||
|
252 / 128 / 54
Регистрация: 04.05.2013
Сообщений: 346
|
||||||
| 08.10.2014, 01:42 [ТС] | ||||||
|
Убежденный,
Поток номер 2 занимается выводом результата. Ожидание других потоков происходит внутри потока 2. Весь код в 1 сообщение не влезает.
0
|
||||||
|
252 / 128 / 54
Регистрация: 04.05.2013
Сообщений: 346
|
||||||
| 08.10.2014, 01:45 [ТС] | ||||||
|
Защита условно общих данных мьютексами - условие курсовой.
В математических функция мьютексов и семафоров нет, так что их не выкладываю. Размер матриц 2000х2000
0
|
||||||
|
Ушел с форума
|
||||||
| 08.10.2014, 01:57 | ||||||
Сообщение было отмечено Barrent как решение
Решение
Что бросается в глаза:
1) Обилие объектов ядра (мьютексы, семафоры) и функций работы с ними. А это очень дорогие ресурсы. Один вызов Wait - это переключение в ядро, затем suspend/resume потока, затем возврат обратно. Тысячи и тысячи тактов. Будет быстрее работать, если просто тупо переписать на критических секциях, спин-локах и других "легковесных" механизмах. 2) "Гранулярность" блокировки ресурса должна быть минимальной. Вот здесь
на время выполнения CalculateA. Чем дольше CalculateA, тем длиннее ожидание других потоков на этом мьютексе. А где же параллельность тогда ? 3) Имена - это полная жесть. При виде "Matrix::CalculateA(serial, P, A, B, C, MOMK[0]);" любого нормального программиста будет бросать в дрожь. Что такое B, например ? А MOMK ? И что именно делает функция со странным названием "CalculateA" ? Имена должны быть осмысленные. Я вот всматривался в этот код минут 10, но так толком не понял, для чего там все эти wait/release/momk и т.п. Хотя может быть, время суток (ночь) сказывается...
0
|
||||||
|
252 / 128 / 54
Регистрация: 04.05.2013
Сообщений: 346
|
|||||||
| 08.10.2014, 10:46 [ТС] | |||||||
|
Задача: A = B + C * (MO * MK)
А, В, С - вектора МО, МК - матрицы Поток 0 - генерация МО и МК, расчеты. Поток 1 - только расчеты Поток 2 - Генерация В, вывод А, расчеты. Поток 3 - генерация С, расчеты. Краткий алгоритм: Ввели данные. Каждый поток освободил свой семафор ввода данных Каждый поток ждет пока введут все данные Сделали себе по копии условно общих данных по защитой мьютексов Каждый поток посчитал свою часть МО*МК Каждый поток освободил свой семафор расчета МО*МК Все потоки подождали полного расчета МОМК Каждый поток посчитал свою часть А Каждый поток освободил свой семафор расчета А Поток 2 подождал пока все посчитают. Поток 2 вывел результат. Добавлено через 1 минуту Убежденный, Пока печатал условие, прошло 5 минут и редатирование поста закрыли. Пока перепечатал - еще время прошло. Сорри ![]() Использование только мьюетксов и семафоров - одно из условий задачи. Добавлено через 10 минут Хотя по сути вектор С остальные потоки скопировали для себя еще до вычисления произведения МОМК, которое идет перед вычислением финального вектора А. Ждать его чисто физически никто не будет. Добавлено через 8 часов 36 минут Нашел ошибку. Была в схожем фрагменте, но уже там другим потокам приходилось ждать вычислений. Вопрос закрыт.
0
|
|||||||
| 08.10.2014, 10:46 | |
|
Помогаю со студенческими работами здесь
6
Ошибка при вычислениях
Некорректные значения при вычислениях
Неверные результаты при вычислениях Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|