1
與this question類似,我試圖在GPU上運行的cellfun線程之間共享一個矩陣。我可以在GPU上的cellfun線程之間共享內存嗎?
由於GPU執行不支持全局變量,因此我想我可以通過引用共享矩陣來定義一個句柄類對象數組,因此句柄將傳遞給每個cellfun實例。
classdef VarByRefContainer < handle
properties
val = [];
end
end
handle = VarByRefContainer;
handle.val = SharedMatrix;
cellfun(@myfun, {handle, handle, handle});
Matlab的似乎接受了這一點,但仍然存在着幾個問題:
- 這安全嗎?即如果我同時爲元素[1,3,5]和[2,4]賦值,那麼作業是否有可能發生衝突?
- 這是高效的嗎?即處理程序類可能存儲在主機上,引用GPU上的內存可能是一項耗時的操作。我想避免這種情況。
聲好!這將既安全又高效? –
它是安全的,因爲您不能修改上一級變量。通常很難說它是否有效 - 取決於您以這種方式訪問的數據量。 – Edric
關鍵是我需要修改升級變量...我只是在Matlab中試過這個,它似乎工作 - 它並不妨礙我改變升級變量。在CPU上測試,尚未在GPU上測試。 –