Open ReactiveTurtle opened 8 months ago
Часто эти две директивы работают вместе
3.Записать время выполнения вариантов программ и сравнить. Объяснить различия во времени выполнения при использовании различных вариантов (reduction, atomic и т.д. см. в задании).
Время записано в readme каждой программы, самое эффективное с использованием reduction, тк там идёт большое количество частных результатов которые нужно складывать и атомарное складывание медленнее? (немного не уверен, что правильно сделал выводы) Задание 2 Необходимо объяснить разницу между private(x), firstprivate(x) и lastprivate(x) на примере ниже. Писал в readme SecondApp, дублирую здесь:
private(x) - директива, которая создаёт свою локальную переменную х в каждом параллельном регионе. К локальной переменной другие потоки не могут обратиться, как и видеть её изменения. Если переменную не определить, то она останется неопределённой. В приведенном коде будет выводится каждый номер потока и номер операции из цикла, но в конце будет выводится заранее заданное число 44, на которое потоки не будут влиять.
firstprivate(x) - директива, которая создаёт копию оригинального х, но инициализирует её отдельно в каждом потоке. Так же не изменения не отслеживаются, обратиться к копии нельзя. В приведенном коде будет выводится каждый номер потока и номер операции из цикла, но в конце будет выводится заранее заданное число 44, на которое потоки не будут влиять.
lastprivate(x) - директива которая создаёт копию оригинального х. В конце в переменную х сохраняются результаты изменения последнего действия цикла. В приведенном коде выводится каждый номер потока и номер операции из цикла, но в конце будет выводится 10, тк это последняя операция над числом в цикле. код из примера: int main() { int x = 44;
for(int i = 0; i <= 10; i++){
x=i;
printf("Thread number: %d x: %d\n",omp_get_thread_num(),x);
}
printf("x is %d\n", x);
}
Принято
https://github.com/zhelaevdenis/Parallel-Programming/blob/dd332cf8826929668087c119c304ca986f375aae/lw6/ParalelForAtomic/ParalelForAtomic/ParalelForAtomic.cpp#L5 Ответить на вопросы из лабораторной