openmp 并行 速度更慢_请教一个openmp并行的问题,为什么linux下并行比串行慢

博主在Visual Studio环境下使用OpenMP进行矩阵乘法并行运算,实现了时间减半的效果。但在Linux环境下,使用`gcc -fopenmp`编译后,发现并行计算速度不增反减,比串行计算更慢。代码中展示了OpenMP并行矩阵乘法和串行矩阵乘法的实现,并输出了两种方式的运行时间。问题可能涉及Linux系统下的线程调度和资源分配。
摘要由CSDN通过智能技术生成

该楼层疑似违规已被系统折叠 隐藏此楼查看此楼

vs下编译并行是串行时间一半,但linux下就不行,gcc -fopenmp 编译的

#include

#include

#include

#define N 4000

#define num_thread 4

int A[N][N], B[N][N];

long long C[N][N];

void arr(int n)

{

int i, j, k, t;

double paralleltime, serialtime;

clock_t startTime, endTime;

for (i = 0; i

{

t = i + 1;

for (j = 0; j

{

A[i][j] = t++;

B[i][j] = 1;

}

}

omp_set_num_threads(num_thread);

//----------------矩阵乘法并行算法------------------

startTime = clock();

#pragma omp parallel shared(A,B,C) private(i,j,k)

{

#pragma omp for schedule(dynamic)

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];

}

}

}

}

//for (i = 0; i < 200; i++)

//{

// if (i % 199 == 0)

// printf("\n");

// for (j = 0; j < 200; j++)

// {

// printf("%lld \t", C[i][j]);

// }

// printf("\n");

//}

endTime = clock();

paralleltime =(endTime - startTime) / CLOCKS_PER_SEC;

//----------------矩阵乘法串行算法------------------

startTime = clock();

for (i = 0; i

{

for (j = 0; j

{

C[i][j] = 0;

for (k = 0; k

{

C[i][j] += A[i][k] * B[k][j];

}

}

}

endTime = clock();

serialtime = (endTime - startTime) / CLOCKS_PER_SEC;

printf("paralleltime=%f s\n", paralleltime);

printf("serialtime=%f s\n", serialtime);

}

int main()

{

int n=4000;

arr(n);

system("pause");

return 0;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值