我目前的任務是使用gpu同時訓練多個網絡。我現在不能這樣做,所以現在我嘗試用數組做一些操作。爲什麼repmat和reshape在Matlab中gpuArray這麼慢?
a = rand(1000, 1000, 'gpuArray');
tic; for i = 1 : 100 a .* a; end; toc; % line 1
tic; for i = 1 : 100 repmat(a, 3, 10); end; toc; % line 2
tic; for i = 1 : 100 reshape(a, 10, 10000); end; toc; % line 3
b = rand(1000, 1000);
tic; for i = 1 : 100 b .* b; end; toc; % line 4
tic; for i = 1 : 100 repmat(b, 3, 10); end; toc; % line 5
tic; for i = 1 : 100 reshape(b, 10, 10000); end; toc; % line 6
所以line 1
falser比line 4
但比line 5
和 line 3
慢於line 6
並與另一尺寸可以比CPU比GPU快看到repmat
和reshape
其他許多陣列慢 line 2
。 有人可以解釋我應該怎麼做才能獲得預期的加速度?
不要修改GPU上的數據。獲取數據到GPU(並修改它)是使用GPU的兩個最慢的部分。 – Suever
那麼,我應該做什麼,而不是'reshape'和'repmat'? – user7484269
你應該用'reshape'和'repmat'在本地創建你的數據,然後*然後*將它作爲'gpuArray'在它的設置大小後強制轉換 – Suever