我正在使用RDTSCP替换LFENCE; RDTSC序列,并且还获得了处理器ID,这样我就知道在将线程重新安排到另一个CPU之后比较TSC值时。

为了确保我不会在过旧的计算机上运行RDTSCP,在进行CPUID检查(使用libcpuid)后,我会回退到RDTSC。我想尝试使用gcc多目标属性功能代替CPUID调用:

int core2_func (void) __attribute__ ((__target__ ("arch=core2")));


gcc manual lists a number of cpu families(具有Haswell,Skylake等)。我如何找到哪个CPU家族首先引入RDTSCP?

最佳答案

根据2006年撰写的this 1文章,RDTSCP指令最初是在AMD NPT系列0Fh处理器中引入的,现在称为AMD K8 Hammer。但是,有很多处理器属于这个家族,并且在2006年或之前发布。我找到了另一个article,它最初是用日语编写的,但是我使用Google Translate将其翻译为英语。该文章提到系列0Fh的“版本F”支持RDTSCP指令。所有标记为修订版F(包括F2和F3)和更高版本的K8处理器均支持RDTSCP。较早的K8处理器(包括某些双核处理器)不支持RDTSCP

在Intel处理器上,Nehalem和更高版本,Silvermont和更高版本以及Knights Landing和更高版本均支持RDTSCP



脚注1:我只能使用Wayback Machine和here找到该文章。 AMD网站上不再存在。

关于gcc - 支持RDTSCP的gcc cpu类型是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37682939/

10-10 21:29