我有一个应用程序,涉及大量使用特征编写的矩阵乘法。我想为它制作一个GPU计算后端,同时保持只在CPU上运行和在可用时由MKL加速的能力。
问题:以尽可能多的代码共享CPU后端的方式添加了GPU计算后端。
实现GPU加速的最简单的方法是使用本征岩浆,但是这是相当有限的,因为在每次操作中都有从主存到GPU内存的不必要的副本,这限制了从GPU获得的性能增益。
知道我将不得不完全抛弃本征并重写应用程序,但是如果没有CPU和GPU计算后端的完全独立的代码路径,那么最好的方法是什么呢?
发布于 2014-09-23 13:58:44
使用CUDA6和自动托管内存特性,您可以通过让驱动程序执行这些额外的副本来轻松地避免这些额外的副本。应该很容易使本征岩浆利用这一特征。这就是我们计划在本地区支持CUDA的方式。
发布于 2014-09-23 16:01:14
对于更一般的情况,您可以采取以下几种方法:
__host__ __device__ )。运行时开关可以更改生成的代码是否有一个for循环,循环遍历调用__host__ __device__函数的元素还是调用它的__global__函数。在不同架构之间共享代码不可避免的问题是性能。您不能期望代码在X86/NVIDIA/AMD/Xeon之间既快速又可移植。对于打算在多个体系结构上运行的单个代码,我认为OpenACC可能是最好的方法,但相对于使用特定体系结构编写的代码,您仍然会在表中留下很多性能。
https://stackoverflow.com/questions/25993967
复制相似问题