gpt4 book ai didi

performance - 为什么 MATLAB 在矩阵乘法中如此之快?

转载 作者:太空宇宙 更新时间:2023-11-03 19:05:00 25 4
gpt4 key购买 nike

我正在使用 CUDA、C++、C#、Java 进行一些基准测试,并使用 MATLAB 进行验证和矩阵生成。当我用 MATLAB 执行矩阵乘法时,2048x2048甚至更大的矩阵几乎立即相乘。

             1024x1024   2048x2048   4096x4096
--------- --------- ---------
CUDA C (ms) 43.11 391.05 3407.99
C++ (ms) 6137.10 64369.29 551390.93
C# (ms) 10509.00 300684.00 2527250.00
Java (ms) 9149.90 92562.28 838357.94
MATLAB (ms) 75.01 423.10 3133.90
只有 CUDA 具有竞争力,但我认为至少 C++ 会有些接近,而不是慢 60 倍。我也不知道如何看待 C# 结果。算法和C++和Java一样,但是有一个巨大的飞跃 2048来自 1024 .
MATLAB 如何如此快速地执行矩阵乘法?
C++代码:
float temp = 0;
timer.start();
for(int j = 0; j < rozmer; j++)
{
for (int k = 0; k < rozmer; k++)
{
temp = 0;
for (int m = 0; m < rozmer; m++)
{
temp = temp + matice1[j][m] * matice2[m][k];
}
matice3[j][k] = temp;
}
}
timer.stop();

最佳答案

这是我使用 MATLAB R2011a + Parallel Computing Toolbox 的结果在装有 Tesla C2070 的机器上:

>> A = rand(1024); gA = gpuArray(A);
% warm up by executing the operations a couple of times, and then:
>> tic, C = A * A; toc
Elapsed time is 0.075396 seconds.
>> tic, gC = gA * gA; toc
Elapsed time is 0.008621 seconds.

MATLAB 使用高度优化的库进行矩阵乘法,这就是普通 MATLAB 矩阵乘法如此之快的原因。 gpuArray版本使用 MAGMA .

使用 R2014a 更新 在一台装有 Tesla K20c 的机器上,以及新的 timeitgputimeit功能:
>> A = rand(1024); gA = gpuArray(A);
>> timeit(@()A*A)
ans =
0.0324
>> gputimeit(@()gA*gA)
ans =
0.0022

使用 R2018b 更新 在具有 16 个物理内核和 Tesla V100 的 WIN64 机器上:
>> timeit(@()A*A)
ans =
0.0229
>> gputimeit(@()gA*gA)
ans =
4.8019e-04

(注意:在某些时候(我忘了确切的时间) gpuArray 从 MAGMA 切换到 cuBLAS - 不过 MAGMA 仍然用于某些 gpuArray 操作)

关于performance - 为什么 MATLAB 在矩阵乘法中如此之快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6058139/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com