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 平台上进行编程的多种方法,而不是推荐一种。这就需要考虑到其他因素,并且超出了本文的范围。
|