一步步做程序优化【2】OpenACC指令
来源:互联网 发布:es6数组去重的方法 编辑:程序博客网 时间:2024/05/19 14:53
这个写了很长时间了,但是一直没有顾上额。把这个版本稍微修改一下,只需要加上一个指令,我们就可以得到不错的效率奥。
看代码吧:
// 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 copy(A[0:m*n],B[0:m*n],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];}}}
这样,我们只是加入了几个指导语句,剩下的事是编译器帮我们做的奥,你原先的测试程序并不需要任何改变奥。
我之前讲过HMPP编译器的安装和使用,http://blog.csdn.net/bendanban/article/details/7662583大家可以使用HMPP编译器编译这段代码,在Linux下(安装好CUDA,HMPP之后)我们可以使用一下命令编译:
$hmpp --codelet-required gcc your_program.c
执行一下,你会发现速度相当的快了(你要有支持CUDA的显卡才行奥)
大家可以写一个测试程序来调用这个函数,随便你用什么编译器,只要你可以在你的测试程序里找到本文中提供的程序,你完全可以使用高效的函数奥。
为了得到更高的效率,我修改一下这个代码:
// 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个元素,第一个是起始位置,第二个量表示数据长度。
大家把代码拷贝走,去试试吧!!!
- 一步步做程序优化【2】OpenACC指令
- 一步步做程序优化【3】OpenHMPP指令(更加灵活的使用异构计算)
- 一步步做程序优化【1】讲一个用于优化的程序
- OpenACC-profiler-MPI程序
- 教你一步步做restful程序(2)
- 教你一步步做restful程序(1)
- 教你一步步做restful程序(3)
- 教你一步步做 Restful程序(4)
- 教你一步步做 Restful程序(5)
- 教你一步步做restful程序(6)------总结
- OpenACC与CUDA C交互(2)
- OpenACC与CUDA Fortran交互(2)
- cocos2dx 一步步做扫雷
- 一步步优化JVM五:优化延迟或者响应时间(2)
- 一步步优化JVM五:优化延迟或者响应时间(2)
- 一步步优化JVM<五>:优化延迟或者响应时间(2)
- 一步步优化JVM
- 基于指令的移植方式的几个重要概念的理解(OpenHMPP, OpenACC)
- 线程基础
- 利用cookies统计在线访问人数
- 关于 数组排序
- list操作整理
- 在Android里添加自己的log函数
- 一步步做程序优化【2】OpenACC指令
- 怎样在c++调用directx
- 关于input 那些事
- udp
- 计算经经php打包以后的包体的长度
- 浅谈ipad阅读类应用设计
- 【iphone游戏开发】iphone-Cocos2D游戏开发之二:精灵表的详细讲解(一)和Zwoptex工具的使用
- 在接口中不要存在实现代码
- DirectX 3D编程入门教程三 网格及其X文件格式