Ожидаемое объявление или инструкция OpenMP в конце ввода - PullRequest
0 голосов
/ 05 мая 2020
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <omp.h>
#include <sys/time.h>


#define N 10000

int A[N][N];
int B[N][N];
int C[N][N];

int main(){

    int i,j,k;
    struct timeval tv1, tv2;
    struct timezone tz;
    double elapsed;
    for (i= 0; i< N; i++){
        for (j= 0; j< N; j++)
        {
            A[i][j] = 3;
            B[i][j] = 3;
        }
    }
    gettimeofday(&tv1, &tz);
    omp_set_num_threads(4);
    #pragma omp parallel default (private) shared (A,B,C,N) num_threads(4) 
    #pragma omp parallel for schedule(static)
    for (i = 0; i < N; ++i){
        for (j = 0; j < N; ++j){
            C[i][j]=0;
            for (k = 0; k < N; ++k){
                C[i][j] += A[i][k] * B[k][j];
            }
        }
    }


    gettimeofday(&tv2, &tz);
    elapsed = (double) (tv2.tv_sec-tv1.tv_sec) + (double) (tv2.tv_usec-tv1.tv_usec) * 1.e-6;
    printf("elapsed time = %f seconds.\n", elapsed);

    for (i= 0; i< N; i++){
            for (j= 0; j< N; j++) {
                printf("%d \t",C[i][j]);
            }
            printf("\n");
        }
}

этот код не работает, хотя я удостоверяюсь, что каждый "{" установлен правильно! что не так с этим кодом? Это умножение матриц с использованием библиотеки OpenMp, и я использую eclipse c ++. Есть идеи, что не так с кодом? Я получаю «ожидаемое объявление или оператор в конце ввода}», и он светится под printf («\ n»); Я попытался удалить все, что печатает матрицу, но это не сработало

1 Ответ

0 голосов
/ 05 мая 2020

У меня следующие ошибки на Wandbox :

prog.c: In function 'main':
prog.c:29:35: error: expected 'none' or 'shared' before 'private'
   29 |     #pragma omp parallel default (private) shared (A,B,C,N) num_threads(4)
      |                                   ^~~~~~~
prog.c:29:58: error: expected ')' before numeric constant
   29 |     #pragma omp parallel default (private) shared (A,B,C,N) num_threads(4)
      |                                                   ~      ^
      |                                                          )

Во-первых, OpenMP default предложение не имеет опции private. Вы должны удалить предложение default и пометить внутренние l oop переменные j и k частными через private предложение .

Во-вторых, определяется N как макрос и расширяется до 10000. Это не переменная, и поэтому его нельзя указать в предложении OpenMP, ожидающем переменных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...