相关疑难解决方法(0)

C中的优化矩阵乘法

我正在尝试比较矩阵乘法的不同方法.第一个是常规方法:

do
{
    for (j = 0; j < i; j++)
    {
        for (k = 0; k < i; k++)
        {
            suma = 0;
            for (l = 0; l < i; l++)
                suma += MatrixA[j][l]*MatrixB[l][k];
                MatrixR[j][k] = suma;
            }
        }
    }
    c++;
} while (c<iteraciones);
Run Code Online (Sandbox Code Playgroud)

第二个包括首先转置矩阵B然后按行进行乘法运算:

int f, co;
for (f = 0; f < i; f++) {
    for ( co = 0; co < i; co++) {
        MatrixB[f][co] = MatrixB[co][f];
    }
}

c = 0;
do
{
    for (j …
Run Code Online (Sandbox Code Playgroud)

c matrix

22
推荐指数
5
解决办法
5万
查看次数

如何加速C++中的矩阵乘法?

我用这个简单的算法进行矩阵乘法.为了更灵活,我使用了包含动态创建数组的matricies对象.

将此解决方案与我的第一个解决方案与静态数组进行比较,速度慢了4倍.我该怎么做才能加快数据访问速度?我不想改变算法.

 matrix mult_std(matrix a, matrix b) {
 matrix c(a.dim(), false, false);
 for (int i = 0; i < a.dim(); i++)
  for (int j = 0; j < a.dim(); j++) {
   int sum = 0;
   for (int k = 0; k < a.dim(); k++)
    sum += a(i,k) * b(k,j);
   c(i,j) = sum;
  }

 return c;
}
Run Code Online (Sandbox Code Playgroud)


编辑
我纠正了我的问题!我在下面添加了完整的源代码并尝试了一些建议:

  • 交换kj循环迭代 - >性能改进
  • 声明dim()operator()() 作为inline- >性能改进
  • 通过const引用传递参数 - > 性能损失!为什么?所以我不使用它.

现在的表现与现在的表现几乎相同.也许应该有一点改进. …

c++ arrays benchmarking matrix-multiplication

17
推荐指数
3
解决办法
2万
查看次数

标签 统计

arrays ×1

benchmarking ×1

c ×1

c++ ×1

matrix ×1

matrix-multiplication ×1