gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:52:26 26 4
gpt4 key购买 nike

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

代码:

#define SIZE 5000

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

通常会自行处理预取数据(当我们处于单行并递增j时),但并非总是如此(例如tab[0][0 ] 永远不会预取,或者当我们转到下一行时(loop i++ ,tab[i][0]))。如何更改此代码以帮助从 tab[0][0]、tab[1][0]、tab[2][0 中 proc 预取 数据],tab[3][0] 等,然后我们才会对它们进行计数?

最佳答案

您可以使用预取内置函数:

void _m_prefetch(void *);

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

然而,我怀疑处理器会自行完成预取工作,因为您正在“直接”读取内存[假设选项卡是二维编译时数组,而不是运行时构建的大批]。

关于c - 如何更改此 C 代码以预取一些数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14424818/

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