Cuda 您是否已成功使用GPU?
我很想知道是否有人编写了一个应用程序,通过使用,例如。如果是这样,您发现了什么问题?与标准CPU相比,您取得了哪些性能提升?我一直在使用GPGPU进行运动检测(最初使用CG,现在使用CUDA)和稳定(使用CUDA)以及图像处理。 在这种情况下,我得到了大约10-20倍的加速Cuda 您是否已成功使用GPU?,cuda,gpgpu,hpc,Cuda,Gpgpu,Hpc,我很想知道是否有人编写了一个应用程序,通过使用,例如。如果是这样,您发现了什么问题?与标准CPU相比,您取得了哪些性能提升?我一直在使用GPGPU进行运动检测(最初使用CG,现在使用CUDA)和稳定(使用CUDA)以及图像处理。 在这种情况下,我得到了大约10-20倍的加速 据我所知,这对于数据并行算法来说是相当典型的 我已经编写了一些简单的应用程序,如果您可以并行化浮点计算,这将非常有帮助 我发现以下课程是由伊利诺伊大学Urrina MangaPange教授和NVIDIA工程师在我开始的时候非
据我所知,这对于数据并行算法来说是相当典型的 我已经编写了一些简单的应用程序,如果您可以并行化浮点计算,这将非常有帮助
我发现以下课程是由伊利诺伊大学Urrina MangaPange教授和NVIDIA工程师在我开始的时候非常有用的:(包括所有课程的录音)。P>但我还没有任何关于CUDA的实践经验,我一直在研究这个主题,发现了一些使用GPGPU API记录积极结果的论文(它们都包括CUDA) 这描述了如何通过创建大量并行原语(映射、散布、聚集等)并行化数据库连接,这些原语可以组合成一个高效的算法 在这种情况下,AES加密标准的并行实现以与离散加密硬件相当的速度创建
最后,本文分析了CUDA在结构化和非结构化网格、组合逻辑、动态规划和数据挖掘等许多应用中的应用情况。我在CUDA中实现了蒙特卡罗计算,用于一些金融用途。经过优化的CUDA代码比“本可以更努力,但不是真的”多线程CPU实现快约500倍。(此处将GeForce 8800GT与Q6600进行比较)。众所周知,蒙特卡罗问题是令人尴尬的平行问题 遇到的主要问题包括由于G8x和G9x芯片对IEEE单精度浮点数的限制而导致的精度损失。随着GT200芯片的发布,可以通过使用双精度单元在一定程度上缓解这一问题,但要牺牲一些性能。我还没有试过
此外,由于CUDA是一个C扩展,因此将其集成到另一个应用程序中是非常重要的。我一直在用gpgpu而不是CUDA进行开发。 您将获得何种性能增益取决于许多因素,但最重要的是数值强度。(即计算操作与内存引用的比率。) BLAS level-1或BLAS level-2函数(如添加两个向量)仅对每3个内存引用执行1次数学运算,因此NI为(1/3)。与仅在cpu上运行相比,使用CAL或Cuda运行速度总是较慢。主要原因是将数据从cpu传输到gpu和gpu所需的时间 对于像FFT这样的函数,有O(N logn)计算和O(N)内存引用,因此NI是O(logn)。如果N非常大,比如1000000,那么在gpu上执行它可能会更快;如果N很小,比如说1000,它几乎肯定会慢一些 对于BLAS 3级或LAPACK函数,如矩阵的LU分解,或查找其特征值,有O(N^3)计算和O(N^2)内存引用,因此NI为O(N)。对于非常小的阵列,假设N是几分,这在cpu上仍然会更快,但随着N的增加,算法会很快从内存边界转到计算边界,gpu上的性能增长也会很快 任何涉及复杂算术的运算都比标量算术要多,标量算术通常使NI增加一倍并提高gpu性能
(来源:)
以下是CGEMM的性能—在Radeon 4870上完成的复杂单精度矩阵乘法。我已将CUDA用于几种图像处理算法。当然,这些应用程序非常适合CUDA(或任何GPU处理范式) 在我看来,将算法移植到CUDA有三个典型阶段:
这与为CPU优化代码非常相似。然而,GPU对性能优化的响应甚至比CPU更难预测。是的。我已经使用CUDAAPI实现了 这相当容易,因为它是一个过滤器,必须在给定输入图像的情况下并行运行。我在这方面没有遇到太多困难,因为它只需要一个简单的内核。加速比约为300倍。这是我关于CS的最后一个项目。可以找到这个项目(它是用葡萄牙语写成的) 我也试过写分割算法,但写起来很痛苦,因为CUDA还处于起步阶段,所以发生了很多奇怪的事情。我甚至在代码O_O中添加了
if(false){}
,从而提高了性能
这种分割算法的结果并不理想。与CPU方法相比,我的性能损失了20倍(然而,因为它是一个CPU,不同的方法使用相同的结果)