69得票2回答
rdtscp和rdtsc的区别:内存和cpuid / rdtsc?

假设我们正在尝试使用tsc进行性能监控,我们希望防止指令重排序。 这是我们的选择: 1:rdtscp 是一个序列化调用。它可以防止在调用 rdtscp 时发生重排序。__asm__ __volatile__("rdtscp; " // serializing read of...

60得票5回答
如何从C++中获取x86_64的CPU周期计数?

我在SO上看到了这篇文章,其中包含获取最新CPU周期计数的C代码: 基于C/C++ Linux x86_64的CPU周期计数性能分析 是否有办法在C++中使用此代码(欢迎提供Windows和Linux解决方案)?虽然该代码是用C编写的(而C是C++的子集),但我不太确定它是否适用于C++项...

38得票6回答
跨CPU核心的rdtsc精度

我正在一个线程中发送网络数据包,并在运行在不同CPU核心上的第二个线程中接收回复。我的进程测量每个数据包的发送和接收之间的时间(类似于ping)。我使用rdtsc获取高分辨率,低开销的计时,这是我实现所需的。 所有的测量看起来都很可靠。但是,我还是担心rdtsc在不同核心之间的准确性,因为我...

35得票1回答
Intel的丢失周期?rdtsc和CPU_CLK_UNHALTED.REF_TSC之间的不一致。

在最近的CPU(至少过去十年)中,英特尔提供了三个固定功能的硬件性能计数器,以及各种可配置的性能计数器。这三个固定计数器是: INST_RETIRED.ANY CPU_CLK_UNHALTED.THREAD CPU_CLK_UNHALTED.REF_TSC 第一个计数器统计退休指令的数量...

20得票4回答
如何在GCC x86中使用RDTSC计算时钟周期?

使用Visual Studio,我可以从处理器读取时钟周期计数,如下所示。如何在GCC中执行相同的操作?#ifdef _MSC_VER // Compiler: Microsoft Visual Studio #ifdef _M_IX86 ...

20得票3回答
使用RDTSC获取CPU周期-为什么RDTSC的值始终增加?

我希望在特定点获取CPU周期。我在该点使用以下函数: static __inline__ unsigned long long rdtsc(void) { unsigned long long int x; __asm__ volatile (".byte 0x0f, 0x3...

20得票9回答
带有连续rdtsc的负时钟周期测量?

我正在编写一个C代码,用于测量获取信号量所需的时钟周期数。我正在使用rdtsc,在对信号量进行测量之前,我连续调用了两次rdtsc,以测量开销。我在for循环中多次重复此操作,然后将平均值用作rdtsc开销。 首先,使用平均值是正确的吗? 尽管如此,这里的大问题是有时我会得到开销的负值(不...

19得票2回答
为什么在x86和x86_x64上使用“rdtsc”的方式不同?

我知道rdtsc可以将处理器时间戳计数器的当前值加载到EDX和EAX寄存器中。为了在x86上实现这个功能,我需要按照以下步骤进行操作(假设使用Linux): unsigned long lo, hi; asm( "rdtsc" : "=a" (lo), "=d" (hi)); ...

18得票3回答
在"rdtsc"之前使用"cpuid"

有时我遇到的代码使用rdtsc指令读取TSC,但在此之前调用了cpuid。 为什么需要调用cpuid?我意识到它可能与不同核心具有TSC值有关,但是当您依次调用这两个指令时会发生什么事情呢?

15得票3回答
RDTSC开销的差异性

我正在构建一个微型基准测试来测量在一些原始图像处理操作中使用SIMD指令内置函数时性能变化。然而,编写有用的微基准测试是困难的,因此我想首先尽可能地了解(并消除)尽可能多的变异和误差来源。 我必须考虑的一个因素是测量代码本身的开销。我正在使用RDTSC进行测量,并使用以下代码查找测量开销: ...