2011-04-08 46 views
3

我試圖向同事展示我可以用OpenCL做的事情,但執行不會在她的計算機上運行。一些libopencl.so(或類似)文件丟失(即她沒有安裝OpenCL)。所以我可能相當基本(Linux)的問題是,我如何包含所有必要的so文件,我的小C + OpenCL程序也將運行在沒有OpenCL的機器上?如何包含OpenCL庫以生成獨立應用程序?

+2

可能沒有辦法做到這一點,至少不是以遠程便攜或可靠的方式。目標系統必須安裝正確的OpenCL,因爲OpenCL可以運行在多種不同的硬件組件上(並且也是異構的)。它不足以複製_some library_。通常,OpenCL作爲帶有顯示驅動程序的「獎金安裝」。如果情況並非如此,作爲最後手段,您的朋友可以安裝AMD免費提供的x86軟件實現(搜索流SDK)。 – Damon 2011-04-08 10:50:41

回答

2

正如Damon的評論已經指出的那樣,這是不可能的,因爲每種設備都有自己的供應商,並且該供應商擁有自己的OpenCL實現。但是,如果您想要做的只是簡單地將OpenCL應用程序的「便攜」副本在大多數Linux計算機上運行,​​那麼就有辦法實現這一點。

  1. 下載AMD APP SDK(當前版本2.4)。我將假設它的64位版本,但對於32位或其他版本號應該幾乎相同,只需更改相應的字符串即可。

  2. 將SDK解壓縮到應用程序可執行文件的子目錄中。例如,如果應用程序位於$ HOME/myapp中,那麼SDK文件應該位於$ HOME/myapp/AMD-APP-SDK-v2.4-lnx64中。

  3. 將ICD文件從icd-registration.tgz存檔解壓縮到名爲icd的文件夾中。所以我們應該有$ HOME/myapp/AMD-APP-SDK-v2.4-lnx64/icd/amdocl32.icd(和amdocl64.icd)。

現在我們有一個可移植安裝AMD APP SDK的工作,它可以在大多數x86處理器上工作。我們只需要在啓動應用程序之前設置適當的環境變量。由於我不是一個GNU/Linux的人,也不知道bash很好,所以我已經對我們的便攜式目錄進行了硬編碼。據推測,它可以自動獲得當前位置,這顯然會更好。

#!/bin/bash 
DIRECTORY=$HOME/myapp 
export OPENCL_VENDOR_PATH=$DIRECTORY/AMD-APP-SDK-v2.4-lnx64/icd 
export AMDAPPSDKROOT=$DIRECTORY/AMD-APP-SDK-v2.4-lnx64 
export LD_LIBRARY_PATH=$AMDAPPSDKROOT/lib/x86_64:$LD_LIBRARY_PATH 
./myapp 

上述腳本應放置在應用程序的根目錄中,即$ HOME/myapp/scriptname。因此,我們可以通過執行./scriptname來啓動便攜式應用程序。正如我所說,因爲我不知道bash很好,上面的腳本當然可以更好,處理程序的參數並自動找出腳本的位置。但它應該顯示如何做到這一點的總體思路。

+0

嗨Quantumboredom,感謝您付出的努力。我在NVIDIA上開發,但我會嘗試將您的步驟調整到NVIDIA SDK。 – Framester 2011-04-08 17:00:58

+1

我沒有Nvidia卡,但是AFAIK Nvidia將CUDA/OpenCL運行時組件與他們的驅動程序捆綁在一起,並且由於必須安裝Nvidia的驅動程序才能在Nvidia GPU上運行OpenCL,因此無法進行此操作。如果您希望應用程序在Nvidia GPU上運行,那麼Nvidia的驅動程序必須正常安裝。然而,使用Nvidia的OpenCL SDK開發和編譯的OpenCL應用程序應該像我描述的那樣在便攜式解決方案上運行(但顯然使用CPU來代替)。 – Quantumboredom 2011-04-08 17:22:32

相關問題