-1

我知道您可以通过将代码放入 RAM 的前 512 个字节之类的东西来对操作系统进行编程,但是如何对 GPU 进行编程呢?在标准 C++ 中可能吗?

我听说过 CUDA,但我想按照标准去。Adobe Photoshop 是否也使用 CUDA?

4

4 回答 4

4

CUDA是一种专有的 Nvidia 语言和软件。它不适用于 AMD 显卡,也不适用于具有集成 GPU 的最新 Intel 或 AMD 处理器。

OpenCL是一种行业标准,可用于 Nvidia 和 AMD 显卡(以及带有集成 GPU 的最新处理器)。

但是,纯标准 C++ 不允许您访问显卡或 GPGPU。您将需要一个操作系统和一些库。

请注意,在 GPU 上运行的小代码(称为内核)不是用完全标准的 C++ 编码的,而是用类似 C 的小方言(也称为 OpenCL)编码的。由于 GPGPU 的怪异性质,存在一些限制(没有递归函数、没有函数指针等)。编程模型不像 C++ 那样通用。

还有OpenACC,一组用于 C++ 编译器的编译指示。

于 2013-08-30T07:06:01.600 回答
4

出于所有意图和目的,如果不使用某些库(无论是 OpenCL、CUDA 还是其他库),就无法对 GPU 进行编程。虽然在技术上直接驱动 GPU 是可行的(鉴于 GPU 驱动程序正在这样做!),但关于 GPU 工作原理的文档非常难以获得,尤其是关于计算所需的高级功能,而且几乎可以肯定不是你想参与的事情。

于 2013-08-30T07:07:12.640 回答
2

CUDA 是 NVidia 卡的标准。或者,OpenCL 也是更多跨平台的选项。 http://en.wikipedia.org/wiki/OpenCL

对 GPU 进行编码与对 CPU 进行编码有着根本的不同,因为在数千个并发线程中有数百个甚至很多,因此在 GPU 上调用函数/内核的方式也不同。

注意:如果不为 GPU 编译,就无法在 GPU 上运行自己的代码,因此标准 C++ 编译器只能调用库中的函数。

于 2013-08-30T07:04:58.280 回答
1

用 C++ 做所有事情肯定是可能的,但是你需要使用一些外部库。

您可能需要考虑 OpenCL 而不是 CUDA。CUDA 是专有的 NVidia 技术,而 OpenCL 可以在更多的硬件和平台上运行。

于 2013-08-30T07:07:32.770 回答