C 如何使用OpenMP将任务分配给单个线程?
我取20的数组。并使用openMP将1/4任务按顺序分配给四个线程中的每一个。然后将整个数组的结果存储到文件中。这里怎么了 在第一个数组中,我将I*j值赋给每个元素,然后进行20x20的矩阵乘法C 如何使用OpenMP将任务分配给单个线程?,c,openmp,C,Openmp,我取20的数组。并使用openMP将1/4任务按顺序分配给四个线程中的每一个。然后将整个数组的结果存储到文件中。这里怎么了 在第一个数组中,我将I*j值赋给每个元素,然后进行20x20的矩阵乘法 #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][2
#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,j,e;
static sum=0;
FILE *fp;
unsigned long long a,b,c,d;
int threadno;
fp=fopen("m2.txt","w");
// clrscr();
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;
//fprintf(fp,"%d \t",C[i][j]);
}
}
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++) {
sum=0;
for (e=5;e<10;e++)
sum+=A[i][e]*B[e][j];
C[i][j]=sum;
//fprintf(fp,"%d \t",C[i][j]);
}
}
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;
//fprintf(fp,"%d \t",C[i][j]);
}
}
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;
//fprintf(fp,"%d \t",C[i][j]);
}
}
for (i=0;i<20;i++){
for (j=0;j<20;j++) {
fprintf(fp,"%d \t",C[i][j]);
}
}
}
fclose(fp);
}
#包括
#包括
#包括“head.h”
整数和=0;
INTC[20][20];
//#包括
内部主(空){
INTA[20][20],B[20][20],C[20][20];;
int i,j,e;
静态和=0;
文件*fp;
无符号长a、b、c、d;
int-threadno;
fp=fopen(“m2.txt”,“w”);
//clrsc();
printf(“\n%d\n”,h[20][20]);
#pragma omp并行共享(a、b、c、d)
{
threadno=omp_get_thread_num();
如果(threadno==0)
{
对于(i=0;i而言,您与大括号不匹配。您在if(threadno==0)
if节之后关闭并行节
此外,您的代码末尾似乎有一个额外的大括号
正如Dave提到的,您的for语句中也缺少几个大括号。这不是问题的原因,但会导致算法无法返回预期结果
在C中
(i=0;i
功能(i);
用于在For循环中执行单个操作
如果希望for循环包含多个操作,请使用大括号
for(i = 0; i < n; i++){
function(i);
function2(i);
function3(i);
}
(i=0;i{
功能(i);
职能2(i);
职能3(i);
}
你的缩进让人困惑,但你确定你拥有你认为拥有的所有缩进吗?试着正确缩进,看看它是否符合你的预期。还有,“这里出了什么问题?”非常模糊。怎么了?怎么了?怎么了?怎么了?怎么了?事实上,仔细看,我肯定你错过了很多大括号。我只是不知道这是你的原始代码还是复制到这里的残余代码。对不起,朋友们,我猜,因为它没有给出错误,所以它是正确的。但错误的结果是mism的原因我想只有一批胸罩。
for(i = 0; i < n; i++){
function(i);
function2(i);
function3(i);
}