gpt4 book ai didi

c - 在基准测试中强制串行执行 __rdtsc()

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

我们正在尝试在我们的硬件的设备驱动程序中包含一个基准。基准测试例程如下所示

for(int i = 0; i < lots; i++){
tscStart = __rdtsc();
WRITE_REGISTER_ULONG(ourRegister, ourValue)
tscEnd = __rdtsc();

duration = tscEnd - tscStart;
// Store duration for later evaluation
}

现在,我们似乎在 CPU 对调用重新排序时遇到了问题,因此在大约 50% 的情况下,持续时间 太短(我们连接了示波器,所以我们当然在这里)。

其他事实(我不知道这些是否相关,这是我们第一次使用此类驱动程序):

  • __rdtscp 具有相同的行为(在支持它的计算机上)
  • 我们尝试用 _mm_mfence 和/或 __cpuid 包围每一行,以强制命令序列化
  • 使用 dummy = READ_REGISTER_ULONG(ourRegister) 的等效基准测试正在按预期工作。
  • 我们的硬件通过 PCIe 连接

有没有办法让机器在第二次写入之前真正等待写入返回?

最佳答案

正如 Hans Passant 和 Damon 在评论中提到的,尝试使用 __cpuid 来序列化 __rdtsc 调用应该可行,但由于处理器不会等待PCIe 传输完成,我的计时数据无论如何都关闭了。

关于c - 在基准测试中强制串行执行 __rdtsc(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20198091/

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