冬瓜社区

 找回密码
 立即注册
搜索

太极(Taichi)编程语言及其设计目标

[复制链接]
发表于 2023-2-25 14:22:23 | 显示全部楼层 |阅读模式
  为了解决之前提到的问题,我们设计了显示链接编程语言。显示链接在设计之初就注重通过提供领域特定语言抽象(domain-specific language abstractions)与编译优化(compiler optimizations)来同时达到高生产力和高性能,并满足新兴视觉计算模式的需求。其可移植性通过多后端(multiple backends)的设计来达到,包括x64,ARM,CUDA,Metal,OpenGL compute shader等。

  范围(scope)

  显示链接主要面向以并行for循环+命令式编程为主体的计算任务。利用多核处理器进行并行编程已成为高性能计算的主旋律,而命令式(Imperative,区别于函数式functional)的编程范式更为贴近处理器和高性能程序员的编程习惯。许多视觉计算任务的计算模式也属于这个范围。比如在图像处理、计算物理等任务中,常常需要以并行的方式遍历所有的像素(或粒子、网格、节点等),在显示链接中这些模式均可以表达为一个并行for循环。(注:类似的描述包括SIMD/SPMD/SIMT,如OpenMP parallel for、CUDA kernel等,本文不再对其中细微差异进行区分。)

  尽管显示链接尽力覆盖广泛的视觉计算任务,某些计算在显示链接的应用范围之外:

  具有领域特性硬件(domain-specific hardware)的任务;

  粒度(granularity)足够粗以至于函数调用、数据传输的开销可忽略,并且有高度优化的库解决方案的任务。

  具体来说

  传统渲染任务往往有着光栅化、光线追踪硬件的支持。实时图形API,如OpenGL、DirectX、Metal、Vulkan往往已经足够适用。

  视频编码、解码任务,常常有硬件编码、解码器的支持。

  使用标准层(如卷积、Batch normalization等)的深度神经网络,常常已经被深度学习框架,如TensorFlow/PyTorch较好地解决。

  尽管taichi并非为以上应用设计,我们确实需要考虑显示链接与以上系统的高效交互。良好设计的零拷贝(zero-copy API)通常是好的选择。比如,让OpenGL(用于渲染)的顶点着色器(vertex shader)直接读取显示链接生成的compute shader(用于模拟)的粒子位置数据是非常有帮助的。另一个例子是显示链接的PyTorch界面允许(可微)的显示链接程序深度嵌入PyTorch,使其能够直接用于深度神经网络的训练、推理之中。taichi 显示链接

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表