gpt4 book ai didi

c++ - 如何使用 CPUID 作为序列化指令?

转载 作者:搜寻专家 更新时间:2023-10-31 02:07:33 25 4
gpt4 key购买 nike

CPUID 可用作序列化指令,如 here 所述和 here .在 C++ 中以这种方式使用它的最小/最简单的 asm 语法是什么?

// Is that enough?
// What to do with registers and memory?
// Is volatile necessary?
asm volatile("CPUID":::);

最佳答案

您有没有使用围栏操作的原因?如果目标是序列化一段代码,你可以做类似的事情

 asm __volatile__ (
" mfence \n" // drain the store buffer
" lfence \n" // and wait for that instruction to retire, draining the ROB
::: "memory"); // block compile-time reordering.
Your code here
asm __volatile__ (
" mfence \n"
" lfence \n"
::: "memory" );

就内存和指令重新排序而言,这与您从 cpuid 获得的序列化差不多。但在英特尔的技术术语中,这两者都不是正式的序列化指令。

软件预取不保证会被订购。围栏说明,所以至少在纸上,一个更早的 prefetcht0可能导致数据在 lfence 之后到达。 (但是 prefetcht0 after lfence 直到 lfence 完成后才能执行,因为在lfence 被发送到执行单元,直到之前的所有指令都退出。“在本地完成”在 Intel's documentation 中。)

lfence 阻止指令重新排序是 Intel CPU 始终工作的方式,但 AMD 仅具有 MSR 设置。执行 Spectre 缓解的操作系统设置了 MSR:Is LFENCE serializing on AMD processors?

关于c++ - 如何使用 CPUID 作为序列化指令?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48502569/

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