我做了两个实验,涉及 Matlab、神经网络和两台非常不同的 PC。第二个(更好),有两个 CUDA GPU 卡,所以我预计它的速度会高很多,但与第一台 PC 完成相同任务的时间是 8 倍以上的时间相矛盾。我想知道我在哪里做错了。我想知道如何利用这 2 块 CUDA GPU 卡,因为如果我不能,那我就浪费了我在那台计算机上投资的钱。我怎样才能修改第二个代码更快?我使用的Matlab版本是:R2013a。下面有两个可以这样运行的代码,因为它们使用 Matlab 内置数据集:house_dataset。
非常感谢您的帮助!
电脑1:
规格:
笔记本电脑。Intel(R) Core(TM) i5-2430M CPU @ 2.40GHZ(4 核)。内存:4GB
操作系统:Window 7
脚本:test_script_NO_gpu_cuda
clear all;
countTests = 200;
performances = zeros(1, countTests);
[x, t] = house_dataset;
tStart = tic;
for i = 1 : countTests,
net = fitnet(10);
net.trainFcn = 'trainscg';
net.trainParam.showWindow = false;
net = train(net, x, t, 'useParallel', 'yes', 'useGPU', 'only');
y = net(x);
per = perform(net, t, y);
performances(i) = per;
end
elapsedTime = toc(tStart);
display(sprintf('Average performance: %.1f', mean(performances)));
display(sprintf('Elapsed time: %.1f seconds', elapsedTime));
>> test_script_NO_gpu_cuda
平均性能:17.4
经过时间:47.8 秒
电脑2:
规格:
台式电脑。两个相同类型的 GPU:NVIDIA Tesla™ M2050(每个 448 个 cuda 核心)。内存:22 GB 操作系统:Ubuntu 12.04 LTS
脚本:test_script_YES_gpu_cuda
clear all;
matlabpool open
countTests = 200;
performances = zeros(1, countTests);
[x, t] = house_dataset;
tStart = tic;
for i = 1 : countTests,
net = fitnet(10);
net.trainFcn = 'trainscg';
net.trainParam.showWindow = false;
net = train(net, x, t, 'useParallel', 'yes', 'useGPU', 'only');
y = net(x);
per = perform(net, t, y);
performances(i) = per;
end
elapsedTime = toc(tStart);
matlabpool close
display(sprintf('Average performance: %.1f', mean(performances)));
display(sprintf('Elapsed time: %.1f seconds', elapsedTime));
>> test_script_YES_gpu_cuda
使用“本地”配置文件启动 matlabpool ...连接到 8 个工作人员。
向所有工人发出停止信号……停止了。
平均性能:18.7
经过时间:373.9 秒