我当前的任务是使用GPU同时训练多个网络。由于现在无法完成此任务,因此我尝试对数组进行一些操作。
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
比line 4
慢,但line 2
比line 5
慢,并且line 3
比line 6
慢。对于许多其他大小的数组,可以看到CPU在repmat
和reshape
方面比GPU更快。有人能解释一下我应该怎么做才能获得预期的加速吗?
reshape
和repmat
在本地创建数据,然后在其大小被设置后将其转换为gpuArray
。 - Suevera1 = zeros(3 * size(a, 1), 10 * size(a, 2), 'gpuArray')
。那么复制数据的最快方式是什么?对于重塑后的数组,同样的问题也存在。 - user7484269