是否可以在AMD GPU上运行CUDA?

Lee*_*obs 52 cuda gpu gpgpu amd nvidia

我想将我的技能扩展到GPU计算.我熟悉光线跟踪和实时图形(OpenGL),但下一代图形和高性能计算似乎是在GPU计算或类似的东西.

我目前在家用电脑上使用AMD HD 7870显卡.我可以为此编写CUDA代码吗?(我的直觉不是,但是因为Nvidia发布了编译器二进制文件,我可能错了).

第二个更普遍的问题是,我从哪里开始GPU计算?我确定这是一个经常被问到的问题,但我看到的最好是从08'开始,我认为从那时起该领域发生了很大的变化.

Bar*_*art 40

不,你不能使用CUDA.CUDA仅限于NVIDIA硬件.OpenCL将是最好的选择.

Khronos本身有一份资源清单.一样的StreamComputing.eu网站.对于您的AMD特定资源,您可能需要查看AMD的APP SDK页面.

请注意,目前有几种方法可以将CUDA转换/交叉编译为不同的语言和API.一个这样的例子是HIP.但请注意,这仍然不意味着CUDA在AMD GPU上运行.

  • 查看[OpenCL编程指南](http://www.amazon.co.uk/OpenCL-Programming-OpenGL-Aaftab-Munshi/dp/0321749642).关于OpenCL与CUDA的一个很棒的事情是[更好的工具支持](http://developer.amd.com/tools/hc/CodeXL/pages/default.aspx) (2认同)
  • 虽然以前是不可能的。现在可以在 AMD 硬件上运行 cuda 代码。其概念是将其转换为 HIP 语言。请参阅下面的答案以检查链接。 (2认同)

Hug*_*ins 11

您可以使用Coriander在Mac上运行NVIDIA®CUDA™代码,实际上也可以在OpenCL 1.2 GPU上运行.披露:我是作者.用法示例:

cocl cuda_sample.cu
./cuda_sample
Run Code Online (Sandbox Code Playgroud)

结果: 在此输入图像描述


san*_*age 7

您不能将CUDA用于GPU编程,因为仅NVIDIA设备支持CUDA.如果你想学习GPU计算,我建议你同时启动CUDA和OpenCL.这对你非常有益.谈到CUDA,你可以使用mCUDA.它不需要NVIDIA的GPU ..


Léo*_* 준영 6

我认为AMD FirePro GPU即将推出,请参阅此处的新闻稿,但是开发工具将在2016年第一季度获得支持:

计划于2016年第一季度推出"Boltzmann Initiative"工具的早期访问计划.


小智 5

正如其他人已经指出的,CUDA 只能直接在 NVIDIA GPU 上运行。如前所述,现有的 CUDA 代码可以进行hipify编辑,它本质上运行一个sed脚本,将已知的 CUDA API 调用更改为 HIP API 调用。然后,HIP 代码可以在 NVIDIA(CUDA 后端)或 AMD(ROCm 后端)GPU 上编译和运行。

我想提供的新信息是,如果有人不想要hipify他们现有的 CUDA 代码(即,将所有 CUDA API 调用更改为 HIP API 调用),还有另一个选项可以使用;只需添加(并包含)一个头文件,将 CUDA 调用重新定义为 HIP 调用。例如,简单的向量加法代码可能使用以下头文件:

#include "hip/hip_runtime.h"

#define cudaMalloc hipMalloc
#define cudaMemcpy hipMemcpy
#define cudaMemcpyHostToDevice hipMemcpyHostToDevice
#define cudaMemcpyDeviceToHost hipMemcpyDeviceToHost
#define cudaFree hipFree
Run Code Online (Sandbox Code Playgroud)

...主程序将包含头文件:

#include "/path/to/header/file"

int main(){

    ...

}
Run Code Online (Sandbox Code Playgroud)

当然,编译需要nvcc(照常)在 NVIDIA GPU 和hipccAMD GPU 上使用。

关于从哪里开始 GPU 计算(一般来说),我建议从 CUDA 开始,因为它拥有最多的文档、示例代码和可通过 Google 搜索获得的用户体验。好消息是,一旦您知道如何在 CUDA 中编程,您基本上就已经知道如何在 HIP 中编程了:)