首页 热点资讯 义务教育 高等教育 出国留学 考研考公

泰坦的软件支持

发布网友 发布时间:2022-04-25 00:11

我来回答

2个回答

懂视网 时间:2022-05-04 16:49

这个写了很长时间了,但是一直没有顾上额。把这个版本稍微修改一下,只需要加上一个指令,我们就可以得到不错的效率奥。 看代码吧: // 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个元素,第一个是起始位置,第二个量表示数据长度。

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

热心网友 时间:2022-05-04 13:57

参见:NVIDIA CUDA
不同于以往以*处理器作主要数据处理单元或以图形处理器辅助处理数据的超级电脑,泰坦超级电脑以图形处理器为主要的数据处理单元。在初期,不少专案的程序源码一般重新编写或编译以方便泰坦的通用图形处理器运行,而且还要求这些源码能兼容于以*处理器为主的系统,以便专案可以不仅可以由泰坦进行处理,还能供其它仍使用传统*处理器架构的超级电脑运行。Oak Ridge Leadership Computing Facility(OLCF)还成立了Center for Accelerated Application Readiness(加速申请中心,CAAR)来帮助科学研究者们重写或重新编译他们所写的代码以供泰坦运作之,并且在英伟达总部举办开发者研习会,让研究人员和程序员学习并使用泰坦和其它类似的超级电脑的架构、编译器和应用程序。
以使研究者们可以和以前一样,以Fortran、C或C++来编写他们的代码而无须学习新的编程语言,并且编译器可以将这些代码编译为通用图形处理器可以高效运作的程序。
“加速编译器指令”包括OpenACC、PGI Accelerator、CAPS HMPP Workbench;“低级图形处理器编程语言”有NVIDIA C for CUDA、PGI CUDA Fortran、OpenCL。这些工具中有部分甚至允许开发者在不了解关于NVIDIA CUDA的知识的情况下使用。在泰坦上适用的编译器有PGI(Portland Group Compiler Suite,默认使用这个)、GCC、CCE(Cray Compiling Environment)以及英特尔提供的编译器。
即所谓的多核多线程优化,只是更深入、更适合通用图形处理器的架构特性(通用图形处理器拥有比*处理器多得多的线程和更好的运算并发性)。不过这样的程序源码优化也适用于传统以*处理器为基础的机器上,这些机器也可以从中获得性能提升。天体物理学家兼程序员Bronson Messer,表示“一个应用程序要将泰坦的性能发挥至极限,必须寻求方法来使通用图形处理器满负载运作,需要明确的是通用图形处理器尽管处理速度很快,但灵活度显然不如*处理器。”作业管理者也发现,一些计划专案的代码在重写后,在那些不是基于图形处理器的机器上的效率也变得大有提升,“Denovo”专案的程序在基于*处理器的机器上甚至还比原先获得双倍的性能提升表现。
要求调用图形处理器的进行运算作业的代码变更量因不同专案而变。根据负责NRDF专案的梅瑟博士(Dr. Messer)的意见,他们的代码中调用图形处理器的算法源码只占整个代码中很小的百分比,因为这些程序算法的运算都相对简单,但处理进程重复而且具有平行性。NRDF的程序用CUDA Fortran写成,CUDA Fortran是Fortran语言链接CUDA指令扩充库(NVIDIA CUDA库)给予图形处理器使用的Fortran改进版本。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com