我正在使用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) 例如,在循环中:
for i=1:10,
% do something...
end
Run Code Online (Sandbox Code Playgroud)
作为矩阵的索引:
mat( i, j ) = 4;
Run Code Online (Sandbox Code Playgroud)
为什么不应该他们作为在Matlab的变量名?
我们习惯于在Matlab中使用不同形式的索引:
乍一看,似乎这些形式是独占的:索引是标准的,逻辑的或线性的.然而,有时似乎在这些形式中的几种之间存在混合.例如,
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> A(A>5)
ans =
8
9
6
7
Run Code Online (Sandbox Code Playgroud)
这是合乎逻辑的索引,对吧?但它也具有线性索引的一些功能,因为返回了列向量.实际上,逻辑索引A>5与线性索引具有相同的效果find(A>5).
作为第二个例子,考虑一下
>> A = magic(3)
A =
8 1 6
3 5 7
4 9 2
>> A(1:2, [true false true])
ans =
8 6
3 7
Run Code Online (Sandbox Code Playgroud)
在此表达式中,标准(整数值)索引用于第一个坐标,逻辑索引用于第二个坐标.
这些例子(以及在实践中出现的更复杂的例子)提出了以下问题: