C 你应该使用GPU吗?
如果我使用GPU,我如何知道我的串行代码是否会运行得更快?我知道这取决于很多事情。。。也就是说,如果代码可以在SMID fation和所有这些东西中进行视差化。。。但是,我应该考虑哪些因素来“确定”我将获得速度?该算法应该是令人尴尬的并行算法吗?因此,如果部分算法无法并行化,我就不会费心尝试GPU了?我是否应该考虑一个样本输入需要多少内存 什么是串行代码的“规格”可以使它在GPU上运行得更快?一个复杂的算法能在GPU上获得速度吗? 我不想浪费时间,试图在GPU上编写我的算法,我100%确信速度会提高。。。。这就是我的问题C 你应该使用GPU吗?,c,cuda,C,Cuda,如果我使用GPU,我如何知道我的串行代码是否会运行得更快?我知道这取决于很多事情。。。也就是说,如果代码可以在SMID fation和所有这些东西中进行视差化。。。但是,我应该考虑哪些因素来“确定”我将获得速度?该算法应该是令人尴尬的并行算法吗?因此,如果部分算法无法并行化,我就不会费心尝试GPU了?我是否应该考虑一个样本输入需要多少内存 什么是串行代码的“规格”可以使它在GPU上运行得更快?一个复杂的算法能在GPU上获得速度吗? 我不想浪费时间,试图在GPU上编写我的算法,我100%确信速度会
我认为我的算法可以在GPU上并行化。。。值得一试吗?常规C代码可以非常容易地转换为CUDA。如果算法配置文件中的重量级人物可以并行化,请尝试一下,看看是否有帮助。这取决于两个因素: 1) 多核执行浮点运算的加速 这取决于您正在执行的操作的固有并行化、GPU上的内核数量以及CPU和GPU之间的时钟速率差异 2) 在主存和GPU内存之间来回传输数据的开销 这主要取决于您的特定GPU的“内存带宽”,并且由于Sandy Bridge体系结构(CPU和GPU位于同一个芯片上)而大大减少。对于较旧的体系结构,一些内部维数较小的操作(如矩阵乘法)没有得到改进。这是因为在系统总线上来回传输内部向量比在CPU上对向量进行点积需要更长的时间
不幸的是,这两个因素很难估计,不尝试就无法“知道”。如果您当前在SIMD操作中使用BLAS,那么在CUBLAS中进行替换相当简单,因为CUBLAS具有相同的API,只是将操作发送到GPU执行 在寻找并行解决方案时,您通常应该问自己以下问题
如果你能分享关于你的算法和数据大小的任何信息,那么评论就更容易了 “非常容易”我强烈反对你。这对于非常罕见和明显的情况是正确的。紧密耦合的数据依赖性会使代码无法转换到CUDA。您可以先告诉我们它是什么类型的代码/算法,以及大部分时间花在哪里(评测)。您可能还希望每隔一段时间接受一个答案。;)