已获8500 首个GPU高级语言 大规模并行就像写Python Star

机器之心报道

编辑:泽南、小舟

经过近 10 年的不懈努力,对计算机科学核心的深入研究,人们终于实现了一个梦想:在 GPU 上运行高级语言。

上周末,一种名为 Bend 的编程语言在开源社区引发了热烈的讨论,GitHub 的 Star 量已经超过了 8500。

GitHub:https://github.com/HigherOrderCO/Bend

作为一种大规模并行的高级编程语言,它仍处于研究阶段,但提出的思路已经让人们感到非常惊讶。使用 Bend,你可以为多核 CPU/GPU 编写并行代码,而无需成为具有 10 年经验的 C/CUDA 专家,感觉就像 Python 一样!

是的,Bend 采用了 Python 语法。

与 CUDA、Metal 等低级替代方案不同,Bend 具有 Python、Haskell 等表达性语言的功能,包括快速对象分配、完全闭包支持的高阶函数、无限制的递归,甚至 continuation。Bend 运行在大规模并行硬件上,具有基于核心数量的近线性加速。Bend 由 HVM2 运行时提供支持。

该项目的主要贡献者 Victor Taelin 来自巴西,他在 X 平台上分享了 Bend 的主要特性和开发思路。

首先,Bend 不适用于现代机器学习算法,因为这些算法是高度正则化的(矩阵乘法),具有预先分配的内存,并且通常已经有编写好的 CUDA 内核。

Bend 的巨大优势体现在实际应用中,这是因为「真正的应用程序」通常没有预算来制作专用的 GPU 内核。试问,谁在 CUDA 中制作了网站?而且,即使有人这样做了,也是不可行的,因为:

1. 真正的应用程序需要从许多不同的库导入函数,无法为它们编写 CUDA 内核;

2. 真实的应用程序具有动态函数和闭包;

3. 真实的应用程序会动态且不可预测地分配大量内存。

Bend 完成了一些新的尝试,并且在某些情况下可以相当快,但现在想写大语言模型肯定是不行的。

作者对比了一下旧方法和新的方法,使用相同的算法树中的双调排序,涉及 JSON 分配和操作。Node.js 的速度是 3.5 秒(Apple M3 Max),Bend 的速度是 0.5 秒(NVIDIA RTX 4090)。

是的,目前 Bend 需要整块 GPU 才能在一个核心上击败 Node.js。但另一方面,这还是一个初生的新方法与大公司(Google)优化了 16 年的 JIT 编译器在进行比较。未来还有很多可能性。

如何使用

在 GitHub 上,作者简要介绍了 Bend 的使用流程。

首先,安装 Rust。如果你想使用 C 运行时,请安装 C 编译器(例如 GCC 或 Clang);如果要使用 CUDA 运行时,请安装 CUDA 工具包(CUDA 和 nvcc)版本 12.x。Bend 目前仅支持 Nvidia GPU。

然后,安装 HVM2 和 Bend:

cargo +nightly install hvm

cargo +nightly install bend-lang

最后,编写一些 Bend 文件,并使用以下命令之一运行它:

# uses the Rust interpreter (sequential)

# uses the C interpreter (parallel)

bend run-cu

# uses the CUDA interpreter (massively parallel)

你还可以使用 gen-c 和 gen-cu 将 Bend 编译为独立的 C/CUDA 文件,以获得最佳性能。但 gen-c、gen-cu 仍处于起步阶段,远没有像 GCC 和 GHC 这样的 SOTA 编译器那么成熟。

Bend 中的并行编程

这里举例说明可以在 Bend 中并行运行的程序。例如,表达式:

(((1 + 2) + 3) + 4)

不能并行运行,因为 + 4 取决于 + 3,而 + 3 又取决于 (1+2)。而表达式:

((1 + 2) + (3 + 4))

可以并行运行,因为 (1+2) 和 (3+4) 是独立的。Bend 并行运行的条件就是符合并行逻辑。

再来看一个更完整的代码示例:

# Sorting Network = just rotate trees!

def sort (d, s, tree):

return tree

(x,y) = tree

lft = sort (d-1, 0, x)

rgt = sort (d-1, 1, y)

return rots (d, s, lft, rgt)

# Rotates sub-trees (Blue/Green Box)

def rots (d, s, tree):

return tree

(x,y) = tree

return down (d, s, warp (d-1, s, x, y))

该文件实现了具有不可变树旋转的双调排序器。它不是很多人期望的在 GPU 上快速运行的算法。然而,由于它使用本质上并行的分治方法,因此 Bend 会以多线程方式运行它。一些速度基准:

不执行任何操作即可实现 57 倍的加速。没有线程产生,没有锁、互斥锁的显式管理。我们只是要求 Bend 在 RTX 上运行我们的程序,就这么简单。

Bend 不限于特定范例,例如张量或矩阵。任何的并发系统,从着色器到类 Erlang 的 actor 模型都可以在 Bend 上进行模拟。例如,要实时渲染图像,我们可以简单地在每个帧上分配一个不可变的树:

# given a shader, returns a square image

def render (depth, shader):

bend d = 0, i = 0:

when d < depth:

color = (fork (d+1, i*2+0), fork (d+1, i*2+1))

width = depth / 2

color = shader (i % width, i /width)

return color

# given a position, returns a color

# for this demo, it just busy loops

def demo_shader (x, y):

when i < 5000:

color = fork (i + 1)

color = 0x000001

return color

# renders a 256x256 image using demo_shader

return render (16, demo_shader)

它确实会起作用,即使涉及的算法在 Bend 上也能很好地并行。长距离通信通过全局 beta 缩减(根据交互演算)执行,并通过 HVM2 的原子链接器正确有效地同步。

最后,作者表示 Bend 现在仅仅是第一个版本,还没有在合适的编译器上投入太多精力。大家可以预期未来每个版本的原始性能都会大幅提高。而现在,我们已经可以使用解释器,从 Python 高级语言的角度一睹大规模并行编程的样子了。

参考内容:

https://news.ycombinator.com/item?id=40390287

https://x.com/VictorTaelin?ref_src=twsrc%5Egoogle%7Ctwcamp%5Eserp%7Ctwgr%5Eauthor

https://x.com/DrJimFan/status/1791514371086250291


cuda主要用于哪。具体是什么。

CUDA CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。 CUDA是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 开发人员现在可以使用C语言来为CUDA架构编写程序,C语言是应用最广泛的一种高级编程语言。 所编写出的程序于是就可以在支持CUDA的处理器上以超高性能运行。 将来还会支持其它语言,包括FORTRAN以及C++。 随着显卡的发展,GPU越来越强大,而且GPU为显示图像做了优化。 在计算上已经超越了通用的CPU。 如此强大的芯片如果只是作为显卡就太浪费了,因此NVidia推出CUDA,让显卡可以用于图像计算以外的目的。 目前只有G80、G92、G94和GT200平台的NVidia显卡才能使用CUDA,工具集的核心是一个C语言编译器。 G80中拥有128个单独的ALU,因此非常适合并行计算,而且数值计算的速度远远优于CPU。 CUDA的SDK中的编译器和开发平台支持Windows、Linux系统,可以与Visual Studio2005集成在一起。 Geforce8CUDA(Compute Unified Device Architecture)是一个新的基础架构,这个架构可以使用GPU来解决商业、工业以及科学方面的复杂计算问题。 它是一个完整的GPGPU解决方案,提供了硬件的直接访问接口,而不必像传统方式一样必须依赖图形API接口来实现GPU的访问。 在架构上采用了一种全新的计算体系结构来使用GPU提供的硬件资源,从而给大规模的数据计算应用提供了一种比CPU更加强大的计算能力。 CUDA采用C语言作为编程语言提供大量的高性能计算指令开发能力,使开发者能够在GPU的强大计算能力的基础上建立起一种效率更高的密集数据计算解决方案。 从CUDA体系结构的组成来说,包含了三个部分:开发库、运行期环境和驱动(表2)。 开发库是基于CUDA技术所提供的应用开发库。 目前CUDA的1.1版提供了两个标准的数学运算库——CUFFT(离散快速傅立叶变换)和CUBLAS(离散基本线性计算)的实现。 这两个数学运算库所解决的是典型的大规模的并行计算问题,也是在密集数据计算中非常常见的计算类型。 开发人员在开发库的基础上可以快速、方便的建立起自己的计算应用。 此外,开发人员也可以在CUDA的技术基础上实现出更多的开发库。 运行期环境提供了应用开发接口和运行期组件,包括基本数据类型的定义和各类计算、类型转换、内存管理、设备访问和执行调度等函数。 基于CUDA开发的程序代码在实际执行中分为两种,一种是运行在CPU上的宿主代码(Host Code),一种是运行在GPU上的设备代码(Device Code)。 不同类型的代码由于其运行的物理位置不同,能够访问到的资源不同,因此对应的运行期组件也分为公共组件、宿主组件和设备组件三个部分,基本上囊括了所有在GPGPU开发中所需要的功能和能够使用到的资源接口,开发人员可以通过运行期环境的编程接口实现各种类型的计算。 由于目前存在着多种GPU版本的NVidia显卡,不同版本的GPU之间都有不同的差异,因此驱动部分基本上可以理解为是CUDA-enable的GPU的设备抽象层,提供硬件设备的抽象访问接口。 CUDA提供运行期环境也是通过这一层来实现各种功能的。 目前基于CUDA开发的应用必须有NVIDIA CUDA-enable的硬件支持,NVidia公司GPU运算事业部总经理Andy Keane在一次活动中表示:一个充满生命力的技术平台应该是开放的,CUDA未来也会向这个方向发展。 由于CUDA的体系结构中有硬件抽象层的存在,因此今后也有可能发展成为一个通用的GPGPU标准接口,兼容不同厂商的GPU产品CUDA 工具包是一种针对支持CUDA功能的GPU(图形处理器)的C语言开发环境。 CUDA开发环境包括: · nvcc C语言编译器· 适用于GPU(图形处理器)的CUDA FFT和BLAS库· 分析器· 适用于GPU(图形处理器)的gdb调试器(在2008年3月推出alpha版)· CUDA运行时(CUDA runtime)驱动程序(目前在标准的NVIDIA GPU驱动中也提供)· CUDA编程手册CUDA开发者软件开发包(SDK)提供了一些范例(附有源代码),以帮助使用者开始CUDA编程。 这些范例包括:· 并行双调排序· 矩阵乘法· 矩阵转置· 利用计时器进行性能评价· 并行大数组的前缀和(扫描)· 图像卷积· 使用Haar小波的一维DWT· OpenGL和Direct3D图形互操作示例· CUDA BLAS和FFT库的使用示例· CPU-GPU C—和C++—代码集成· 二项式期权定价模型· Black-Scholes期权定价模型· Monte-Carlo期权定价模型· 并行Mersenne Twister(随机数生成)· 并行直方图· 图像去噪· Sobel边缘检测滤波器· MathWorks MATLAB®新的基于1.1版CUDA的SDK 范例现在也已经发布了。 技术功能 ·在GPU(图形处理器)上提供标准C编程语言· 为在支持CUDA的NVIDIA GPU(图形处理器)上进行并行计算而提供了统一的软硬件解决方案· CUDA兼容的GPU(图形处理器)包括很多:从低功耗的笔记本上用的GPU到高性能的,多GPU的系统。 · 支持CUDA的GPU(图形处理器)支持并行数据缓存和线程执行管理器· 标准FFT(快速傅立叶变换)和BLAS(基本线性代数子程序)数值程序库· 针对计算的专用CUDA驱动· 经过优化的,从中央处理器(CPU)到支持CUDA的GPU(图形处理器)的直接上传、下载通道· CUDA驱动可与OpenGL和DirectX图形驱动程序实现互操作· 支持Linux 32位/64位以及Windows XP 32位/64位 操作系统· 为了研究以及开发语言的目的,CUDA提供对驱动程序的直接访问,以及汇编语言级的访问 NVIDIA进军高性能计算领域,推出了Tesla&CUDA高性能计算系列解决方案,CUDA技术,一种基于NVIDIA图形处理器(GPU)上全新的并行计算体系架构,让科学家、工程师和其他专业技术人员能够解决以前无法解决的问题,作为一个专用高性能GPU计算解决方案,NVIDIA把超级计算能够带给任何工作站或服务器,以及标准、基于CPU的服务器集群 CUDA是用于GPU计算的开发环境,它是一个全新的软硬件架构,可以将GPU视为一个并行数据计算的设备,对所进行的计算进行分配和管理。 在CUDA的架构中,这些计算不再像过去所谓的GPGPU架构那样必须将计算映射到图形API(OpenGL和Direct 3D)中,因此对于开发者来说,CUDA的开发门槛大大降低了。 CUDA的GPU编程语言基于标准的C语言,因此任何有C语言基础的用户都很容易地开发CUDA的应用程序。 由于GPU的特点是处理密集型数据和并行数据计算,因此CUDA非常适合需要大规模并行计算的领域。 目前CUDA除了可以用C语言开发,也已经提供FORTRAN的应用接口,未来可以预计CUDA会支持C++、Java、Python等各类语言。 可广泛的应用在图形动画、科学计算、地质、生物、物理模拟等领域。 2008年NVIDIA推出CUDA SDK2.0版本,大幅提升了CUDA的使用范围。 使得CUDA技术愈发成熟 目前,支持CUDA的GPU销量已逾1亿,数以千计的软件开发人员正在使用免费的CUDA软件开发工具来解决各种专业以及家用应用程序中的问题。 这些应用程序从视频与音频处理和物理效果模拟到石油天然气勘探、产品设计、医学成像以及科学研究,涵盖了各个领域。 目前市面上已经部署了超过一亿颗支持CUDA的GPU,数以千计的软件开发人员正在使用免费的CUDA软件工具来为各种应用程序加速。 CUDA 的核心有三个重要抽象概念: 线程组层次结构、共享存储器、屏蔽同步( barrier synchronization),可轻松将其作为C 语言的最小扩展级公开给程序员。 CUDA 软件堆栈由几层组成,一个硬件驱动程序,一个应用程序编程接口(API) 和它的Runtime, 还有二个高级的通用数学库,CUFFT 和CUBLAS。 硬件被设计成支持轻 量级的驱动和Runtime 层面,因而提高性能。

为什么人工智能用Python

这属于一种误解,人工智能的核心算法是完全依赖于C/C++的,因为是计算密集型,需要非常精细的优化,还需要GPU、专用硬件之类的接口,这些都只有C/C++能做到。 所以某种意义上其实C/C++才是人工智能领域最重要的语言。 Python是这些库的API binding,使用Python是因为CPython的胶水语言特性,要开发一个其他语言到C/C++的跨语言接口,Python是最容易的,比其他语言的ffi门槛要低不少,尤其是使用Cython的时候。 其他语言的ffi许多都只能导入C的函数入口点,复杂的数据结构大多只能手工用byte数组拼起来,如果还需要回调函数输入那就无计可施了。 而CPython的C API是双向融合的,可以直接对外暴露封装过的Python对象,还可以允许用户通过继承这些自定义对象来引入新特性,甚至可以从C代码当中再调用Python的函数(当然,也有一定的条件限制)。 不过这也是PyPy这样的JIT解释器的一个障碍。 而且Python历史上也一直都是科学计算和数据分析的重要工具,有numpy这样的底子,因为行业近似所以选择API binding语言的时候会首选Python,同时复用numpy这样的基础库既减少了开发工作量,也方便从业人员上手。

什么是CUDA?

CUDA(Compute Unified Device Architecture),显卡厂商NVidia推出的运算平台。 CUDA™是一种由NVIDIA推出的通用并行计算架构,该架构使GPU能够解决复杂的计算问题。 它包含了CUDA指令集架构(ISA)以及GPU内部的并行计算引擎。 随着显卡的发展,GPU越来越强大,而且GPU为显示图像做了优化。 在计算上已经超越了通用的CPU。 如此强大的芯片如果只是作为显卡就太浪费了,因此NVidia推出CUDA,让显卡可以用于图像计算以外的目的。 简单来讲,比如通过CUDA架构,视频播放软件可以充分挖掘NVIDIA系列显卡的GPU并行计算能力,轻松进行高清影片的播放,与软件高清解码相比,CPU占用可以下降一半以上。 当然,CUDA的应用领域绝不仅仅是视频、图形、游戏,包括各种3D和建模,医疗、能源、科学研究等,到处都可见到这种技术架构的应用。 支持CUDA的硬件环境需要有NVidia GF8系列及以上型号的显卡,并且安装185版本以上的显卡驱动程序。 以QQ影音播放器来讲,要想开启CUDA硬件解码加速,可以打开QQ影音的“播放器设置”,进入“高清加速”面板,在“硬件优化”中选择“自定义优化模式”,然后在“滤镜配置”中的“视频解码器”中自定义选择相应的“QQ CUDA Video Decoder()”即可。 而关闭CUDA加速,只需取消选择“QQ CUDA Video Decoder()”,或者切换到“智能高清模式”或“稳定兼容模式”通过这种高清解码定义的开启,并不是说你的画质能够提升多少,而是提升高清视频播放时的流畅以及降低CPU的占用。 这个时候,节约下来的CPU空间,可以允许你再去做别的工作,这样就会大大提升你的工作效率,而不至于除了看视频,其他的什么都不能做了。

  • 声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
  • 本文地址:https://srwj168.com.cn/keji312/8390.html
点亮山里女孩的梦想 张桂梅 大力弘扬教育家精神
多国加快部署!中国氢能能否破局