gpt4 book ai didi

cpu-architecture - 如何确定 SSE 预取指令大小?

转载 作者:行者123 更新时间:2023-12-04 07:23:38 24 4
gpt4 key购买 nike

我正在使用包含用于 SSE 预取指令的内联汇编的代码。预处理器常量决定是否使用 32、64 或 128 字节预取指令。该应用程序在各种平台上使用,到目前为止,我不得不在每种情况下研究给定 CPU 的最佳选择。我知道这是缓存行大小。这些信息是自动获得的吗?它似乎没有明确存在于/proc/cpuinfo 中。

最佳答案

我认为你的问题与这个question有关或 this一。我认为很明显 - 除非你可以依赖操作系统或库函数 - 你会想要使用 CPUID 指令,但问题就变成了你正在寻找什么信息。 - 当然,AMD 和 Intel 的实现不需要达成一致。这page建议使用 Cpuid.1.EBX[15:8](即 BH)在 Intel 上查找并在 AMD 上运行 80000005h。另外,在 Intel 上,CPUID.2... 似乎包含相关信息,但解析出所需信息看起来真的很痛苦。

我认为,据我所读,AMD 和英特尔 CPUID 指令都将支持 CPUID.1.EBX[15:8],它返回 QUADWORD 中一个缓存行的大小,如下所示由 CLFLUSH 指令使用(并非所有处理器都存在,所以我不知道您是否总能在那里找到一些东西)。 因此,在执行 CPUID.1 之后,您必须将 BH 乘以 8 才能得到以字节为单位的缓存行大小。这取决于我的隐含假设(请问有人能说出它是否真的有效吗? ) 一个缓存行大小的定义对于 CLFLUSH 和 PREFETCHh 指令总是相同的。

此外,英特尔的 manuals声明 PREFETCHh 只是一个提示,但是如果它预取任何内容,它将始终是最小 32 字节

编辑1:优化使用 PREFETCHh 的另一个有用资源(即使没有直接回答您的问题)是英特尔的优化手册 here .

关于cpu-architecture - 如何确定 SSE 预取指令大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1380000/

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