用户
 找回密码
 立即注册
发表于 2021-4-16 16:58:11
86010
N Ways SAXPY:演示 GPU 编程选项的广度



早在 2012 年,NVIDIAN Mark Harris 就为 Saxpy 编写了六种方法,演示了如何使用不同的语言和库在 GPU 上以多种方式执行 Saxpy 操作。从那时起,编程范式不断发展,NVIDIA HPC SDK 也随之发展。
在这篇文章中,我演示了使用 NVIDIA GPU 实现简单 SAXPY 计算的五种方法。为什么这很有趣?因为它展示了今天用于 NVIDIA GPU 编程的多种选项。它还涵盖了 GPU 计算的四种主要方法:
◆ GPU-accelerated 库
◆ 编译器指令
◆ 标准语言的并行性
◆ GPU 编程语言

SAXPY 代表单精度 A·X + Y,这是标准基本线性代数子程序 (BLAS) 库中的一个函数。

SAXPY 是标量乘法和向量加法的组合,它很简单: 它接受 32 位浮点 X 和 Y 的两个向量,每个向量有 N 个元素,以及一个标量值 A 作为输入。它将每个元素 X 乘以 A,并将结果与 Y  相加。一个简单的 C 实现如下所示:
void saxpy_cpu(int n, float a, float *x, float *y)
{
for (int i = 0; i < n; ++i)
y = a * x + y;
}
...
// Perform SAXPY on ~33M elements
saxpy_cpu(n, 2.0, x, y);

有了这个基本的示例代码,我现在可以向您展示在 GPU 上进行 SAXPY 的五种方法。我之所以选择 SAXPY,是因为它是一段简短的代码,但是它显示了每种编程方法的足够多的语法来进行比较。因为它所做的计算相对较少,所以对于演示不同编程模型之间的性能差异,SAXPY 不是很有用,但这不是我在这里的目的。我的目标是演示目前在  NVIDIA 平台上进行编程的多种方法,而不是推荐一种。这就需要考虑到其他因素,并且超出了本文的范围。



使用道具 举报 回复
发新帖
您需要登录后才可以回帖 登录 | 立即注册