我做了两个涉及Matlab,神经网络和两个非常不同的PC的实验。第二个(更好的),有两个CUDA GPU卡,所以我预计它的速度会更高,但与第一台PC完成相同任务的时间相差8倍。我想知道我在哪里犯了错误。我想知道如何利用这2块CUDA GPU卡,因为如果我不能,那么我就浪费了我投入电脑的钱。如何修改第二个代码更快?我使用的Matlab版本是:R2013a。下面有两个代码可以像这样运行,因为它们使用Matlab内置数据集:house_dataset。
非常感谢你的帮助!
计算机1:
规格:
笔记本电脑。英特尔(R)酷睿(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核心)。 RAM: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秒