隨著人工智能,VR等領(lǐng)域的發(fā)展,我們對(duì)于高性能圖像處理程序的需求越來越大;當(dāng)前編程工具開發(fā)的高性能圖像處理程序犧牲了程序的可讀性,模塊性,可移植性等;其主要原因是,當(dāng)前程序?qū)?a target="_blank">算法描述, 數(shù)據(jù)存儲(chǔ)以及計(jì)算糅雜一起。同時(shí)手工編寫高性能圖像處理程序開發(fā)效率較低,難以快速構(gòu)建大量高性能圖像處理代碼。
在這樣的背景下,MIT的研究人員專門為圖像處理設(shè)計(jì)了一種程序語言——Halide;Halide語言易于編寫和修改,并且能夠自動(dòng)對(duì)代碼進(jìn)行優(yōu)化,使應(yīng)用程序獲得更好的執(zhí)行效率。Halide設(shè)計(jì)的核心思想是將算法的內(nèi)容和算法的執(zhí)行耦,這樣程序員可以根據(jù)不同的設(shè)備設(shè)置不同的優(yōu)化策略,獲得更高質(zhì)量的代碼。
目前halide支持的設(shè)備情況為:
CPU架構(gòu):X86, ARM, MIPS, Hexagon, PowerPC
操作系統(tǒng):Linux, Windows, Mac OS X, Android, iOS, Qualcomm QuRT
GPU計(jì)算API:CUDA, OpenCL, OpenGL, OpenGL Compute Shaders,Apple Metal, Microsoft Direct X 12
當(dāng)前知名的自動(dòng)優(yōu)化框架,除了halide還有寒武紀(jì)的TVM,TVM在設(shè)計(jì)上借鑒了halide將算法內(nèi)容和執(zhí)行解耦的思路。本文主要主要內(nèi)容如下:
- LLVM安裝- Halide編譯- Halide程序構(gòu)建
##LLVM安裝
首先下載LLVM源代碼,源代碼下載地址為:
http://releases.llvm.org/download.html#7.0.1
halide要求LLVM的版本為6.0以上,本文使用的是7.0.1版本;
需要下載一下幾部分:
- LLVM source code (.sig)- Clang source code (.sig)- compiler-rt source code (.sig)- libc++ source code (.sig)- libc++abi source code (.sig)- clang-tools-extra (.sig) (可選)
源碼編譯LLVM:- 創(chuàng)建源碼目錄```mkdir LLVMtar xvf llvm-7.0.1.src.tar.xzmv llvm-7.0.1.src.tar.xz llvm-7.0.1cd llvm-7.0.1/tools/tar xvf cfe-7.0.1.src.tar.xz #clang的源代碼包mv cfe-7.0.1.src clangcd ../projects/tar xvf compiler-rt-7.0.1.src.tar.xztar xvf libcxx-7.0.1.src.tar.xztar xvf libcxxabi-7.0.1.src.tar.xzmv libcxx-7.0.1.src libcxxmv libcxxabi-7.0.1.src libcxxabimv compiler-rt-7.0.1.src compiler-rt```以上是目錄構(gòu)建的方法,注意需要自己將下載的源代碼包拷貝到對(duì)應(yīng)的目錄下;可選包c(diǎn)lang-tools-extra-7.0.1.src.tar.xz放到llvm-7.0.1/tools/clang/tools目錄下,解壓,重命名為extra;- build LLVM筆者在LLVM-7.0.1目錄的同一級(jí),創(chuàng)建LLVM-build目錄;```cd LLVM-buildcmake -DLLVM_ENABLE_TERMINFO=OFF -DLLVM_TARGETS_TO_BUILD="X86;ARM;NVPTX;AArch64;Mips;PowerPC" -DLLVM_ENABLE_ASSERTIONS=ON -DCMAKE_BUILD_TYPE=Release ../LLVM-7.0.1/
make -j4
make install```其中,-DLLVM_TARGETS_TO_BUILD選項(xiàng)也可以根據(jù)需求設(shè)置,目前LLVM支持的架構(gòu)包含:AArch64AMDGPUARMBPFHexagonLanaiMipsMSP430NVPTXPowerPCSparcSystemZX86XCore
也可以不使用make install,在編譯Halide的時(shí)候使用export:
export LLVM_CONFIG=
以上是關(guān)于LLVM的編譯。
## Halide的編譯安裝
下載源碼:git clone https://github.com/halide/Halide.git進(jìn)入Halide目錄,設(shè)置環(huán)境變量:export LLVM_CONFIG=
```note:如果編譯失敗,關(guān)注一下cmake命令執(zhí)行的結(jié)果,查看缺少什么包,安裝后重新編譯即可;筆者在編譯的過程中缺少,OpenBLAS,eign3, atlas;其中OpenBLAS采用的源碼安裝,下載源碼:```git clone https://github.com/xianyi/OpenBLAS.gitcd OpenBLASmake -j4make PREFIX=/you/install/path/ install
```如果安裝目錄不是默認(rèn)的/usr/local/,則需要指定環(huán)境變量;其他兩個(gè)庫采用apt-get大法安裝即可;```sudo apt-get install libeigen3-devsudo apt-get install libatlas-dev
```至此完成了Halid的安裝編譯;注意Halide也可以不安裝,只要使用的時(shí)候正確鏈接庫就OK。
## Halide程序構(gòu)建demo如下:```// Halide.h包含了整個(gè)Halide, 只需要include這個(gè)頭文件即可#include "Halide.h"http://c頭文件是為了使用c函數(shù)#include
int main(int argc, char **argv) {
//定義函數(shù)Halide::Func gradient;//定義變量Halide::Var x, y;//定義計(jì)算Halide::Expr e = x + y;
gradient(x, y) = e;//獲取計(jì)算結(jié)果Halide::Buffer
//驗(yàn)證計(jì)算結(jié)果for (int j = 0; j < output.height(); j++) {for (int i = 0; i < output.width(); i++) {if (output(i, j) != i + j) {printf("Something went wrong!\n""Pixel %d, %d was supposed to be %d, but instead it's %d\n",i, j, i+j, output(i, j));return -1;}}}printf("Success!\n");return 0;}
```編譯方法:```g++ halide01.cpp -g -I /you/patn/include -L /you/path/bin -lHalide -lpthread -ldl -o halide01 -std=c++11```編譯完該文件以后,獲取可執(zhí)行文件;執(zhí)行該文件之前需要設(shè)置環(huán)境變量:```export LD_LIBRARY_PATH=/you/path/bin```該目錄包含Halide.so至此Halide的demo構(gòu)建結(jié)束;本文中只構(gòu)建了簡(jiǎn)單的Halide的程序,能夠看到Halide語言中算法描述與計(jì)算解耦的設(shè)計(jì)方式;之后的文章中會(huì)繼續(xù)介紹Halide中關(guān)于優(yōu)化策略等的設(shè)計(jì),最終驗(yàn)證Halide自動(dòng)優(yōu)化代碼的性能。
-
AI
+關(guān)注
關(guān)注
87文章
28877瀏覽量
266254 -
MIT
+關(guān)注
關(guān)注
3文章
253瀏覽量
23312 -
vr
+關(guān)注
關(guān)注
34文章
9619瀏覽量
149412
原文標(biāo)題:來自MIT的圖像設(shè)計(jì)語言Halide:AI、VR利器
文章出處:【微信號(hào):SSDFans,微信公眾號(hào):SSDFans】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論