因為上課的需要以及好奇,希望可以在Xeon Phi上面跑跑看OpenCL,查了一下資料,若想要再Xeon Phi平台上運行OpenCL,需要安裝Intel OpenCL SDK,方式如下:
# tar xzf intel_sdk_for_ocl_applications_*.tgz # cd intel_sdk_for_ocl_applications_*.tgz # ./install-cpu+mic.sh
首先必須到Download下載Intel SDK for OpenCL,必須要填寫一些資料,然後切換到下載的位置之後,下上面的這些指令,就可以完成安裝,要注意的是,MPSS必須事先就已經裝好,最低需求是3.1版本(好險之前裝的時候是3.1.1 XD)。
接下來,為了試驗是否真的可以成功運行,我到這裡下載Monte Carlo的Sample code:
# wget https://software.intel.com/sites/default/files/managed/a6/22/montecarlo-sample.tar.gz # tar -zxvf montecarlo-sample.tar.gz # cd MonteCarlo/ # make # ./montecarlo Platforms (1): [0] Intel(R) OpenCL [Selected] Devices (2): [0] Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz [Selected] [1] Intel(R) Many Integrated Core Acceleration Card Build program options: "-D__DO_FLOAT__ -cl-denorms-are-zero -cl-fast-relaxed-math -cl-single-precision-constant -DNSAMP=262144" Running Monte Carlo options pricing for 65536 options, with 262144 samples Size of memory region for each array: 262144 bytes Using risk free rate = 0.05 and volatility = 0.2 Host time: 12.2822 sec. Host perf: 5335.86 Options per second ... ...
按照上面的步驟,就可以Compile這個OpenCL 程式,並且執行看到結果,我們可以看到Device的部份,是可以成功的看到「Intel(R) Many Integrated Core Acceleration Card」的,它就是我們的Xeon Phi,那就表示成功了,但剛剛這樣的執行,Default選項是使用CPU跑,要怎麼在Xeon Phi上面Run呢?
原本我以為要這樣…
#vim Makefile HEADERS=cmdoptions.hpp ../common/basic.hpp ../common/cmdparser.hpp ../common/ocl object.hpp SOURCES=cmdoptions.cpp montecarlo.cpp ../common/basic.cpp ../common/cmdparser.cp p ../common/oclobject.cpp all: montecarlo montecarlo: $(HEADERS) $(SOURCES) Makefile icpc $(SOURCES) -I../common -mmic -lOpenCL -omontecarlo clean: rm -f montecarlo
我把編譯器改成icpc,並加上-mmic的標籤,想要建立一個Native Application,後來發現怎麼樣都不成功,不管是Library的連結或是其他小問題…,最後,我到了Stack overflow問了這個問題,才得到最後的結論:在OpenCL來說,Xeon Phi只是一個加速裝置(Acceleration Card)所以只要把CL_DEVICE_TYPE的標籤改成「CL_DEVICE_TYPE_ACCELERATOR」,就可以成功的使用了。
在這個範例,程式寫的很完整,可以直接透過執行的時候下參數來決定使用的裝置:
# ./montecarlo --device 1 Platforms (1): [0] Intel(R) OpenCL [Selected] Devices (2): [0] Intel(R) Xeon(R) CPU E5-2620 v2 @ 2.10GHz [1] Intel(R) Many Integrated Core Acceleration Card [Selected] Build program options: "-D__DO_FLOAT__ -cl-denorms-are-zero -cl-fast-relaxed-math -cl-single-precision-constant -DNSAMP=262144" Running Monte Carlo options pricing for 65536 options, with 262144 samples Size of memory region for each array: 262144 bytes Using risk free rate = 0.05 and volatility = 0.2 Host time: 2.24519 sec. Host perf: 29189.4 Options per second ... ...
如此一來,就會變成選擇Intel Xeon Phi來執行了!
實際上執行速度的差異也差很多,Speed Up差不多為6X!也達到我們的目的囉,至於其他Optimzied的改寫程式碼就必須要另外研究了,這對我這個完全不會寫OpenCL的菜鳥來說又是另外一個挑戰了。