如何编写可在任何 GPU 上运行的 GPU 并行化程序? [关闭]

Posted

技术标签:

【中文标题】如何编写可在任何 GPU 上运行的 GPU 并行化程序? [关闭]【英文标题】:How to write a GPU parallelization program that will run on any GPU? [closed] 【发布时间】:2020-04-02 23:28:30 【问题描述】:

我曾与 Halide 和 Cuda 合作过。但是,像 CUDA 这样的技术只能在 NVIDIA GPU 上运行。 OpenCL 也可以在 AMD 卡上运行,但据我所知还没有真正的一体化解决方案。

但是像 Matlab 这样的软件可以在任何操作系统上运行,而与其中的 GPU 无关。我相信 Matlab 使用并行化技术来加速矩阵计算(或者至少我希望如此)。

那么,如何编写一款可以使用 GPU 进行并行计算的软件,而无需为每种可能的 GPU 类型编写单独的软件呢?或者这实际上是唯一的出路?

我近期不打算编写这样的应用程序,只是在参加了有关该主题的课程后变得好奇。

【问题讨论】:

khronos.org/conformance/adopters/conformant-products/opencl OpenCL 似乎是您想要的。 写在SYCL 并等待几年。或者在HIP 试试运气,三分之二。 @FelipeGutierrez 我不这么认为。这就是我在帖子中所说的,它只对 NVIDIA 和 AMD 有真正的支持。 @tera 但它还能在你认为的任何 GPU 上运行吗? 为什么我的投票失败了?这是一个很好的问题。如果还没有涵盖所有 GPU 的解决方案,这不会使它成为一个无用的问题。 【参考方案1】:

你似乎错了 matlab 支持任何 gpu 它使用 cuda 为 nividea gpus 见:https://www.mathworks.com/solutions/gpu-computing.html 和:https://www.mathworks.com/matlabcentral/answers/336084-will-matlab-support-amd-gpu-in-future

回答你的问题

这两个选项似乎是:

OpenCL : https://www.khronos.org/opencl/

DirectCompute/计算着色器:https://docs.microsoft.com/en-us/windows/win32/direct3d11/direct3d-11-advanced-stages-compute-shader

OpenCL 是跨平台的,而 DirectCompute 只是 windows 并且基于 DirectX 构建

【讨论】:

但这适用于任何现代(比如 2015+)GPU 吗? 现代 GPU 应该适用于两者。也许对于 directComptute,您不能使用 2015 年以来的卡的最新版本。OpenCL 还支持其他多核设备,例如 CPU、DSP、FPGA。 我应该补充一下,有专门的硬件无法使用,但 Matlab 可能也不支持它们。 OpenGL 也支持计算。 @FelipeGutierrez 是的,但据我所知,DirectCompute 不是跨平台的吗?

以上是关于如何编写可在任何 GPU 上运行的 GPU 并行化程序? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

编写一次并行数组 Haskell 表达式,在 CPU 和 GPU 上运行 repa 并加速

FPGA 的并行度如何?

深度学习TensorFlow如何使用多GPU并行模式?

同时在所有 GPU 内核上为每个 GPU 内核运行一个程序实例

GPU编程简介[关闭]

如果循环中涉及的所有张量都在 GPU 上,我的 for 循环是不是并行运行?