visual-c – 如何使用64位C代码中的暂停汇编指令?
发布时间:2020-12-16 05:21:15 所属栏目:百科 来源:网络整理
导读:由于VC 2010在64位代码中不支持内联程序集,因此如何在我的代码中暂停x86-64指令?这似乎并不是内在的,因为有许多其他常见的汇编指令(例如__rdtsc(),__cpuid()等)). 在为什么一方面,我希望该指令能够帮助忙碌的等待用例,以便(超线程)CPU可用于在所述CPU上运行
由于VC 2010在64位代码中不支持内联程序集,因此如何在我的代码中暂停x86-64指令?这似乎并不是内在的,因为有许多其他常见的汇编指令(例如__rdtsc(),__cpuid()等)).
在为什么一方面,我希望该指令能够帮助忙碌的等待用例,以便(超线程)CPU可用于在所述CPU上运行的其他线程(请参阅:intel.com上的Performance Insights).暂停指令对于这种用例和旋转锁定实现非常有帮助,我不明白为什么MS不将其作为内在的. 谢谢 解决方法
哇,这是一个很难追踪的问题,但是如果有人需要x86-64暂停指令:
来自windows.h的YieldProcessor()宏扩展到未记录的_mm_pause内在函数,最终扩展为32位和64位代码中的暂停指令. 对于MSDN中出现的YieldProcessor(),这是完全没有文档的,部分(对于VC 2010文档不正确). 以下是YieldProcessor()宏块编译成的一个示例: 19: ::YieldProcessor(); 000000013FDB18A0 F3 90 pause 20: ::YieldProcessor(); 000000013FDB18A2 F3 90 pause 21: ::YieldProcessor(); 000000013FDB18A4 F3 90 pause 22: ::YieldProcessor(); 000000013FDB18A6 F3 90 pause 23: ::YieldProcessor(); 000000013FDB18A8 F3 90 pause 顺便说一下,每个暂停指令似乎在Nehalem架构上平均产生约9个周期的延迟(即3.3 GHz CPU上的3 ns). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |