1.主機端需要Xeon CPU;
2.主機端的操作系統建議使用RedHad Enterprise Linux 64-bit 6.2;
設備端是一個定制的嵌入式Linux,稱作uOS,可以通過SSH進行訪問。
3.需要利用MIC和OpenMP進行並行化編程處理,主要是找到需要並行的代碼段並添加MIC相關的預編譯指示行( 指導編譯器對混合代碼進行編譯,如何傳遞數據,代碼在主機CPU還是在設備上運行)。
4.在主機端和協處理器端運行的原始代碼是一樣的,沒有2套代碼,只不過編譯器會編譯2套代碼,一套供協處理器運行,一套供主機運行。
5.可以使用c/c++或Fortran語言編寫代碼,使用專用的編譯器icc進行編譯。
6.其開發、調試工具Intel Composer XE 2013是需要購買的,windows版本1199美金,Linux版本1449美金。
7.OpenMP是用於共享內存並行系統的多線程程序設計的一套指導性的編譯處理方案(Compiler Directive),其支持的編程語言包括C語言、C++ 和Fortran;而支持OpenMp的編譯器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMp提供了對並行算法的高層的抽象描述,程序員通過在源代碼中加入專用的pragma來指明自己的意圖,由此編譯器可以自動將程序進行並行化,並在必要之處加入同步互斥以及通信。當選擇忽略這些pragma,或者編譯器不支持OpenMp時,程序又可退化為通常的程序(一般為串行),代碼仍然可以正常運作,只是不能利用多線程來加速程序執行。
8.#pragma omp parallel for后面的reduction子句主要用來對一個或多個參數條目指定一個操作符,每個線程將創建參數條目的一個私有拷貝,在區域的結束處,將用私有拷貝的值通過指定的運行符運算,原始的參數條目被運算結果的值更新。
int i, sum = 100;
#pragma omp parallel for reduction(+: sum)
for ( i = 0; i < 1000; i++ )
{
sum += i;
}
9.要在Microsoft Visual Studio 2012中使用OpenMP,只要在工程上右擊鼠標,在彈出菜單中選擇“屬性”,在項目屬性窗口中依次選擇“C/C++”、“語言”、“OpenMP 支持”,選擇“是 (/openmp)”(參數為/openmp),就可以讓Microsoft Visual Studio 2012在編譯時支持OpenMP 的語法了;而在編寫使用OpenMP 的程序時,則需要先include OpenMP的頭文件:omp.h。
例子程序:
#include <stdlib.h>
#include <stdio.h>
#define LEN 5000
int main(int argc,char *argv[])
{
int i;
float x=2;
float *arr=(float *)malloc(LEN*sizeof(float));
//用預編譯指令告訴編譯器下面這段代碼在協處理器上運行
#pragma offload target(mic) out(arr:length(LEN))
//用預編譯指令告訴編譯器下面這段代碼並行處理
#pragma omp parallel for
for(i=0; i<LEN; ++i)
{
arr[i] = i*3.0f/x;
}
return 0;
}
看了上面的這些知識點,也就可以大概知道是否可以采用這種技術將代碼移植到Intel Xeon Phi中運行了。熟悉Linux編程嗎?有這些硬件嗎?具備學習MIC編程的能力嗎?能使用VTune分析出程序中耗時最多的函數嗎?如何優化?這需要一個系統的判斷、處理過程。