OpenMP를 사용하여 4 개의 스레드간에 작업을 배포하려고합니다. 나는 20x20 매트릭스와 작업이 4 개의 스레드 사이에 똑같이 분산되어야하며, 잘못된 결과를주는 프로그램을 따라야한다. for 루프에서 매개 변수를 변경해야한다고 생각합니다. 어느 누구도 나를 도와 줄 수 없습니다.openmp에서 여러 스레드간에 작업을 배포하는 방법은 무엇입니까?
#include<stdio.h>
#include<omp.h>
#include "head.h"
//int sum=0;
int c[20][20];
//#include<conio.h>
int main(void) {
int A[20][20],B[20][20],C[20][20];
int i;
static int j,e;
static sum=0;
FILE *fp;
unsigned long long a,b,c,d;
int threadno;
fp=fopen("m2.txt","w");
// printf("\n%d \n",h[20][20]);
#pragma omp parallel shared(a,b,c,d)
{
threadno=omp_get_thread_num();
if(threadno==0)
{
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
A[i][j]=i*j;
B[i][j]=i*j;
}
}
for (i=0;i<5;i++)
{
for (j=0;j<5;j++)
{
for (e=0;e<5;e++)
{
sum+=A[i][e]*B[e][j];
C[i][j]=sum;
}
}
}
}
else if(threadno==1)
{
for (i=5;i<10;i++)
{
for (j=5;j<10;j++)
{
A[i][j]=i*j;
B[i][j]=i*j;
}
}
for (i=5;i<10;i++)
{
for (j=5;j<10;j++)
{
for (e=5;e<10;e++)
{
sum+=A[i][e]*B[e][j];
C[i][j]=sum;
}
}
}
}
else if(threadno==2)
{
for (i=10;i<15;i++)
{
for (j=10;j<15;j++)
{
A[i][j]=i*j;
B[i][j]=i*j;
}
}
for (i=10;i<15;i++)
{
for (j=10;j<15;j++)
{
for (e=10;e<15;e++)
{
sum+=A[i][e]*B[e][j];
C[i][j]=sum;
}
}
}
}
else if(threadno==3)
{
for (i=15;i<20;i++)
{
for (j=15;j<20;j++)
{
A[i][j]=i*j;
B[i][j]=i*j;
}
}
for (i=15;i<20;i++)
{
for (j=15;j<20;j++)
{
for (e=15;e<20;e++)
{
sum+=A[i][e]*B[e][j];
C[i][j]=sum;
}
}
}
}
for (i=0;i<20;i++){
for (j=0;j<20;j++) {
fprintf(fp,"%d \t",C[i][j]);
}
}
}
fclose(fp);
}