专栏名称: NVIDIA企业开发者社区
NVIDIA 英伟达开发者社区是NVIDIA GPU开发者交流平台,通过此平台可第一时间获取NVIDIA GPU 开发相关的新产品、新工具、线上/线下活动的资讯。
目录
相关文章推荐
最爱大北京  ·  馄饨中吃出“整只蟑螂”?知名超市被立案调查! ·  23 小时前  
北京吃货小分队  ·  即将开航!亮马河游船早鸟票来了 ·  4 天前  
航空工业  ·  TP500无人机2002架首飞成功 ·  3 天前  
51好读  ›  专栏  ›  NVIDIA企业开发者社区

开发者新闻 | N Ways to SAXPY: 演示 GPU 编程选项的广度

NVIDIA企业开发者社区  · 公众号  ·  · 2021-04-15 10:30

正文

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[i] 乘以 A,并将结果与 Y[i]  相加。一个简单的 C 实现如下所示:

void saxpy_cpu(int n, float a, float *x, float *y)

{

for (int i = 0; i < n; ++i)

y[i] = a * x[i] + y[i];

}

...

// Perform SAXPY on ~33M elements

saxpy_cpu(n, 2.0, x, y);


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






NVIDIA Isaac Sim 的训练缩短了 Sim2Real 差距



对在虚拟环境中设计、测试或训练机器人感兴趣吗?这些都可以在 NVIDIA Omniverse 仿真平台上用 Issac Sim 完成。在虚拟世界中与机器人一起工作的能力是推动机器人革命的关键技术之一。







请到「今天看啥」查看全文