clang和__rdtscp:它是什么,错误是什么

时间:2014-05-02 22:20:29

标签: c++ clang

Clang决定给我一个错误。它决定对我大吼大叫使用__rdtscp(这不是我的代码,我不知道那是什么)

 error: use of undeclared identifier '__rdtscp'
                        i2 = __rdtscp(&ui2);
                             ^
 error: use of undeclared identifier '__rdtscp'
                        i3 = __rdtscp(&ui3);
                             ^
 error: use of undeclared identifier '__rdtscp'
                        i2 = __rdtscp(&ui2);
                             ^
 error: use of undeclared identifier '__rdtscp'
                        i3 = __rdtscp(&ui3);
                             ^
 error: use of undeclared identifier '__rdtscp'
                i2 = __rdtscp(&ui2);
                     ^
 error: use of undeclared identifier '__rdtscp'
                i3 = __rdtscp(&ui3);

我真想弄清楚为什么Clang不喜欢我。有谁知道__rdtscp是什么以及如何让它冷静下来呢?

2 个答案:

答案 0 :(得分:3)

假设您正在为x86进行编译,那么内置__rdtscp函数。如果您正在为其他处理体系结构进行编译,那么它将无法使用,因为rdtscp基本上是x86指令的名称。

此代码适用于我,截至昨天使用clang ++ 3.5.0:

#include <iostream>
#include <x86intrin.h>

int main()
{
    unsigned int dummy;
    unsigned long long t1 = __rdtscp(&dummy);
    std::cout << "Hello" << std::endl;

    unsigned long long t2 = __rdtscp(&dummy);
    std::cout << "Time: " << t2 - t1 << std::endl;
}

您需要包含x86intrin.h才能从__rdtscp转换为编译器知道的实际__builtin_ia32_rdtscp函数。

答案 1 :(得分:0)

__rdtscp() on some platforms是RDTSCP指令的内在编译器,它是最近引入的RDTSC(&#34;读取时间戳计数器&#34;)的序列化版本,用于用于计算处理器周期数,例如在基准测试或定时器代码中。

Here is a way是一种在使用gcc时在C或C ++中使用rdtscp()的方法。也许同样的方法适用于Clang?