我真的不确定这是否是正确的地方。我对不同类型硬件的不同编程模型感兴趣。
它就像这样开始,我正在展示我正在做的一些与NVIDIA CUDA相关的工作。我告诉人们使用GPU作为协处理器的一个主要问题是你必须将数据传输到主机和从主机传输到GPU。然后有几个人开始向我提问有关AMD“APU”的问题,以及图形核心与普通CPU核心处于同一芯片的事实。
我躲过了这些问题,指出英特尔/ AMD CPU + GPU芯片永远不会包含与专用NVIDIA显卡一样多的图形内核。
问题是,我真的不知道AMD APU或Intel Sandy / Ivy Bridge芯片的编程模型是什么。
我的问题是:
答案 0 :(得分:2)
如何编写程序以利用AMD / Intel芯片上的图形核心?
OpenCL,但我认为英特尔没有完成这项工作to use the graphics cores。
这些图形内核是否真的可以直接访问主机内存?
是的,但有一些警告。
基本上你已经改变了妥协的条款。过去,启动成本(将数据复制到图形内存)非常重要,以至于工作项需要足够大,以便在向GPU发送内容时使其值得。这个成本现在降低了(没有副本),但核心的性能更低(更少,并且内存带宽更低)。
这是一个有趣的发展,可能会使GPGPU技术在更多情况下值得,但没有这样的巨大增益。但收益仍然很大。
在SP和DP FLOPS中是否有关于这些芯片性能的信息?
我不喜欢重复营销数字,但AMD A8-3850的标题为480 GFLOPS
来自CUDA,NVIDIA GPU的编程与其他相关芯片之间有什么相似之处?
我没有使用过CUDA,所以其他人可能想回答,但我的理解是CUDA和OpenCL有很多相同的概念(内存模型,内核等),但是CUDA确实带来了一些东西。 OpenCL没有的一方(C ++ - isms)
然后Nvidia和AMD之间存在架构上的差异,主要的一个是Nvidia的核心是缩放器,而AMD是矢量,所以要想在AMD上获得最佳性能,你需要编写矢量代码。
答案 1 :(得分:1)
我只有CUDA的经验,答案是基于那些经验和一些我刚刚快速搜索过的东西(我也想知道一些答案)。
我认为它们的编写方式相同。您可以在其中使用OpenCL,即使硬件实现存在差异,它们也遵循相同的原则。
我不知道AMD和英特尔是怎么回事,但我会说是的。你可以用CUDA做到这一点。使用映射的页面锁定主机内存,您可以直接从内核访问主机上的内存。如果你有一个集成的NVIDIA系统,NVIDIA甚至建议以这种方式使用内存(CUDA C编程指南的第5.3.1节)。
是。对于英特尔,请检查第11页的Intel HD Graphics DirectX Developer's Guide (Sandy Bridge)(英特尔HD3000的最大值为125GFlops)。对于AMD,他们在每张卡的规格页面上加了一些价值,例如AMD Radeon HD6990。你可能会在某个地方找到比较。
正如我所说,我认为编程模型类似,OpenCL也有内核,主机和设备内存以及线程和工作组标识符的概念(仅举几例)。为了最大限度地提高性能,您需要了解有关特定体系结构的信息,但您可以使用类似的方法来处理所有体系。
不知道......
答案 2 :(得分:-1)
我已经使用Bigdata在OpenCL中完成了工作。
如何编写程序以利用AMD / Intel芯片上的图形核心?
OpenCL是一种低级编程模型,适用于异构环境。 它被构建为使用系统中的所有计算资源; CPU,GPU,APU,FPGA等.OpenCL代码程序也称为内核,可在GPU和CPU内核上运行。
虽然英特尔主要以处理器而不是GPU而闻名,但它们现在也提供GPU很长时间了,比如英特尔GMA和后来的英特尔高清显卡。