应该使用GPU?

| 如果使用GPU,我怎么知道我的串行代码运行得更快?我知道这取决于很多事情……即,如果代码可以在SMID格式中以及所有这些东西中实现平行化……但是我应该考虑哪些因素来“确定”我将获得速度?该算法应该尴尬地并行吗?因此,如果算法的某些部分无法并行化,我将不会尝试使用GPU?我应该考虑样品输入需要多少存储空间吗? 串行代码的“规格”是什么,可以使其在GPU上更快地运行?复杂的算法可以在GPU上提高速度吗? 我不想浪费时间并尝试在GPU上编码我的算法,我100%肯定会提高速度.....这是我的问题.... 我认为我的算法可以在GPU上并行化...值得尝试吗?     
已邀请:
它取决于两个因素: 1)加快许多内核执行浮点运算的速度 这取决于您正在执行的操作的固有并行化,GPU上的内核数量以及CPU和GPU之间的时钟速率差异。 2)在主内存和GPU内存之间来回传输数据的开销。 这主要取决于特定GPU的“内存带宽”,并且由于CPU和GPU位于同一芯片上的Sandy Bridge架构而大大降低了带宽。对于较旧的体系结构,内部尺寸较小的某些运算(例如矩阵乘法)无法得到改善。这是因为在系统总线上来回传递内部向量比在CPU上对向量进行点积要花费更长的时间。 不幸的是,这两个因素很难估计,如果不尝试就无法“知道”。如果您当前使用BLAS进行SIMD操作,则用具有相同API的CUBLAS替代非常简单,只是它将操作发送到GPU来执行。     
寻找并行解决方案时,您通常应该问自己一些问题 您拥有的数据量。 您拥有的浮点计算量。 您的算法有多复杂,即算法中的条件和分支。有数据本地化吗? 需要什么样的加速? 是实时计算吗? 是否存在替代算法(但可能不是最有效的串行算法)? 您可以访问哪种sw / hw。 根据您要寻找的答案,您可能要使用GPGPU,群集计算或分布式计算,或者将GPU与群集/分布式计算机结合使用。 如果您可以共享有关算法和数据大小的任何信息,则注释起来会更容易。     
常规C代码可以非常轻松地转换为CUDA。如果可以简化算法配置文件中的重击手,请尝试一下并查看是否有帮助。     

要回复问题请先登录注册