- 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/
我想为我的应用程序设计背景图像。图像应填满 iPhone 屏幕。什么图像尺寸适用于 3G 和 4G? A) 320 x 480。B) 640 x 960。 我更喜欢使用 B,因为它的质量更高,3G 会
我需要为我的类(class)作业编写一些关于低级视频卡控制的应用程序。例如 - 温度、工作 SM、管理对它们的访问等。操作系统 linux、tesla c1060。 你能给我一些建议在哪里搜索这类信息
我目前在安装带有 gpu 支持的 tensorflow 时遇到一些问题。 这是我遵循的指南。 安装 NVIDIA CUDA(预装) 安装 NVIDIA cuDNN(预装) 安装 bazel wget
我对如何使用一些视频卡驱动程序 API 读取 GPU 温度(图形处理单元,显卡主芯片)的方法感兴趣? 每个人都知道有两个不同的芯片制造商(至少是流行的)- ATI 和 nVIDIA - 因此有两种不同
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 7年前关闭。 Improve thi
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许在 Stack Overflow 上提出有关通用计算硬件和软件的问题。您可以编辑问题,使其成为
我的笔记本电脑有两个显卡,一个是高性能 NVIDIA 显卡,另一个是板载 Intel 显卡。然而,当我调用 IDirect3D9::GetAdapterCount 时,它只找到板载 Intel 适配器
关闭。这个问题不符合Stack Overflow guidelines .它目前不接受答案。 我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。 关闭 5 年前。
我想使用两个 xserver,每个都在一个单独的显卡上运行,实际上我正在使用两个显示器,我的计算机上安装了两个不同的显卡,如下所示: root@ziomario-Z87-HD3:/home/zioma
当我在我的容器中时,我运行 lspci | grep -i nvidia 并没有显示。 当我从 NVIDIA 提供的示例中运行 ./deviceQuery 时,我得到 no CUDA-capabl
我有一台带有 Intel GMA 3150 显卡的 Asus Eee PC,操作系统是 Windows 7 Starter,并且安装了 DirectX 11。 当我运行我的项目时,它使用 XNA 4.
我知道 Quadro 2000 是 CUDA 2.1。我的电脑规范如下: Quadro 2000,配备 16GB RAM。 至强(R) CPU W3520 @2.67GHz 2.66GHz Windo
我需要帮助将 C++ 头文件转换为 Delphi。 下面是原始头文件和我的Delphi翻译。 C++ header : #if _MSC_VER > 1000 #pragma once #endif
我在配备 Radeon Pro 560X 4096 MB 和 Intel UHD Graphics 630 1536 MB 的 MacBook Pro 上用 python 运行一些 Keras/ten
如何在 c sharp 中获取我的显卡的共享系统内存、总可用内存和系统显存? 最佳答案 我会考虑使用 WMI ,特别是 Win32_VideoController目的。 WMI Code Creato
PowerVR SGX 卡中与纹理内存相关的“共享内存”到底是什么。没有与此相关的适当文档。 通常对于 iphone 上的应用程序(假设 3gs/ipad PowerVR SGX 卡),它被限制为使用
以防我购买带有集成英特尔® UHD 显卡 620 的 Thinkpad 并在其下安装 Ubuntu Linux 和 TensorFlow。然后,稍后我添加带有 Nvidia GPU 的 eGPU。我应
我是 TF 新手,想从源代码编译,因为我的桌面没有支持 AVX 指令的 CPU 或 GPU。我的系统有一个 Intel i7 930 处理器(来自 nehalem 家族的 Bloomfield)和一个
因此,在 64 位 Ubuntu 上,我正在使用 LWJGL 进行开发,但是在 Windows(和 Mac,尽管我测试的更少)上运行良好的代码在我的新机器上出现了问题。 基本上,如果我尝试初始化全屏模
我是一名优秀的程序员,十分优秀!