我試圖向同事展示我可以用OpenCL做的事情,但執行不會在她的計算機上運行。一些libopencl.so
(或類似)文件丟失(即她沒有安裝OpenCL)。所以我可能相當基本(Linux)的問題是,我如何包含所有必要的so
文件,我的小C
+ OpenCL
程序也將運行在沒有OpenCL的機器上?如何包含OpenCL庫以生成獨立應用程序?
回答
正如Damon的評論已經指出的那樣,這是不可能的,因爲每種設備都有自己的供應商,並且該供應商擁有自己的OpenCL實現。但是,如果您想要做的只是簡單地將OpenCL應用程序的「便攜」副本在大多數Linux計算機上運行,那麼就有辦法實現這一點。
下載AMD APP SDK(當前版本2.4)。我將假設它的64位版本,但對於32位或其他版本號應該幾乎相同,只需更改相應的字符串即可。
將SDK解壓縮到應用程序可執行文件的子目錄中。例如,如果應用程序位於$ HOME/myapp中,那麼SDK文件應該位於$ HOME/myapp/AMD-APP-SDK-v2.4-lnx64中。
將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很好,上面的腳本當然可以更好,處理程序的參數並自動找出腳本的位置。但它應該顯示如何做到這一點的總體思路。
嗨Quantumboredom,感謝您付出的努力。我在NVIDIA上開發,但我會嘗試將您的步驟調整到NVIDIA SDK。 – Framester 2011-04-08 17:00:58
我沒有Nvidia卡,但是AFAIK Nvidia將CUDA/OpenCL運行時組件與他們的驅動程序捆綁在一起,並且由於必須安裝Nvidia的驅動程序才能在Nvidia GPU上運行OpenCL,因此無法進行此操作。如果您希望應用程序在Nvidia GPU上運行,那麼Nvidia的驅動程序必須正常安裝。然而,使用Nvidia的OpenCL SDK開發和編譯的OpenCL應用程序應該像我描述的那樣在便攜式解決方案上運行(但顯然使用CPU來代替)。 – Quantumboredom 2011-04-08 17:22:32
- 1. Maven:如何生成獨立應用程序?
- 2. 如何編寫應用程序以獨立於數據庫?
- 3. Qt獨立應用程序不生成輸出文件
- 4. 如何爲獨立應用程序調用存儲庫方法?
- 5. 如何區分Web應用程序或獨立應用程序?
- 6. 獨立Python應用程序
- 7. 獨立Web應用程序
- 8. 獨立.NET應用程序
- 9. C++獨立應用程序
- 10. PostgreSQL獨立應用程序
- 11. 獨立PHP應用程序
- 12. PHP獨立應用程序
- 13. 如何打包獨立的xulrunner應用程序
- 14. 如何製作VS.NET中的獨立應用程序包?
- 15. 如何將Scrapy腳本打包到獨立應用程序中?
- 16. Birt:如何在獨立Java應用程序中從rtpdesign文件生成PDF
- 17. 使用GNU編譯器生成獨立MEX文件,包括庫
- 18. 如何製作獨立的數據庫應用程序?
- 19. 如何生成「自包含」靜態庫?
- 20. 獨立反應應用程序中的Web API調用生成CORS錯誤
- 21. 如何從Java執行完全獨立的應用程序。像獨立進程
- 22. Android:獨立線程與獨立應用程序
- 23. 在python應用程序中包含庫
- 24. 如何在Wicket應用程序中生成獨特的鏈接?
- 25. 在py2app生成的應用程序中包含opencv
- 26. 在應用程序生成的圖像中包含字幕
- 27. 是否可以從另一款iPhone/iPad獨立應用程序啓動iPhone/iPad獨立應用程序?
- 28. 如何從獨立的* .java源文件生成包結構?
- 29. PAR包裝器可以生成獨立的腳本嗎?
- 30. 如何包含在ASP.NET應用程序
可能沒有辦法做到這一點,至少不是以遠程便攜或可靠的方式。目標系統必須安裝正確的OpenCL,因爲OpenCL可以運行在多種不同的硬件組件上(並且也是異構的)。它不足以複製_some library_。通常,OpenCL作爲帶有顯示驅動程序的「獎金安裝」。如果情況並非如此,作爲最後手段,您的朋友可以安裝AMD免費提供的x86軟件實現(搜索流SDK)。 – Damon 2011-04-08 10:50:41