Разгрузка OpenMP - PullRequest
       67

Разгрузка OpenMP

0 голосов
/ 29 октября 2018

У меня есть массив структуры A, который имеет массивы и переменные типа int. Как я могу сопоставить их с целью

Strcut A{
    int **a;
    int *x;
    int *y;  
    int ny;
    int nx;
}A;
A arrayA = (A*)malloc(sizeof(A)*MaxSize);
for(int i=0; i<MaxSize; i++){
    arrayA[i].a = (int**)(malloc(sizeof(int*)*arrayA[i].nx);
    for(int j=0; j< arrayA[i].nx; j++)
       arrayA[i].a[j] = (int*)(malloc(sizeof(int)*arrayA[i].ny); 
    arrayA[i].x = (int*)(malloc(sizeof(int)*arrayA[i].ny);
    arrayA[i].y = (int*)(malloc(sizeof(int)*arrayA[i].ny);
}
#pragma omp target data map(from:arrayA[i].y) map(to:arrayA[i].x,arrayA[i].a, arrayA[i].ny,arrayA[i].nx)
#pragma omp target teams distribute parallel for
 for(i=0;i<MaxSize; i++){
    methodA(arrayA[i].x,arrayA[i].a, arrayA[i].ny,arrayA[i].nx, arrayA[i].y);
}

Однако это не работает. Каков наилучший способ передать массив A?

Я использую GCC 8,3

1 Ответ

0 голосов
/ 02 ноября 2018

Простое использование

map(tofrom:arrayA)

должно помочь.

Если это не сработает, пожалуйста, сообщите нам об ошибках, которые вы получите.

У вас естьПрограммное обеспечение цели установлено правильно (nvcc - компилятор Nvidia)?Обратитесь к этому вопросу, чтобы убедиться, что он настроен.Если нет, загрузите инструментарий с здесь .

РЕДАКТИРОВАТЬ:

Скомпилированный ниже код:

typedef struct{
    int **a;
    int *x;
    int *y;  
    int ny;
    int nx;
} A;
A *arrayA = (A*)malloc(sizeof(A) * maxSize);
for(int i=0; i<maxSize; i++){
    arrayA[i].a = (int**)(malloc(sizeof(int*)*arrayA[i].nx));
    for(int j=0; j< arrayA[i].nx; j++)
        arrayA[i].a[j] = (int*)(malloc(sizeof(int)*arrayA[i].ny)); 
    arrayA[i].x = (int*)(malloc(sizeof(int)*arrayA[i].ny));
    arrayA[i].y = (int*)(malloc(sizeof(int)*arrayA[i].ny));
}
#pragma omp target data map(tofrom:arrayA)
#pragma omp target teams distribute parallel for
for(int i=0;i<maxSize; i++){
    methodA(arrayA[i].x,arrayA[i].a, arrayA[i].ny,arrayA[i].nx, arrayA[i].y);
}
...