与 CUDA 相比,Taichi 跑得快不快?

您好,欢迎访问我们的网站,我们将竭诚为您服务!

与 CUDA 相比,Taichi 跑得快不快?

时间:2022-10-02 19:45:29 阅读:83
在「v1.0.0」用Taichi AOT方案将特效部署到移动端中,我们展示了Taichi脱离Python环境部署的方法,实现了将特效算法快速部署在安卓手机上,并加上了重力交互功能。受制于散热、成本等问题,在部署环境中的硬件其计算能力通常很弱,因此有一个问题变得非常重要:相比于更底层的原生编程语言,Taichi能不能充分地发挥设备的计算能力?于是我们发起Taichi benchmark项目做一个更加细分、准确的性能评估。

  作为一个领域编程语言(domain-specific language),Taichi可以用很短的代码解决数值计算方面的问题。我们针对领域中常用算法建立了测试集,将每一个测试项目和性能最好的实现方法进行对比,简而言之:对比基线是外部最强实现vs Taichi实现。通过这样的对比,我们试图评估Taichi编译器中内置优化技术的有效性以及可优化的空间。同时,这种对比也可以帮助改进Taichi,以达到更好的性能。作为这个项目的开端,目前版本的性能评测主要是Taichi与CUDA,通过与高度优化的CUDA代码进行对照,以评估Taichi的优化水平。

  这次评测部分地解答了用户一直以来的疑问:Taichi和CUDA比性能究竟怎么样?我们在一块Nvidia Geforce RTX 3080上进行了测试,其中有9个算法以高性能的CUDA实现作为参考。在测试中计时方法对结果很重要,采用的两种计时方式分别是:

  外部计时:重复运行计算函数,取平均计算时间。其中第一次运行包含了Taichi的编译开销,不计入总时间。

  Kernel计时:在CUDA中使用cudaEventElapsedTime接口,在Taichi中使用ti.profiler统计kernel的运行时间(点击查看Taichi profiler文档)。二者的底层实现统一调用CUPTI,因此在度量上是一致的。

  其中,外部计时的方式仍然包含了每次调用的Python开销,更贴近实际的使用场景。Kernel计时仅包含GPU计算函数,能更准确地评估Kernel函数的质量。无论采用哪种方式,在每个测试项目中我们使用相同的计时器以保证对比是公平的。

  下图中我们统计了Taichi在不同测试算法中相对CUDA的加速比。

  图1:Taichi在不同算法上相对CUDA的加速比,单位是百分比,计算方法为CUDA运行时间/Taichi运行时间。在每项测试中我们都会测试多种不同的算法参数,图中统计的加速比是全部结果的平均值。

  在大部分的测试中,Taichi取得了和CUDA非常接近的性能,有些稍好,有些稍差。在MPM测试中,Taichi的性能显著高于CUDA。这是由于MPM算法相对复杂,Taichi编译器能够自动发现一些优化模式,从而达到比手工优化更好的性能。

  另外,我们在SAXPY测试中应用了天花板模型(Roofline Model)。天花板模型是高性能计算中很常用的评估芯片计算能力上限的方式,算法的计算访存比越高,就越不容易受内存带宽的限制,设备能发挥出的计算能力就越多。在测试中,我们对标准SAXPY算法做了一点修改,在每次内存访问的时候增加多次乘加运算,从而得到了具有不同算术密度的算法。如图所示,Taichi在各个参数下均达到了非常接近天花板的性能,说明在这种规整的计算下,Taichi的并行优化能力足够强,可以充分地发挥设备的计算能力。

  图2:多体模拟算法的Roofline,横轴是算法本身的算术密度,单位为平均每字节的内存访问可以执行多少次浮点计算;纵轴是计算的性能,单位为每秒执行的浮点运算次数。

  除了正面的结果,Taichi在多体模拟测试(图1的N-body)中遇到了比较大的性能问题。在测试中我们对比了一个非常详细的CUDA参考实现,它在不同的优化步骤上都给出了对应的CUDA代码。Taichi的性能可以接近优化的中间版本,但无法达到最优的结果。我们发现主要问题是Taichi没有支持CUDA的float4,同时对shared memory的支持也有欠缺。下一步,Taichi会持续改进编译器,集成更多的优化技术,赋予程序更好的性能。

  图3:多体模拟测试,横轴是物体数量,纵轴是性能,单位是每秒相互作用力计算次数。不同曲线代表不同的优化版本。

  更详细的性能分析请参考taichi  benchmark代码仓库。另外在每个子目录里,我们准备了一个独立的plot_benchmark.py脚本,只要装好了nvcc和Taichi就可以一步复现所有的性能图表。如果你有更多想加入Benchmark的算法项目,或者性能更强的baseline,可以在代码仓库中提交issue。欢迎大家一起来测试Taichi!taichi https://taichi-lang.cn/
郑重声明:文章内容来自互联网,纯属作者个人观点,仅供参考,并不代表本站立场 ,版权归原作者所有!

上一篇:关于网络映射有哪些应用?都有些什么要了解的呢?

下一篇:向日葵远程控制客户端专业性吗,好用吗?

相关推荐

返回顶部