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

php中文网
发布: 2016-06-07 15:21:02
原创
1487人浏览过

这个写了很长时间了,但是一直没有顾上额。把这个版本稍微修改一下,只需要加上一个指令,我们就可以得到不错的效率奥。 看代码吧: // C = alpha*A*B + beta*Cvoid mySgemm(int m, int n, int k, float alpha, float beta,\ float *A, float *B, float *C){

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

看代码吧:

// C = alpha*A*B + beta*C
void 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 independent
	for(j = 0; j < m; j++) 
	{
#pragma acc loop independent
		for(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*C
void 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 independent
	for(j = 0; j < m; j++) 
	{
#pragma acc loop independent
		for(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个元素,第一个是起始位置,第二个量表示数据长度。

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




最佳 Windows 性能的顶级免费优化软件
最佳 Windows 性能的顶级免费优化软件

每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号