Открытые расписания MP — поиск наилучшего аргумента для цикла

#c #for-loop #openmp #schedule

#c #для цикла #openmp #Расписание

Вопрос:

У меня возникли проблемы с пониманием назначения, которое я выполняю для своего курса параллельных вычислений. Проблема, о которой идет речь, заключается в следующем:

Рассмотрим следующий код:

 for(int i = 0; i < 1024; i  ){
    int arg = ...
    compute(arg);
}
  

Где время выполнения compute() пропорционально значению его аргумента. Мы хотим распараллелить этот цикл, используя OpenMP, с одним из расписаний static , dynamic или guided . Найдите пример выражения для arg (т.Е. завершите строку 2), чтобы наилучшим графиком для использования было:

  1. статический

  2. динамический

  3. руководствуясь

Объясните свои ответы.

У меня нет никаких проблем с пониманием расписаний OpenMP, но у меня возникают проблемы с поиском какой-либо информации, которая может помочь мне решить, какие аргументы использовать и почему.

Учебная программа бесполезна, и мне не повезло с Google.

Я понимаю, если люди «не хотят давать мне домашние задания», но было бы неплохо иметь надежный указатель в правильном направлении. Проще говоря, как я могу оценить, какой аргумент использовать для любого из расписаний?

Комментарии:

1. Итак, предположительно, вы сделали то, что любой из нас уже сделал бы к настоящему времени, вы написали немного кода для экспериментов и потрудились с различными попытками в темноте, собрали некоторые данные и начали делать некоторые выводы? Вычисления — это не спорт для зрителей ….

2. Никто, кроме вас, ничего не упоминал о зрелищном спорте. Если вы не хотите помогать, это нормально, но вы могли бы обойтись без этого обвиняющего тона.

3. Почему в курсе не было предложено также рассмотреть auto? Ограничено ли это OpenMP 2? Из предоставленной информации вы можете сделать вывод, что самая медленная итерация цикла занимает почти в два раза больше времени, чем в среднем, поэтому, возможно, стоит протестировать различные варианты расписания и фрагмента. Необходима дополнительная информация, чтобы угадать, может ли guided быть лучшим, но ответ по-прежнему может зависеть от проблемы и платформы.

4. Задание довольно большое, поэтому возможно, что инструктор выбрал только «наиболее релевантное». И, насколько я знаю, мы используем OpenMP 4 (201307).

Ответ №1:

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

Имейте в виду, что они сказали вам, что время обработки пропорционально значению int аргумента.

Таким образом, для статического планирования arg всегда должно быть одинаковым числом, поэтому время обработки всегда одинаково. Таким образом, что-то вроде arg=10;

Для динамического планирования это будет, когда arg изменяет значение, поэтому что-то вроде arg=rand(); As это приведет к случайному различию времени для каждого вычисления.

Для руководства планированием, используя что-то вроде arg = i / 10; , потому что arg некоторое время будет оставаться статичным при каждом значении, при этом все еще динамически изменяясь по значениям.

Комментарии:

1. И это прекрасный пример того, как я могу иметь что-то прямо перед собой и все еще не видеть этого. Спасибо!

2. Для получения дополнительных оценок вам следует провести сравнительный анализ (или посмотреть стандартные тесты OpenMP, такие как EPCC), чтобы исследовать накладные расходы различных расписаний. В зависимости от степени дисбаланса вы можете обнаружить, что расписание (статическое, 1) может превзойти расписание (динамическое) для треугольного случая… (Дело в том, что модель производительности, которую использует ваш советник, неточна :-))