У меня есть код, написанный на C, и мне нужно преобразовать его в openMP, используя задачи и зависимости.
Ниже мой код:
#include <omp.h>
#include <stdio.h>
#include <math.h>
int main(int argc, char *argv[])
{
//declare two dimensional array A and define its values
int arrA[3][3] = { { 1, 1,0 }, { 1, 1,0 },{ 1, 1,0 } };
//declare two dimensional array B and give properties of its dimensions
int arrB[3][3];
//declare variables to be used
int diag, i, j,top,left;
printf("Array A:\n");
//use for loop to make two dimensional array
for ( i = 0; i < 3; i++) {
for ( j = 0; j < 3; j++) {
//display values in two dimensional array A
printf("%d\t",arrA[i][j]);
}
printf("\n");
}
printf("Array B:\n");
for( i=0;i<3;i++){
for( j=0;j<3;j++) {
diag = 0; top=0; left=0;
if(i-1>=0 && j-1>=0) {
diag = arrB[i-1][j-1];
}
if(i-1>=0) {
top = arrB[i-1][j];
}
if(j-1>=0) {
left = arrB[i][j-1];
}
#pragma omp task private(i, j, top,left) shared(arrA,arrB)\
depend ( inout: arrA[i][j], arrA[top][left] ) \
depend ( inout: arrB[i][j] )
arrB[i][j] = diag + arrA[i][j] + (top-diag) + (left-diag);
}
}
//use for loop to make two dimensional array
for(i=0;i<3;i++) {
for(j=0;j<3;j++) {
//display values in two dimensional array A
printf("%d\t",arrB[i][j]);
}
printf("\n");
}
}
Я новичок в параллельном программировании и C язык, поэтому я не уверен, как это сделать. Проблема, которую я имею, состоит в том, чтобы закодировать это, имея одну задачу для вычисления каждой записи массива B с соответствующими зависимостями, чтобы гарантировать, что они выполняются в правильном порядке.
То, что я пытаюсь выполнить sh, имеет два размерный массив (массив A) со следующими значениями:
1 1 0
1 1 0
1 1 0
Создайте еще один двумерный массив B, чтобы он выглядел следующим образом:
1 2 2
2 4 4
3 6 6
с задачами и зависимостями openMP.