如何更改此C代码以预取一些数据?

如何更改此C代码以预取一些数据?,c,loops,matrix,openmp,prefetch,C,Loops,Matrix,Openmp,Prefetch,我做了一个检查矩阵效率的应用程序。我使用各种方法(例如更改循环、2/3循环、openmp等)。还有一件事:我必须检查数据预取 代码: #定义尺寸5000 对于(int i=0;i您可以使用预回迁内置函数: void _m_预取(void*) 您希望至少提前128个字节进行预取。您可能需要展开循环,以便它在每次预取之间完成正确的工作量,否则将浪费实际预取指令的时钟周期 然而,我怀疑处理器本身能够完成相当好的预取工作,因为您正在“直接”读取内存[假设tab是二维编译时数组,而不是运行时构建的数组]。

我做了一个检查矩阵效率的应用程序。我使用各种方法(例如更改循环、2/3循环、openmp等)。还有一件事:我必须检查数据预取

代码:

#定义尺寸5000

对于(int i=0;i您可以使用预回迁内置函数:

void _m_预取(void*)

您希望至少提前128个字节进行预取。您可能需要展开循环,以便它在每次预取之间完成正确的工作量,否则将浪费实际预取指令的时钟周期


然而,我怀疑处理器本身能够完成相当好的预取工作,因为您正在“直接”读取内存[假设tab是二维编译时数组,而不是运行时构建的数组]。

您使用的是哪种编译器/平台?我使用带openMP的visual studio
#define SIZE 5000

for(int i=0;i<SIZE;i++)
 for(int j=0;j<SIZE;j++)
   mul+=tab[i][j]