Transactional Synchronization Extensions
目录
- 什么是TSX
- 检测你的机器是否支持TSX
- HLE
- RTM
- 参考资料
TSX
TSX(Transactional Synchronization Extensions)是x86指令集体系结构的扩展,增加了对事务内存的支持,实现了硬件层面的无锁机制,可以加速多线程程序的执行。TSX为指定代码事务性执行提供了两个软解接口,分别是HLE(Hardware Lock Elision)和RTM(Restricated Transactional Memory)。HLE通过给特定指令加前缀实现的,能够向后兼容不支持TSX的处理器。RTM提供了新的指令,可以更加灵活的供程序员使用。[4]
检测你的机器是否支持TSX
将下面的代码保存为has_tsx.c,编译后运行,即可得知你的机器是否支持TSX。
/* Filename:has_tsx.c */
#include <cpuid.h>
#include <stddef.h>
#include <stdio.h>
#define CPUID_RTM (1 << 11)
#define CPUID_HLE (1 << 4)
static inline int cpu_has_rtm(void)
{
if (__get_cpuid_max(0, NULL) >= 7) {
unsigned a, b, c, d;
__cpuid_count(7, 0, a, b, c, d);
return !!(b & CPUID_RTM);
}
return 0;
}
static inline int cpu_has_hle(void)
{
if (__get_cpuid_max(0, NULL) >= 7) {
unsigned a, b, c, d;
__cpuid_count(7, 0, a, b, c, d);
return !!(b & CPUID_HLE);
}
return 0;
}
int main(void) {
pri