2011-01-31 18 views
4

Hey all, 我目前正在將FORTRAN 77的光線追蹤器移植到C進行研究項目。在編寫openCL代碼時,它如何在沒有GPU的單核機器上執行?

移植基本要素後,問題是我們如何進行並行化。
在實驗室中,我可以訪問兩個不同的Opteron機器,其中有2到8個內核,但沒有GPU(現在)。 我們正在運行64b gentoo。

一個GPGPU版本將是(非常)可取的,但只有一個程序員在項目上,保持單獨的非GPU和GPU版本不是一種選擇。
此外,該代碼將被GPLed,我們希望看到它被其他可能具有巨大不同硬件的其他人使用。

因此,整個程序必須易於編譯/運行,無需GPU或甚至多核系統。
OpenCl似乎是一個不錯的選擇,因爲它可以在沒有GPU的機器上運行,但是這個代碼在單核或32b系統上將如何執行?
是否可以編寫代碼,以便在沒有openCL的情況下輕鬆進行編譯?

回答

8

目前主要有四個方面的OpenCL實現:AMD,NVIDIA(Cuda的),蘋果,英特爾還有更多的會很快可能是:OpenCL implementations。 OpenCL不是專門針對GPU計算的語言,它被設計爲異構設備的通用計算語言。例如。即使沒有GPU和任何非AMD CPU(當然是x86),也可以使用AMD實現。

是否有可能以不使用openCL編譯代碼的方式編寫代碼?

正如你所說這是一個人的項目,我懷疑這將是值得的努力。

此代碼如何在單核或32b系統上執行?

和任何本地程序一樣好。您可以通過OpenCL矢量類型訪問SIMD。你可以通過工作組配置來處理線程。

但是,不要指望您可以在具有相同內核/工作組設置的每臺設備中獲得100%的性能。有很多設備特定的調整可能(OpenCL CPU Tutorial for a start)。

我想說的是OpenCL。它爲您的應用程序提供更多的可能性,並且它是平臺獨立的。

+0

好的,這有幫助。謝謝。 – 2011-01-31 13:36:37

2

利用OpenCL和C99的通用性並使用預處理器來處理差異可能是可行的。然後,你將有一個C99和OpenCL代碼庫。這是採取的方法SmallPT-GPU

但是,CPU的OpenCL實現應該與任何便攜式標量C代碼差不多,而且如果您使用OpenCL的向量類型來允許便攜式SIMD,則更好。

+0

聽起來不錯。我會更詳細地檢查SmallPT-GPU,看看它是如何工作的 - 感謝! – 2011-01-31 16:57:39

相關問題