2017-08-17 50 views
1

我有一個例程,設計爲在三種處理模式中的任何一種下調用; SingleCpuThread,ParallelCpuThreads和ParallelGpuThreads。當在Cpu上處理例程時使用Alea Gpu DeviceFunction

在例程中,使用Alea.DeviceFunction執行數學運算,以便在ParallelGpuProcessing模式下調用該例程時符合Alea。

問題:當在其他兩種模式下調用相同的例程,並且正在使用DeviceFunction執行數學運算時,是否使用Gpu並導致開銷和封送處理等?如果是這樣(這會很糟糕),讓同樣的例程使用dotnet的.Math函數而不是.DeviceFunction的最好方法是什麼,而不需要將整個例程複製爲單獨的Cpu-happy和例程的Gpu-happy版本?

回答

1

正如設備功能所說的那樣,功能在GPU上運行,假設所有數據在那裏。因此不存在編組開銷。

爲了簡化CPU/GPU代碼重用,大多數設備功能都可以在CPU上運行。但是一些設備功能在CPU上沒有意義,例如選票功能。這意味着你可以使用設備功能,然後你就會知道Alea GPU將在GPU上最快。編譯器還將一些.NET數學函數自動映射到GPU設備函數。

+0

感謝您的回覆。如果我理解正確,那麼...... 當應用程序在ParallelGpuThreads(我的枚舉)的處理模式下運行時,那麼我的數據位於Gpu上,並且DeviceFunctions正在Gpu上執行,並且沒有問題。但是,當應用程序在SingleCpuThread,ParallelCpuThreads(我的枚舉)處理模式下運行時,則我的數據位於Cpu上,並且DeviceFunctions可能正在或未正在Gpu上執行,因爲這可能是也可能不是問題,因爲這將需要數據不必要地彙集到Gpu(性能受到影響)。 – cayman

+0

由於DeviceFunctions是否可以在Cpu上進行確定是逐個函數,有沒有這方面的任何文檔或是否有任何其他方法可以確定? 我的程序正在使用的DeviceFunctions是... - DeviceFunction.IsNaN - DeviceFunction.Log10 - DeviceFunction.Sqrt - DeviceFunction.Abs – cayman