问题标签 [amd-gpu]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1990 浏览

macos - 在 PlaidML 中使用实验设备支持?

我想使用 PlaidML 在我的 Mac Pro 计算机上加速深度学习训练。安装 PlaidML 后,我运行“plaidml-setup”,并收到以下消息:

为什么说这是“实验设备”?在 Mac Pro 上配置 PlaidML 是否正常?

我应该单击“是”继续设置吗?

编辑:单击“是”后,我看到了另一组选项:

检测到多个设备(您可以通过设置 PLAIDML_DEVICE_IDS 覆盖)。请选择默认设备:

我应该选择哪一个?还是没关系?

0 投票
0 回答
181 浏览

opencl - 在 AMD GPU 上启动内核时查找计算单元 ID

我正在使用 ROCm 软件堆栈在 Polaris20 GCN4th AMD GPU 上编译和运行 OpenCL 程序,并且想知道是否有办法找出当前工作项或波前正在使用 GPU 上的哪个计算单元 (id)?

换句话说,我是否可以将内核中的计算与 GPU 上的特定计算单元或特定硬件相关联,以便在内核运行时跟踪硬件的哪一部分被利用。

谢谢!

0 投票
2 回答
684 浏览

c++ - samplerCube 数组

我在 AMD GPU 上测试程序时遇到了问题。在 Nvidia 和 Intel HD Graphics 上进行测试时,一切正常。在 AMD 上,问题正是在尝试绑定纹理时出现。由于这个问题,着色器没有阴影贴图,只有黑屏可见。id纹理等参数加载成功。以下是代码片段:

C++:

gsl:

在着色器的编译过程中没有错误。据我了解,由于某种原因,纹理不具有约束力。深度图本身绘制正确。

编辑:我访问数组的元素如下:

编辑:samplerCube发现当数组大于绑定纹理时会出现黑屏。例如MAX_LAMPS_COUNT = 2并且count = 1,那么

uniform samplerCube shadowMaps[2];

在这种情况下,将出现黑屏。

但是如果MAX_LAMPS_COUNT = 1( uniform samplerCube shadowMaps[1]) 则出现阴影,但也出现了一个新问题: 不要注意一切都是绿色的,这是由于显卡的颜色校正设置不正确造成的。

有任何想法吗?

编辑:这是渲染代码的完整问题区域:

renderer.mainPass代码:

编辑:发现确实整个samplerCube数组必须填充一些东西,否则会出现黑屏。因此,为了避免黑屏,所有未使用的插槽都必须填充 id 为 0 的纹理(这是因为使用了开源驱动程序吗?)。但随后出现了另一个问题 - 奇怪的亮点。确定它们与包含的 PCF(软阴影)一起出现。这是着色器代码的问题区域:

有任何想法吗?注意:在 Intel HD Graphics 和 Nvidia 上一切正常

0 投票
1 回答
408 浏览

macos - 如何使用 OSX 在 AMD GPU 上获取 OpenCL 内核的汇编代码

我正在尝试查看在我的 Mac 的 AMD GPU 上运行的 OpenCL 内核的汇编代码。

基于这个 SO 问题,OpenCL 在线编译:从 cl::program 或 cl::kernel 获取程序集,我在 clBuildProgram 调用中使用了 --save-temps,如下所示。

err = clBuildProgram(程序,num_devices,deviceList,“-save-temps”,NULL,NULL);

但是,这会失败并显示错误代码 -43,它转换为 CL_INVALID_BUILD_OPTIONS。基于https://www.khronos.org/registry/OpenCL/sdk/1.0/docs/man/xhtml/clBuildProgram.html,规范似乎不支持此选项。

CodeXL 着色器/内核分析器等工具没有适用于 Mac 的安装选项。

有没有其他方法可以在 OSX 上查看 AMD GPU 的 OpenCL 内核的汇编代码?

0 投票
1 回答
99 浏览

opencl - 如何将 cl2.hpp 与 AMD GPU 和 rocm 一起使用

一段时间以来,我一直在笔记本电脑上使用 OpenCL 进行开发,但想转移到配备 AMD GPU 的更强大的台式电脑上。我通过 APP SDK(显然已经消失)通过 amdgpu-pro 驱动程序(完全使我的系统崩溃)跟踪面包屑并登陆 rocm。我无法在我的内核上安装驱动程序,但 rocm-dev 似乎工作正常。不幸的是,我似乎无法再使用 Khronos 的 cl2.hpp,因为它似乎没有 tk 链接到任何 cl 调用。我希望仍然能够在我的笔记本电脑上使用英特尔 CPU,而无需完全重写我的代码。是否可以轻松地将 cl2.hpp 集成到我的 rocm 安装中?

0 投票
1 回答
222 浏览

c++11 - OpenCL2.0 运行时编译器不支持 c++11

我正在尝试使用 OpenCL2.0 构建 OpenCL 内核。我正在调用 cl::Program 构建函数并传递标志 -cl-std=CL2.0。g++ 编译器完成并链接没有错误。但是,当我运行程序时,构建函数会引发异常(见下文)。想看看是否有人以前见过这个并有解决方案。谢谢你。

我尝试了其他标志,例如 -cl-std=c++11、-cl-std=CL2.2,但这些都不起作用。

0 投票
1 回答
86 浏览

java - 如果安装了 Nvidia 或 AMD GPU 卡,则获取 bool

我需要以某种方式获取已安装并可使用的 GPU 列表,对于检测到的每个 GPU,我需要使用 Java 获取它的品牌名称。

仅在 Windows 上

0 投票
1 回答
1823 浏览

r - 如何在 RStudio / R 中使用我的 AMD GPU 进行处理?

我正在尝试在 R 中运行一个包来为 GPS 位置数据设置动画,但运行代码需要几个小时,而且我需要执行几次。我的笔记本电脑中有一个 AMD GPU,但我不知道如何使用它来加快处理时间。

首先,让我说我不是计算机科学家。我在最新版本的 RStudio 和 R (3.6.0) 上运行 RStudio 中的脚本。我研究过 TensorFlow,虽然这似乎只适用于 Nvidia GPU。gpuR 包声称是为与 AMD GPU 一起工作而编写的,但我不确定如何让它与另一个包一起工作。我觉得必须有一种简单的方法来告诉我的 PC 只使用 GPU 来进行计算!如果有人能够做到这一点,我会很乐意提供帮助。

0 投票
0 回答
294 浏览

assembly - 如何在 AMD GCN 中读取和写入 Global Data Share?

我正在尝试在 AMD GPU 中使用 GDS,但我无法使其工作。我的 GPU 是 AMD RX580。

我使用了这个 OpenCL 内核:

用(CLRX)构建和拆卸。之后,我在 DS 指令中添加了 gds 标志并修改了 M0 寄存器。

所以我得到了这个 ASM 内核:

我在主机程序中用 0 填充 res 。预期的结果是res[0] == 64。带有 LDS 的 OpenCL 内核就是这样工作的。但在 GDS 版本res[0] == 0中。

0 投票
1 回答
379 浏览

performance - 在 AMD 上写入非零 FBO 附件时,OpenGL 会降低性能

我注意到我的 3D 引擎在 AMD 硬件上运行非常缓慢。经过一番调查,慢代码归结为创建带有多个附件的 FBO 并写入任何非零附件。在所有测试中,我将 AMD 性能与相同的 AMD GPU 进行了比较,但写入不受影响GL_COLOR_ATTACHMENT0,以及与我的 AMD 设备的性能差异众所周知的 Nvidia 硬件。

将片段写入非零附件比预期慢 2-3 倍。

此代码等效于我在测试应用程序中创建帧缓冲区和测量性能的方式:

有什么问题吗?

可在此处找到完全可重现的最小测试。我尝试了许多其他书写模式或 OpenGL 状态,并在AMD 社区中描述了其中的一些。

我想问题出在 AMD 的 OpenGL 驱动程序中,但如果不是,或者您遇到了同样的问题并找到了解决方法(供应商扩展?),请分享。

UPD:在此处移动问题详细信息。

我准备了一个最小的测试包,其中应用程序创建了一个带有六个 RGBA UNSIGNED_BYTE 附件的 FBO,并为它呈现每帧 100 个全屏矩形。有四种可执行文件有四种书写模式:

  1. 将着色器输出 0 写入附件 0。只有输出 0 使用 路由到帧缓冲区glDrawBuffers。所有其他输出都设置为GL_NONE

  2. 与 1 相同,但具有输出和附件 1。

  3. 将输出 0 写入附件 0,但所有六个着色器输出分别路由到附件 0..6,并且除 0 之外的所有绘制缓冲区都用glColorMaski.

  4. 与 3 相同,但针对附件 1。

我在两台具有几乎相似 CPU 和以下 GPU 的机器上运行所有测试:

AMD Radeon RX550,驱动版本 19.30.01.16

Nvidia Geforce GTX 650 Ti,比 RX550 低约 2 倍

并得到了这些结果:

预先构建的测试可执行文件附在帖子中,或者可以从Google drive下载。

测试源(带有 MSVS 友好的 cmake 构建系统)可在Github上获得

所有四个程序都显示黑色窗口和带有 FPS 计数器的控制台。

我们看到,当写入非零附件时,AMD 比功能较弱的 nvidia GPU 和它本身慢得多。绘图缓冲区输出的全局屏蔽也会降低一些 fps。

我还尝试使用渲染缓冲区而不是纹理,使用其他图像格式(而测试中的格式是最兼容的格式),渲染到两倍大小的帧缓冲区。结果是一样的。

明确关闭剪刀、模板和深度测试没有帮助。

如果我通过将顶点坐标乘以小于 1 的值来减少附件数量或减少帧缓冲区覆盖率,则测试性能会按比例增加,最终 RX550 的性能优于 GTX 650 Ti。

glClear呼叫也受到影响,并且它们在各种条件下的表现符合上述观察结果。

我的队友使用原生 Linux 并使用 Wine在Radeon HD 3000上启动了测试。两次测试运行都暴露了附件 0 和附件 1 测试之间的巨大差异。我无法确切知道他的驱动程序版本是什么,但它是由 Ubuntu 19.04 repos 提供的。

另一位队友在Radeon RX590上进行了测试,同样得到了 2 倍的差异。

最后,让我在这里复制粘贴两个几乎相同的测试示例。这个工作很快:

这个在 Nvidia 和 Intel GPU 上运行速度相当快,但比在 AMD GPU 上的第一个例子慢 2-3 倍:

这些示例之间的唯一区别是使用的颜色附件。

我故意编写了两个几乎相似的复制粘贴程序,以避免帧缓冲区删除和重新创建可能产生的不良影响。

UPD2:还在我在 Nvidia 和 AMD 上的测试示例中尝试了 OpenGL 4.6 调试上下文。没有性能警告。

UPD3: RX470 结果:

UPD4:我通过 emscripten 为 webgl 构建了attachment0attachment1测试,并在 Radeon RX550 上运行它们。完整源代码在问题的Github repo中,构建命令行是

两个测试程序都发出一个drawcall:glDrawArraysInstanced(GL_TRIANGLES, 0, 6, 1000);

第一个测试:默认配置的 Firefox,即支持 DirectX 的 ANGLE。

第二个测试:禁用 ANGLE ( about:config-> webgl.disable-angle = true) 的 Firefox,使用原生 OpenGL:

我们看到 DirectX 不受该问题的影响,并且 OpenGL 问题在 WebGL 中可以重现。这是意料之中的结果,因为游戏玩家和开发人员只抱怨 OpenGL 性能。

PS可能我的问题是这个问题的根源,这个性能下降了。