- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正计划深入研究 OpenCL,并且一直在阅读(仅是表面知识)OpenCL 可以做什么,但有几个问题。
假设我有一台 AMD Radeon 7750,我有另一台配备 AMD Radeon 5870 的计算机,但我不打算使用带有 Nvidia 显卡的计算机。我听说优化特定设备的代码会带来性能优势。优化到底是什么意思?根据我的阅读和一些猜测,这听起来像是意味着以 GPU 喜欢的方式编写代码(通常不用担心它是 AMD 或 Nvidia 卡)以及匹配的方式显卡处理内存(我猜这是特定于计算设备的?或者这只是品牌特定的?)。
因此,如果我为 Radeon 7750 编写代码并对其进行优化,我是否能够将该代码带到另一台配备 Radeon 5870 的计算机上,并且在不更改代码的任何部分的情况下,仍然保留合理数量的性能优势从优化?如果代码不起作用,更改部分代码会是一个小问题,还是会涉及重写足够多的代码,以至于首先为 Radeon 5870 编写优化代码会更好.
最佳答案
如果没有更多关于您打算编写的算法和应用程序的信息,这个问题有点含糊。但我想我可以为您提供一些高级策略,供您在为这两个不同平台开发代码时牢记。
Radeon 7750 的设计是新的 Graphics Core Next体系结构,而您的 HD5780 基于较旧的 VLIW5 (RV770) Architecture .
为了让您的代码在 HD5780 硬件上运行良好,您必须尽可能多地使用压缩原始数据类型,尤其是 int4
、float4
类型。这是因为 OpenCL 编译器很难自动发现并行性并将数据打包到宽向量中。如果您可以构建您的代码,以便您已经考虑到这一点,那么您将能够填充更多的 VLIW-5 插槽,从而使用更多的流处理器。
GCN 更像是 NVidia 的 Fermi 架构,其中代码到流处理器功能单元(ALU 等)的路径不经过明确调度的 VLIW 指令。因此,可以在运行时自动检测到更多的并行性,让您的功能单元忙于做有用的工作,而您不必费心思考如何实现这一点。
这里有一个过于简化的例子来说明我的观点:
// multiply four factors
// A[0] = B[0] * C[0]
// ...
// A[3] = B[3] * C[3];
float *A, *B, *C;
for (i = 0; i < 4; i ++) {
A[i] = B[i] * C[i];
}
该代码可能会在 GCN 架构上运行正常(除了次优的内存访问性能——一个高级主题)。但在您的 HD5870 上,这将是一场灾难,因为这四次乘法将占用 4 条 VLIW5 指令,而不是 1 条!因此,您可以使用 float4
类型编写上述代码:
float4 A, B, C;
A = B * C;
它会在您的两张卡上运行得非常好。此外,它会在 CPU OpenCL 上下文中发挥作用,并充分利用 MMX/SSE 范围的寄存器,这是一个奖励。它还可以更好地利用内存系统。
简而言之,当您开始同时在这两个系统上部署代码时,我建议您牢记使用打包原语的一件事。
这里还有一个示例,可以更清楚地说明您在 HD5870 上需要注意的事项。假设我们使用单独的工作单元实现了前面的示例:
// multiply four factors
// as separate work units
// A = B * C
float A, B, C;
A = B * C;
我们有四个独立的工作单位,而不是一个。这对 VLIW 设备来说绝对是一场灾难,并且会在 GCN 设备上显示出更好的性能。这也是您在编写代码时要寻找的东西——您能否使用 float4
类型来减少执行相同工作的工作单元的数量?如果是这样,那么您将在两个平台上看到良好的性能。
关于parallel-processing - Radeon 显卡之间 OpenCL 的可移植性和优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12500079/
我在深度测试方面遇到了一个非常奇怪的问题。我在 Windows 上的 OpenGL 3.3 核心配置文件上下文中渲染一个简单的网格,启用深度测试并将 glDepthFunc 设置为 GL_LESS。在
我正计划深入研究 OpenCL,并且一直在阅读(仅是表面知识)OpenCL 可以做什么,但有几个问题。 假设我有一台 AMD Radeon 7750,我有另一台配备 AMD Radeon 5870 的
我正计划深入研究 OpenCL,并且一直在阅读(仅是表面知识)OpenCL 可以做什么,但有几个问题。 假设我有一台 AMD Radeon 7750,我有另一台配备 AMD Radeon 5870 的
当我尝试使用 CopyResource 命令将渲染的纹理复制到背景纹理中供以后使用时,我得到了奇怪的结果。这是什么结果: 我没有收到任何 dx11 警告或错误。这也只会在使用 ATI Radeon 卡
由于 Pytorch 发布了 ROCm 版本,这使我能够使用 nvidias 以外的其他 gpu,我如何在 python 中选择我的 radeon gpu 作为设备?显然,像 device = tor
我最近购买了配备 Radeon 445 GPU 的 2016 年末 MacBook Pro,但现在我遇到了内核功能问题,而这些内核功能在 iOS 和 El Capitan 上都运行良好,配备了 Nvi
Radeon 即将发布带有 DisplayPort 的视频卡。我需要做的不是使用主机内存 (RAM),而是想读取从 Pegasus R6(直接连接 RAID 设备)直接传输到视频卡的数据。也许在主机上
我正在尝试编译 dolphin ,任天堂模拟器。我下载了主干,它编译得很好,但它不会链接。相反,我收到此错误: Linking CXX shared library ../../../Binaries
我想用我的显卡做计算,因为 CPU 等太慢了。我知道使用 NVidia 卡(CUDA 等)是可能的,但我找不到任何关于在我的笔记本电脑中使用 ATI Mobility Radeon HD 5850 显
在我的应用程序中,我显示了所有可用的 OpenCL 设备,以便用户可以选择他想要执行计算的设备。我在笔记本电脑上得到的结果让我感到困惑。 以下是产生这些结果的代码的摘录: //CL_DEVICE_TY
我在一个带有分块系统的 block 世界上工作,我遇到了一个 VBO 的错误。我的立方体世界似乎会生成随机顶点,但仅限于 Radeon HD 6670。我现在想知道这是否是我的代码、LWJGL、Ope
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于 Stack Overflow 来说是偏离主题的,
我想在 MacBook Pro 的 docker 容器内运行支持 GPU 的应用程序 (Gazebo)。 通过我的研究,在我看来,大约一年前,Docker 发布了一个适用于 MacOS 的原生 Doc
我是一名优秀的程序员,十分优秀!