Главная /
Параллельное программирование с OpenMP /
Найдите ошибку в следующем фрагменте программы: #define N 10 int i; #pragma omp parallel { #pragma omp for firstprivate(i) lastprivate(i) for (i=0; i<N; i++) { … } #pragma omp single printf ('Number of iteration=%d\n', i); }
Найдите ошибку в следующем фрагменте программы:
#define N 10
int i;
#pragma omp parallel
{
#pragma omp for firstprivate(i) lastprivate(i)
for (i=0; i<N; i++) {
…
}
#pragma omp single
printf (“Number of iteration=%d\n”, i);
}
вопрос
Правильный ответ:
одна и та же переменная не может быть указана в клаузах
firstprivate
и lastprivate
одновременно
индексная переменная цикла, витки которого распределяются между нитями при помощи директивы
for
, не может быть указана в клаузе firstprivate
индексная переменная цикла, витки которого распределяются между нитями при помощи директивы
for
, не может быть указана в клаузе lastprivate
Сложность вопроса
69
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Если бы не данные подсказки - я бы сломался c этими тестами интуит.
25 сен 2018
Аноним
Зачёт всё. Мчусь выпивать отмечать сессию интуит
17 окт 2016
Другие ответы на вопросы из темы программирование интуит.
- # Пусть W(x)a – операция записи в переменную x значения a. Пусть R(x)a – операция чтения переменной x, где a – прочитанное значение переменной x. Пусть S - операция синхронизации. Следующая последовательность событий: P1: W(x)aW(x)bSP2:SR(x)a
- # Найдите ошибку в следующем фрагменте программы: int i=0; int numt = omp_get_max_threads(); #pragma omp parallel default (none) private (i) { #pragma omp for for(i=0; i< numt; i++) Work(i); }
- # Найдите ошибку в следующем фрагменте программы: #pragma omp parallel default(shared) { int i, j; #pragma omp for for (i=0; i<n; i++) { #pragma omp parallel { #pragma omp for shared (i,n) for (j=0; j<n; j++) work(i, j); } } }
- # Найдите ошибку в следующем фрагменте программы: #define N 10 int A[N],B[N], sum; #pragma omp parallel default(shared) num_threads(10) { int iam=omp_get_thread_num(); if (iam ==0) { #pragma omp critical (update_a) #pragma omp critical (update_b) sum +=A[iam]; } else { #pragma omp critical (update_b) #pragma omp critical (update_a) sum +=B[iam]; } }
- # Найдите ошибку в следующем фрагменте программы: int main (void){ int a; #pragma omp parallel private(a) { #pragma omp single a = 0; #pragma omp for reduction(+:a) for (int i = 0; i < 10; i++) { a += i; } } }