因為上課的需要以及好奇,希望可以在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的菜鳥來說又是另外一個挑戰了。