Tag: rdtsc

rdtscp,rdtsc:memory和cpuid / rdtsc之间的区别?

假设我们正在尝试使用tsc进行性能监视,并且我们希望阻止指令重新sorting。 这些是我们的select: 1: rdtscp是一个序列化调用。 它阻止了对rdtscp调用的重新sorting。 __asm__ __volatile__("rdtscp; " // serializing read of tsc "shl $32,%%rdx; " // shift higher 32 bits stored in rdx up "or %%rdx,%%rax" // and or onto rax : "=a"(tsc) // output to tsc variable : : "%rcx", "%rdx"); // rcx and rdx are clobbered 但是, rdtscp仅适用于较新的CPU。 所以在这种情况下,我们必须使用rdtsc 。 但rdtsc是非序列化的,所以单独使用它不会阻止CPU对其进行重新sorting。 所以我们可以使用这两个选项来防止重新sorting: […]

CPU核心的rdtsc准确度

我从一个线程发送networking数据包,并在另一个CPU核心上运行的第二个线程上接收回复。 我的过程测量每个数据包发送和接收之间的时间(类似于ping)。 我正在使用rdtsc获得高分辨率,低开销的时间,这是我的实施所需要的。 所有测量看起来都可靠。 不过,我担心跨核心的rdtsc准确性,因为我一直在阅读一些文字,这意味着tsc在核心之间没有同步。 我在维基百科find了关于TSC的以下信息 持续的TSC行为确保了每个时钟节拍的持续时间是统一的,并且即使处理器内核改变了频率,也支持使用TSC作为挂钟定时器 。 这是所有英特尔处理器的架构行为。 尽pipe如此,我仍然担心跨核心的应计,这是我的问题 更多信息 我在一台Intel nehalem机器上运行我的程序。 操作系统是Linux。 所有内核都设置了“ constant_tsc ”cpu标志。