2012-12-04 39 views
2

我有實現了一個名爲fun功能如下:Matlab的GPU計算:處理矩陣作爲一個單元

function result = fun(number , matrix) 
result = var(mean(matrix) + number); // any processing not that exactly 
end 

使用parallel Computing toolbox我想它在GPU分佈上具有相同的基體的一組數的如下面的代碼:

mat = magic(10); 
numbers = 1:5; 
gMat = gpuArray(mat); 
gNumbers = gpuArray(numbers); 
result = arrayfun(@fun,gNumbers,gMat); // Error here 

這將是偉大的,如果任何人都可以提供這個問題的幫助。

回答

3

在原來的情況下,您可以在GPU上使用MATLAB的BSXFUN。 (編輯後的問題不能這樣處理。)

mat = magic(5); 
numbers = 1:5; 
gMat = gpuArray(mat); 
gNumbers = gpuArray(numbers); 
result = bsxfun(@rdivide, gMat, gNumbers); 

請注意,我用@rdivide,而不是直接調用單獨的函數 - 你不需要做,但它使事情更短。你也可以使用匿名函數,像這樣:

bsxfun(@(x,y) x./y, gMat, gNumbers) 
+0

我不需要師其實我想要做的對數字複雜的處理,這需要處理的矩陣作爲一個共享變量。 –

+1

不幸的是,你現在無法做到這一點。 ARRAYFUN和BSXFUN都要求所有輸入都是兼容的大小(或標量),並且處理是按照元素的方式完成的。 – Edric

+0

我可以在matlab中使用Jacket或GPUMat或任何其他SDK進行GPU計算嗎?否則可以使用Parallel Computing Toolbox? –