首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

一步步作程序优化【2】OpenACC指令

2012-07-28 
一步步做程序优化【2】OpenACC指令这个写了很长时间了,但是一直没有顾上额。把这个版本稍微修改一下,只需要加

一步步做程序优化【2】OpenACC指令

这个写了很长时间了,但是一直没有顾上额。把这个版本稍微修改一下,只需要加上一个指令,我们就可以得到不错的效率奥。

看代码吧:

// C = alpha*A*B + beta*Cvoid mySgemm(int m, int n, int k, float alpha, float beta,\ float *A,  float *B, float *C){int i, j, l;float ab;#pragma acc kernels copyin(A[0:m*n],B[0:m*n]) copy(C[0:m*n])#pragma acc loop independentfor(j = 0; j < m; j++) {#pragma acc loop independentfor(i = 0 ;i < k ;i++){ab = 0.0f;for(l = 0 ;l < n ;l++){ab += A[j*n+l] * B[l*k+i];}C[j*k+i] = alpha*ab + beta*C[j*k+i];}}}

这样A和B两个矩阵就可只是传输到GPU上,而C传到GPU,计算结束后会倍传回来。

在copy()中,A[0:m*n],表示从第0个元素一共计算m*n个元素,第一个是起始位置,第二个量表示数据长度。

大家把代码拷贝走,去试试吧!!!




热点排行