2011-12-09 59 views
2

我是GPU編程的新手,我沒有顯卡的筆記本電腦,我想在intel openCL上開發一個矩陣乘法程序,並使用MPI實現此應用程序..如何在單個cpu機器上使用MPI實現openCL程序

任何指南和有用的鏈接可以發佈。

我對MPI的東西感到困惑,是否需要爲MPI編寫代碼,還是必須使用一些開發的MPI來運行我們的應用程序?

這是我所想要做的

GPU集羣計算(C++,OpenCL和MPI)項目建議書

  • 研究MPI分發問題

  • 實現OpenCL的應用(矩陣乘法/ 2D圖像處理)

  • 使用MPI實現應用程序(例如大2 d圖像處理)

+1

所以...你想實現一些使用MPI和OpenCL的並行算法。您爲應用程序設定了什麼目標?你想比較MPI和OpenCL的性能嗎? – Yappie

+0

不要爲Intel CPU實現矩陣乘法。下載並使用ATLAS,OpenBLAS(以前稱爲GotoBLAS),BLIS或Intel MKL並致電DGEMM。 BLAS就像Linux一樣,它是每個人都可以使用的東西,但很少可以正常開發。 – Jeff

回答

2

簡化:

MPI是用於通信proccesses庫,而且還用於在集羣中運行應用程序的平臺。您編寫使用MPI庫的程序,然後應該使用MPI執行該程序。 MPI將該應用程序在集羣中分叉N次,並允許與消息通信該應用程序實例。

使這些實例(如果它們是相同或不同的工作人員)以及拓撲由您決定的任務。

我認爲3分的方式使用(OpenCL和MPI):

  1. MPI啓動(K + 1)的情況下,一個主和K從站。主站將數據分成塊並且從站使用OpenCL處理GPUS中的數據。所有的奴隸都是一樣的。
  2. MPI啓動(k + 1)個實例,一個主控和k個從屬。每個從機計算一個專門的問題(從機1矩陣乘法,從機2塊壓縮,等等),主機將數據指向工作流類型的任務。
  3. MPI啓動(k + 1)個實例,一個主控和k個從屬。與情況1相同,但主設備也向從設備發送OpenCL程序以處理數據。
+0

我可以在intel core i5 cpu上運行MPI程序嗎? – star

+0

MPI是一個標準,當然你可以使用它,但你需要選擇一個實現,像OpenMPI – Zhen

8

所以需要理解的是,MPI和OpenCL爲您的目的是完全正交的。 MPI用於在GPU節點之間進行通信; OpenCL用於通過使用GPU(或多個CPU內核)在單個節點上加速本地計算。對於任何這些問題,你首先要編寫一個串行C++版本的代碼。下一步將是(以任何順序)在單個節點的OpenCL實現上工作,並且在分解問題的MPI版本上工作(您的不需要希望用戶主從 - 對於上面列出的任何一個問題)到多個進程上,每個進程執行他們的本地部分計算,從而爲全局解決方案做出貢獻。一旦完成了這兩個部分,您就可以合併這兩部分,並且有一個代碼的分佈式內存(MPI部分)GPU(OpenCL部分)版本來解決此問題。

當然,這並不是那麼容易,將兩者結合起來需要一點點的工作,但這是記住的基本方法。從一個問題開始,讓它在C++中的單個處理器上工作,然後嘗試使用其中一個或另一個。不要試圖一次做所有事情,否則你永遠無法獲得任何東西。

對於像矩陣乘法這樣的問題,在GPU和MPI實現的互聯網上有許多例子可以學習。

+0

非常感謝:)任何鏈接學習這些東西的基本知識將是有益的 – star

+0

MPI標籤下的FAQ有一些鏈接MPI資源;我(當然)喜歡我們在我們中心教授的教程(https://support.scinet.utoronto.ca/wiki/index.php/Knowledge_Base:_Tutorials_and_Manuals#Parallel_Programming),但那裏有很多。對於OpenCL,我喜歡這個教程(https://www.marcusbannerman.co.uk/index.php/research/teaching-resources/77-supercomputing-on-graphics-cards-an-introduction-to-opencl-and- the-c-bindings.html),但又有一百萬種可供選擇。幾乎所有OpenCL/CUDA教程都將以矩陣乘法爲例。 –

+0

根據我的項目需求的變化,我現在正在進行中值濾波,不過基本代碼中值濾波器與比特異常排序是可用的,這是有風險的,因爲我必須稍後擴展代碼, – star

相關問題