gpt4 book ai didi

c - 使用 OpenMP 和 block 方法加速矩阵乘法 : Can I Do Better?

转载 作者:太空狗 更新时间:2023-10-29 17:24:11 24 4
gpt4 key购买 nike

这是我写的代码:

#include <omp.h>
void matrix_multi(int c[][TSIZE], int a[][TSIZE], int b[][TSIZE])
{
int B=8;

int i, j, k,i1,j1,k1;
#pragma omp parallel for private(i,j,k,i1,j1,k1) schedule(auto) collapse(3)
for (i=0; i<TSIZE; i+=B)
for (j=0; j<TSIZE; j+=B)
for (k=0; k<TSIZE; k+=B)
for (i1=i;i1<i+B;i1++)
for (j1=j;j1<j+B;j1++)
{
int sum=0;
for (k1=k;k1<k+B;k1++)
{
sum+=a[i1][k1]*b[k1][j1];
}
c[i1][j1]+=sum;
}

}

我的问题是:我能否通过对三个内部循环进行一些进一步操作来获得更好的性能?

最佳答案

线性代数是计算机执行的最常见的运算之一。在游戏和图形库中,这是最常见的操作。它已经过大量研究和优化,整个研究小组都致力于它。

如果您关心速度,则应该使用 BLAS 执行矩阵乘法图书馆。 BLAS 库将优化的一些内容:

  • 通过在 block 中执行矩阵乘法而不是遍历整个矩阵来最大限度地减少缓存未命中
  • 针对计算机的缓存大小优化 block 大小
  • 如果计算机/CPU 有多个缓存级别,请使用多个优化的 block 大小级别
  • 使用SIMD CPU 上可用的指令

请注意,并行化不在列表中。这是因为在今天的计算机中,内存访问比 CPU 慢。由于上下文切换的开销,您将看到 openmp 的性能更差

关于c - 使用 OpenMP 和 block 方法加速矩阵乘法 : Can I Do Better?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37291093/

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