brook

brook

2003年,斯坦福大學的Ian Buck等人對ANSI C進行擴展,開發了基於NVIDIA Cg的Brook源到源編譯器。Brook可以將類似C的brook C語言通過brcc編譯器編譯為Cg代碼,隱藏了利用圖形學API實現的細節,大大簡化了開發過程。

簡介


早期的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+開發比較簡便。