Главная /
Параллельное программирование с OpenMP /
Найдите ошибку в следующем фрагменте программы: #define N 1000 int main (void){ float a[N]; #pragma omp parallel { #pragma omp for for(int i=0; i<N;i++) { float tmp; tmp= a[i]*a[i]; a[i]=1-tmp; } } }
Найдите ошибку в следующем фрагменте программы:
#define N 1000
int main (void){
float a[N];
#pragma omp parallel
{
#pragma omp for
for(int i=0; i<N;i++) {
float tmp;
tmp= a[i]*a[i];
a[i]=1-tmp;
}
}
}
вопрос
Правильный ответ:
в директиве
for
отсутствует клауза private(i)
в директиве
for
отсутствует клауза private(tmp)
в данном фрагменте программы ошибки нет
Сложность вопроса
60
Сложность курса: Параллельное программирование с OpenMP
28
Оценить вопрос
Комментарии:
Аноним
Зачёт сдан. Мчусь кутить отмечать сессию интуит
13 фев 2017
Аноним
Если бы не опубликованные решения - я бы не решил c этими тестами intuit.
03 ноя 2016
Другие ответы на вопросы из темы программирование интуит.
- # Найдите ошибку в следующем фрагменте программы: int numt=0; #pragma omp parallel { #pragma omp master { #pragma omp critical { numt=omp_get_num_threads(); } #pragma omp barrier } }
- # Найдите ошибку в следующем фрагменте программы: int numt=0; #pragma omp parallel { #pragma omp critical { numt=omp_get_num_threads(); #pragma omp barrier #pragma omp flush (numt) } }
- # Определите количество нитей, между которыми будет распределена работа в параллельной области: #include "omp.h" void work(int i); int main () { int n; n=10; omp_set_num_threads(2); #pragma omp parallel num_threads(4) if (n>20) { #pragma omp for for (int i=0;i<n;i++) work (i); } }
- # Найдите ошибку в следующем фрагменте MPI/OpenMP-программы, вычисляющей число Пи: #include <mpi.h> #include <omp.h> #define num_steps 100000 void main (int argc, char *argv[]) { double pi, step, sum = 0.0 ; step = 1.0/(double) num_steps ; #pragma omp parallel { int numprocs, myid, mysteps; MPI_Init(&argc, &argv) ; MPI_Comm_Rank(MPI_COMM_WORLD, &myid) ; MPI_Comm_Size(MPI_COMM_WORLD, &numprocs) ; mysteps = num_steps/numprocs ; #pragma omp for reduction(+:sum) for (int i=myid*mysteps; i<(myid+1)*mysteps ; i++){ double x = (i+0.5)*step; sum += 4.0*step/(1.0+x*x); } MPI_Reduce(&sum, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); } MPI_Finalize(); }
- # Найдите ошибку в следующем фрагменте MPI/OpenMP-программы, вычисляющей число Пи: #include <mpi.h> #include <omp.h> #define num_steps 100000 void main (int argc, char *argv[]) { int numprocs, myid, mysteps; double pi, step, sum = 0.0 ; MPI_Init(&argc, &argv) ; MPI_Comm_Rank(MPI_COMM_WORLD, &myid) ; MPI_Comm_Size(MPI_COMM_WORLD, &numprocs) ; step = 1.0/(double) num_steps ; mysteps = num_steps/numprocs ; #pragma omp parallel shared(myid, mysteps, step) reduction(+:sum) { #pragma omp for for (int i=myid*mysteps; i<(myid+1)*mysteps ; i++){ double x = (i+0.5)*step; sum += 4.0*step/(1.0+x*x); } MPI_Reduce(&sum, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD); } MPI_Finalize(); }