Http://bbs
gpuworld
cn[NVIDIA编程教程]用 OpenACC 指令将程序速度提升 2 倍在这个帖子里,我将继续我前面的话题[编程教程]OpenACC:DirectivesforGPUs, 我将提供一个更为实在的例子
这个简单的 C/Fortran 代码例子实现了 2 倍的速度提升,而仅仅填加了几行 OpenACC 指令
在下一个帖子里,我将增加多一些指令,让速度提升到 4 倍
关于代码您可以在这里浏览和下载所有例子中的代码 ParallelForall GitHub repository
里面的目录里已经对每个 Step 都有个子目录,有这个步骤的原始代码和 Makefiles,这样你可以看并且尝试每一个步骤 (step1,step2)
这个例子是使用 OpenACC1
0syntax ,因 此 你 需 要 安 装 编 译 器 , 我 使 用 的 是 PGIcompiler version 12
2 (sisiy:目前已经升级到 12
3,可以在本论坛里下载)Jacobi 迭代让我们来看看一个较为有趣的例子
这仍然是一个简单的程序,但它给我们多一点空间探索各种 OpenACC 指令和选项
Jacobi 迭代法是标准的找到解决线性方程组的迭代法
在这个帖子里,我将利用现有的,简单的两维 Jacobi 迭代 CPU 串行程序,,使用 OpenMP 和 OpenACC优化
这个例子的计算内核如下所示
外层 while 通过比较计算误差与指定的误差 tol 范围遍历循环,直到得到一个收敛的解决
由于基准的目的,我们已经设置了足够低的 tol,来确保外层循环的最大迭代次数 iter_max(1000),第一层嵌套循环,在第 5 行到 11 行对二维网格内的没个元素应用二维 Laplace 算子,从 14 到 18 行将返回值 copy 给下一次迭代输入,