Можно ли оптимизировать эту концепцию с помощью OpenMP? - PullRequest
0 голосов
/ 22 ноября 2010

Я бы предпочел не использовать код, так как это общая концепция:

Допустим, у нас есть сценарий функции, которая не является ни слишком большой, ни слишком маленькой, а также сама по себе не может быть легко оптимизирована с помощью OpenMP дляОптимизация -loop.

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

[встроенный сам по себе не кажетсячтобы сделать многое (включено по умолчанию для оптимизированных результатов gcc) и превратить его в макрос, хотя и не в параллель, было бы обязательством быть совместимым.]

Ответы [ 2 ]

2 голосов
/ 22 ноября 2010

OpenMP предназначен для "обеспечения работы параллельно" - в общем. Не только for циклы ... Ну, вам даже не нужно иметь никаких циклов, чтобы эффективно использовать OpenMP и ускорить ваш код.

Единственное, что имеет значение, это: "у меня есть несколько независимых операций, которые выполняются одна за одной и которые могут работать одновременно?" . Если это так, то вы нашли простое место для оптимизации с помощью OpenMP.

0 голосов
/ 22 ноября 2010

Когда вызывается функция, вызывается ли она несколько раз, особенно в цикле?Вопрос немного расплывчатый - может быть, да (он вызывается тысячи раз в каждом из нескольких сотен несвязанных мест -> миллионов) или, возможно, нет (он вызывается один раз в каждом из ста несвязанных мест, и вы попадаете в эти части кодатысячи раз -> миллионы).

В первом случае, тогда да, распараллеливание «карты», то есть независимое применение функции к множеству случаев, очень просто и очень хорошо OpenMP.

Во втором случае, если функция вызывается миллион раз, но каждый раз один раз, тогда нет.Там есть повтор выполнения, но нет выставленного параллелизма ;нет списка задач, которые должны быть выполнены одновременно, и которые могут быть выполнены независимо.Все, что вы можете сделать там, если функция, вероятно, будет вызываться с повторяющимися параметрами, это использовать мемоизацию, которая представляет собой компромисс между временем памяти и вычислений, а не методом распараллеливания.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...