OpenMP с матрицами и векторами

Как лучше всего использовать OpenMP с матрично-векторным продуктом? Будет ли директива for достаточной (если так, где я должен ее разместить? Я предполагаю, что внешний цикл будет более эффективным), или мне понадобится расписание и т. Д.?

Кроме того, как я мог бы использовать преимущества различных алгоритмов, чтобы наиболее эффективно использовать этот продукт?

Спасибо

1 ответ

Решение

Первый шаг, который вы должны сделать, - это очевидный шаг: оберните внешний цикл в параллель для директивы. Как вы предполагаете. Всегда стоит немного поэкспериментировать, чтобы получить доказательства, подтверждающие ваши (и мои) предположения, но если бы вам было позволено сделать только одно изменение, которое было бы тем, которое нужно было сделать.

Я не знаю много о алгоритмах, не обращающих внимания на кэш, но я понимаю, что они, как правило, работают путем рекурсивного разделения проблемы на подзадачи. Похоже, это не соответствует применению параллели для директив. Я подозреваю, что вы могли бы реализовать такой алгоритм с задачами OpenMP, но я подозреваю, что накладные расходы, связанные с этим, перевесят любые улучшения выполнения любого mv-продукта разумных размеров.

(Если вы продемонстрируете ложность этого аргумента на mv-продуктах размера N I, вы ответите "N - это не разумное измерение". Как и в случае с этими вопросами производительности, доказательства каждый раз превосходят аргументы.)

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

Другие вопросы по тегам