2003年,史丹福大学的Ian Buck等人对ANSI C进行扩展,开发了基于NVIDIA Cg的Brook源到源编译器。Brook可以将类似C的brook C语言通过brcc编译器编译为Cg代码,隐藏了利用图形学API实现的细节,大大简化了开发过程。
基本介绍
- 中文名brook
- 提出者Ian Buck
- 提出时间2003年
- 套用学科计算机
简介
早期的Brook编译效率很低,并且只能使用像素着色器进行运算。受GPU架构限制,Brook也缺乏有效的数据通信机制。AMD/ATI公司在其GPGPU通用计算产品Stream中採用了Brook的改进版本Brook+作为高级开发语言。Brook+的编译器的工作方式与Brook不同,提高了效率。
概念
Brook+语言中两个最关键的概念
1. 流。流就是一些类型相同的数据,他们可以被分配到不同的流处理器中进行处理。
2. 核心。核心程式其实就是GPU硬体的行为程式,它指定了硬体的行为特性。
Brook+的核心函式是被Brcc(Brook Code Compiler)编译的,编译后生成三个档案,其中两个是.h和.cpp档案,就是定义了一些和函式相关的类,还有一个最关键的就是IL(IL是指AMD Intermediate Language。是一种彙编形式的语言)代码。有了这些档案,这三个档案再和用户的其他源档案一起编译,连结,从而生成可执行性档案。Brook+的程式在运行时,是需要Brook runtime的。Brook+的核心程式也可以被CPU执行,还可以进行调试。
Brook+的版本是1.4版本。已经被提交到了SourceForge上,应该是没有太多的维护了。由于Brook+还有一些限制,所以在灵活性方面并不如CUDA好。而且由于过多的封装,效率也并不很高,不支持多GPU, rook+的kernel不支持高级的GPU命令,比如本地共享记忆体和原子操作等。唯一的好处就在于用Brook+开发比较简便