2016年2月16日 星期二

Matlab同時使用多核CPU和多張GPU加速

CPU的Multi-thread用法類似

p = gcp();
for i = 1 : iter
    f(i) = parfeval(p, @myFunc, ...);
end
for i = 1 : iter
    fetchNext(f);
end

而GPU則只需將陣列使用gpuArray宣告即可。但因為要使用多GPU,因此先使用

nGPU = gpuDeviceCount;

得到GPU的個數,然後呼叫數學函數前記得先用gpuDevice()選擇要用哪張GPU

gpuDevice(GPU_index) % 1 <= GPU_index <= nGPU
math_func(...)
...

搭配前面的CPU multi-thread即可同時使用多張GPU運算。


注意事項:
    使用Multi-thread CPU + Multi-GPU時,記得[1]要自己安排讓#(nGPU)個函式用CPU+GPU執行,[2]剩下#(nCPU-nGPU)個只使用CPU單獨。[1]可避免太容易出現GPU out of memory,[2]可增加效能。

2016年2月14日 星期日

mac上使用multi-thread(OpenMP)

OpenMP是常見的multi-thread library,他有不同的實作。而Mac使用的compiler有gcc或clang,因此OpenMP也有相對應的實作。

參考:
gcc: https://gcc.gnu.org/projects/gomp/
clang: http://clang-omp.github.io/