【问题标题】:GPU timing in MatlabMatlab中的GPU计时
【发布时间】:2018-08-19 06:43:50
【问题描述】:

我正在使用 GeForce GT 720 在 Matlab 中进行一些基本计算。

我只是在做矩阵乘法:

A = rand(3000,3000);     % Define array using CPU
tic;                     % Start clock
Agpu = gpuArray(A);      % Transfer data to GPU
Bgpu = Agpu*Agpu;        % Perform computation on GPU
time = toc;              % Stop clock

在这段代码中,我的时钟正在计时数据传输到 GPU 和 GPU 上的矩阵乘法,我得到的时间约为 4 秒。我怀疑数据传输比乘法花费的时间要多得多,所以我用计时器将其隔离:

A = rand(3000,3000);     % Define array using CPU
tic;                     % Start clock
Agpu = gpuArray(A);      % Transfer data to GPU
time = toc;              % Stop clock
Bgpu = Agpu*Agpu;        % Perform computation on GPU

确实需要大约 4 秒。但是,如果我注释代码的最后一行,这样就不会进行任何乘法运算,我的代码速度会提高到 ~0.02 秒。

在将数据传输到 GPU 之后使用 GPU 执行计算会改变数据传输的速度吗?

【问题讨论】:

  • 在评论乘法时,我怀疑会产生这个奇怪的结果,因为字节码优化没有看到声明的数组Agpu 没有使用,甚至没有执行传输......这只是一个假设,但我无法验证,因为我的显卡不支持。

标签: matlab performance gpu


【解决方案1】:

我根本看不到这种行为(R2017b,Tesla K20c)——对我来说,无论哪种方式,传输都需要 0.012 秒。请注意,如果您每次都在一个新的 MATLAB 会话中运行它,那么您第一次在 GPU 上运行任何东西都需要几秒钟 - 也许这就是 4 秒?

一般来说,使用gputimeit 在 GPU 上计时,以确保您不会看到某些 GPU 操作的异步性质导致的奇怪结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-12
    • 2019-08-06
    • 1970-01-01
    • 2014-10-10
    • 2015-08-21
    • 2011-09-04
    • 1970-01-01
    • 2014-10-17
    相关资源
    最近更新 更多