使用cuda的最佳方式

使用cuda的最佳方式,cuda,Cuda,有几种使用cuda的方法: 自动并行工具,如PGI工作站 包装,如推力(STL样式) NVidia GPUSDK(运行时/驱动程序API) 哪一个更适合于表现、学习曲线或其他因素? 有什么建议吗?对于性能和较小的学习曲线,请使用传统的CUDA SDK CUDA公开了几种类型的内存(全局、共享、纹理),它们对应用程序的性能有着巨大的影响,web上有很多关于它的文章 非常有趣,并提到了关于CUDA的一系列优秀文章。使用传统的CUDA SDK,以获得性能和较小的学习曲线 CUDA公开了几种类型的内存(

有几种使用cuda的方法:

  • 自动并行工具,如PGI工作站
  • 包装,如推力(STL样式)
  • NVidia GPUSDK(运行时/驱动程序API)
  • 哪一个更适合于表现、学习曲线或其他因素?
    有什么建议吗?

    对于性能和较小的学习曲线,请使用传统的CUDA SDK

    CUDA公开了几种类型的内存(全局、共享、纹理),它们对应用程序的性能有着巨大的影响,web上有很多关于它的文章


    非常有趣,并提到了关于CUDA的一系列优秀文章。

    使用传统的CUDA SDK,以获得性能和较小的学习曲线

    CUDA公开了几种类型的内存(全局、共享、纹理),它们对应用程序的性能有着巨大的影响,web上有很多关于它的文章


    非常有趣,并提到了关于CUDA的一系列文章。

    < P>我相信英伟达GPU SDK是最好的,有几个警告。例如,尽量避免使用cutil.h函数,因为这些函数是专门为SDK编写的,我个人和其他许多人都遇到了一些难以修复的问题和bug(这个“库”也没有文档,我听说NVIDIA根本不支持它)

    相反,正如您所提到的,使用提供的两个API之一。我特别推荐运行时API,因为它是一个更高级别的API,因此您不必像在设备API中那样担心所有低级别的实现细节


    两个API都在CUDA编程指南和CUDA参考指南中完全记录,英伟达GPU SDK是最好的,有几个警告。例如,尽量避免使用cutil.h函数,因为这些函数是专门为SDK编写的,我个人和其他许多人都遇到了一些难以修复的问题和bug(这个“库”也没有文档,我听说NVIDIA根本不支持它)

    相反,正如您所提到的,使用提供的两个API之一。我特别推荐运行时API,因为它是一个更高级别的API,因此您不必像在设备API中那样担心所有低级别的实现细节


    《CUDA编程指南》和《CUDA参考指南》中对这两个API进行了完整的记录,这两个API都在每次CUDA发布时更新和提供。

    性能排名可能为3、2、1。 学习曲线为(1+2),3

    如果您成为CUDA专家,那么由于GPU SDK提供的控制功能,使用本书中的所有技巧,几乎不可能击败手卷代码的性能

    也就是说,NVIDIA工程师编写了一个包裹式推力,并在几个问题上显示,与手工轧制的CUDA相比,该推力具有90-95%的效率。它们的缩减、扫描和许多很酷的迭代器对于解决一系列问题也很有用

    自动并行工具在处理不同的内存类型时往往不如karlphillip提到的那个样好


    我的首选工作流是使用推力尽可能多地编写,然后使用GPU SDK完成其余工作。这在很大程度上是一个因素,不需要牺牲太多的性能来减少开发时间和提高可维护性。

    性能排名可能是3、2、1。 学习曲线为(1+2),3

    如果您成为CUDA专家,那么由于GPU SDK提供的控制功能,使用本书中的所有技巧,几乎不可能击败手卷代码的性能

    也就是说,NVIDIA工程师编写了一个包裹式推力,并在几个问题上显示,与手工轧制的CUDA相比,该推力具有90-95%的效率。它们的缩减、扫描和许多很酷的迭代器对于解决一系列问题也很有用

    自动并行工具在处理不同的内存类型时往往不如karlphillip提到的那个样好


    我的首选工作流是使用推力尽可能多地编写,然后使用GPU SDK完成其余工作。这在很大程度上是一个不牺牲太多性能以减少开发时间和提高可维护性的因素。

    这取决于您想在GPU上做什么。如果你的算法能从Struch提供的功能中获益匪浅,比如缩减、前缀、求和,那么Struch绝对值得一试,我敢打赌你自己在纯CUDA C中编写代码的速度肯定不会更快

    然而,如果您已经将并行算法从CPU移植到GPU,那么用普通的CUDA C编写它们可能会更容易。我已经有过一些成功的项目,在这条路线上有很好的加速,并且执行实际计算的CPU/GPU代码几乎是相同的

    您可以在某种程度上结合这两种模式,但据我所知,您正在为每个推力调用启动新内核,如果您希望将所有内核都放在一个大的胖内核中(不考虑太频繁的内核启动),您必须在SDK中使用普通的CUDA C

    我发现纯CUDA C实际上更容易学习,因为它让你对GPU上发生的事情有了很好的理解。推力在代码行之间增加了很多魔力


    我从未使用过自动并行工具,如PGI workstation,但我不建议在等式中添加更多的“魔力”。

    这取决于你想在GPU上做什么。如果你的算法能从Struch提供的功能中获益匪浅,比如缩减、前缀、求和,那么Struch绝对值得一试,我敢打赌你自己在纯CUDA C中编写代码的速度肯定不会更快

    但是,如果您已经将并行算法从CPU移植到GPU,那么编写