我正在使用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
Run Code Online (Sandbox Code Playgroud)
只有CUDA具有竞争力,但我认为至少C++会有点接近并且不会60x慢.
所以我的问题是 - 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 …Run Code Online (Sandbox Code Playgroud) 前言
前段时间我问了一个关于Matlab与Python 性能的问题(性能:Matlab与Python).我很惊讶Matlab比Python更快,特别是在meshgrid.在讨论这个问题时,我指出我应该使用Python中的包装器来调用我的C++代码,因为我也可以使用C++代码.我在C++,Matlab和Python中使用相同的代码.
在这样做时,我再次惊讶地发现Matlab在矩阵汇编和计算中比C++更快.我有一个稍大的代码,我正在研究一段矩阵向量乘法.较大的代码在多个实例处执行这样的乘法.总体而言,C++中的代码比Matlab快得多(因为Matlab中的函数调用具有开销等),但Matlab似乎在矩阵向量乘法(底部的代码片段)中优于C++.
结果
下表显示了组装内核矩阵所需的时间与将矩阵与向量相乘所需的时间的比较.结果汇总为一个矩阵大小NxN,其中N从10,000至40,000变化.哪个不是那么大.但有趣的是,Matlab的表现优于C++ N.Matlab的总时间快3.8到5.8倍.此外,它在矩阵组装和计算中也更快.
___________________________________________
|N=10,000 Assembly Computation Total |
|MATLAB 0.3387 0.031 0.3697 |
|C++ 1.15 0.24 1.4 |
|Times faster 3.8 |
___________________________________________
|N=20,000 Assembly Computation Total |
|MATLAB 1.089 0.0977 1.187 |
|C++ 5.1 1.03 6.13 |
|Times faster 5.2 |
___________________________________________
|N=40,000 Assembly Computation Total |
|MATLAB 4.31 0.348 4.655 |
|C++ 23.25 3.91 27.16 |
|Times faster 5.8 …Run Code Online (Sandbox Code Playgroud)