Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 你应该使用GPU吗?_C_Cuda - Fatal编程技术网

C 你应该使用GPU吗?

C 你应该使用GPU吗?,c,cuda,C,Cuda,如果我使用GPU,我如何知道我的串行代码是否会运行得更快?我知道这取决于很多事情。。。也就是说,如果代码可以在SMID fation和所有这些东西中进行视差化。。。但是,我应该考虑哪些因素来“确定”我将获得速度?该算法应该是令人尴尬的并行算法吗?因此,如果部分算法无法并行化,我就不会费心尝试GPU了?我是否应该考虑一个样本输入需要多少内存 什么是串行代码的“规格”可以使它在GPU上运行得更快?一个复杂的算法能在GPU上获得速度吗? 我不想浪费时间,试图在GPU上编写我的算法,我100%确信速度会

如果我使用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执行

在寻找并行解决方案时,您通常应该问自己以下问题

  • 您拥有的数据量
  • 您拥有的浮点计算量
  • 您的算法有多复杂,即算法中的条件和分支。是否有数据本地化
  • 需要什么样的加速
  • 是不是实时计算
  • 是否存在替代算法(但可能它们不是最有效的串行算法)
  • 您可以访问哪种软件/硬件
  • 根据您寻找的答案,您可能希望使用GPGPU、群集计算或分布式计算,或者GPU和群集/分布式计算机的组合


    如果你能分享关于你的算法和数据大小的任何信息,那么评论就更容易了

    “非常容易”我强烈反对你。这对于非常罕见和明显的情况是正确的。紧密耦合的数据依赖性会使代码无法转换到CUDA。您可以先告诉我们它是什么类型的代码/算法,以及大部分时间花在哪里(评测)。您可能还希望每隔一段时间接受一个答案。;)