2010年3月28日 星期日

Multi-Core & Multi-Thread

 Multi-Core & Multi-Thread 是最近在做的一項工程, 本來是想全部自己寫, 不過後來覺得在某些地方似乎可以使用現成的就好, 然後自己在上層包一個應用層 API, 至於底層則想到了 OpenCL, 其它方法也是有想過, 如 OpenML 則不考慮, 因為並不適合, 而 nVidia 的 CUDA 只適合使用在 nVidia 的 GPU 上, 所以也不考慮.

 決定使用 OpenCL 之後就開始研究它, 但是目前 OpenCL 似乎支援度還不足, nVidia 的 OpenCL Lib 只支援 GPU. AMD 的 ATI 的 ATI Stream SDK 支援 CPU + GPU (可能只有 AMD CPU, 我還沒有去確認). Intel 似乎也有支援 OpenCL, 但是我找不到相關的 Library 可以使用, 而 Microsoft 似乎是想搞自己的 Compute Shaders 來推升 GPGPU 的應用.

 想了很久, 最後做了最折衷的方法, CPU 的部份自己寫, 也許功能沒有 OpenCL 來的完整與強憾, 不過功能只要適合自己使用就好, 如果有其它需求再加強即可, 至於 GPU 的部份統一使用 OpenCL. 目前在 CPU 上已完成一些初步的功能, 可以設定哪些 Core 使用幾個 Thread, 在應用上也可以設定 Task 允許在哪些 Core 上跑, 並且在底層實現了 TaskManager 物件化的構想, 這些只是最基本的功能, 完整的 TaskManager 功能還是有一段距離.

在這最基本的 TaskManager 上做了個小實驗, 結果如下圖所示 :