GPU的利用和并行计算用Matlab进行繁重的计算

20ビュ(過去30日間)
我有一个体面/ok的机器,核心i7(8核),32G RAM和Nvidia geForce GTX 1080i,并运行Matlab 2018b。目前,我有点困惑如何以最好的方式使用这些资源来运行我的蒙特卡罗模拟代码。我现在有两个问题:
1-我如何让所有繁重的计算都在GPU上运行,而不是在CPU上运行并行计算能力的Matlab,因此我可以决定最好使用什么?我读过不同的帮助主题,我认为我得到的结论是,我必须处理的数据应该是gpuArray的形式,我是对的吗?还是我漏掉了什么?让我们假设我有以下简单的代码在GPU上运行:
First_Vector = 0(2、3);
% First_Vector = 0(2、3、“gpuArray”);1
[N M] =大小(First_Vector);
% [N M] =大小(First_Vector gpuArray”);2
Second_Matrix = 1 (N, M, 2);
% Second_Matrix = 1 (N, M 2 ' gpuArray ');3.
Tset1= [20 20 20:30 30 30];
% Tset1gpuArray = gpuArray (Tset1);4
Test2= [50 50 50;60 60 60];
% Tset2 = gpuArray (Tset2);5
K = 100;
%主代码
i = 1:3
j = 1:3
(元素)= Function1(测试(i, j), K)
Test1 (i, j) =元素;
结束
结束
Second_Matrix (:,: 1) = Test1;
[Test1] = Function2 (Test1, Test2);
主代码结束
功能1
函数[结果]= Function1 (K)
结果= A + K;
结束
% %功能2
函数(T1) = Function2 (T1, T2)
T1 = T1 + T2;
结束
注释行(1-5)是否足以在GPU上运行“主代码”?
2-我已经在GPU和CPU上测试了下面的简单代码,CPU的性能比GPU好得多。这是正常的吗?
提前谢谢你。
G = ones(10,10,“gpuArray”);
抽搐
k = 1:10 0
i = 1: 1000
j = 1:10
: G (j) = G (j:) + 2;
结束
结束
结束
toc
G = ones(10,10);
抽搐
k = 1:10 0
i = 1: 1000
j = 1:10
: G (j) = G (j:) + 2;
结束
结束
结束
toc
%运行时间为0.628241秒。

採用された回答

安德里亚Picciau
安德里亚Picciau 2019 年 7 月 3 日
編集済み:安德里亚Picciau 2019 年 7 月 3 日
我会尽量按顺序回答你的问题……
  1. 是的!这不是很棒吗?
  2. 是的,因为你的代码有两个问题:(a)你使用了大量的for循环而不是向量运算;(b)你对GPU性能的测量不正确。要解决(a),你应该阅读此文档页解释了如何向量化代码以获得最佳性能.要解决(b),你应该看一下我对上一个问题的回答使用函数时间而且gputimeit
3件のコメント
凯撒
凯撒 2019 年 7 月 9 日
再次感谢 安德里亚Picciau .你的例子对我来说是如此详尽和清楚。正如我之前提到的,我认为我没有办法对我的代码进行verctoris,特别是当它非常复杂并且包括迭代方式调用不同的函数时。
现在令人讨厌的事情是我不能利用我所拥有的资源(强大的PC和集群)到最大。
问候

サ▪▪ン▪▪ンしてコメントする。

その他の回答(0件)

カテゴリ

了解更多MATLAB中的GPU计算帮助中心而且文件交换

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!

翻译的