#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), чтобы наилучшим графиком для использования было:
статический
динамический
руководствуясь
Объясните свои ответы.
У меня нет никаких проблем с пониманием расписаний 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) может превзойти расписание (динамическое) для треугольного случая… (Дело в том, что модель производительности, которую использует ваш советник, неточна :-))