小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

RDTSC指令詳解

 lichwoo 2024-12-23

一、了解RDTSC指令

rdtsc指令, 該指令返回CPU自啟動(dòng)以來的時(shí)鐘周期數(shù);該時(shí)鐘周期數(shù),即處理器的時(shí)間戳

在CPU通電啟動(dòng)后,首先會(huì)重置EDX和EAX,在每個(gè)時(shí)鐘周期上升或下降沿到來時(shí),會(huì)自動(dòng)累計(jì)周期數(shù),并被記錄到EDX和EAX寄存器中,EDX是高位,EAX是低位。

rdtsc指令就是從該寄存器中進(jìn)行獲取的。

周期和頻率的關(guān)系公式:T(周期)=1/f(頻率)

如CPU頻率f為1GHz,則其時(shí)鐘周期T=1/1GHz秒,意味著每隔T秒,CPU完成一個(gè)最基本的動(dòng)作,并在寄存器中,對(duì)周期數(shù)加1。

故,假設(shè)當(dāng)前時(shí)鐘周期數(shù)為m,則可計(jì)算出CPU自啟動(dòng)后,累計(jì)運(yùn)行時(shí)間X=m*T,整理下:

X=m/f

時(shí)鐘周期與時(shí)鐘頻率互為倒數(shù), 我們可以找出以下關(guān)系:

時(shí)鐘頻率時(shí)鐘周期
1Hz1s
1KHz1ms
1MHz1μs
1GHz1ns

注意計(jì)算時(shí),單位要搭配好,比如:

  • f為Hz時(shí),計(jì)算得到的X為秒;
  • f為GHz時(shí),計(jì)算得到的X為納秒。

小結(jié)

CPU累計(jì)運(yùn)行時(shí)間=時(shí)鐘周期數(shù)/CPU頻率

二、RDTSC指令在win和linux上的實(shí)現(xiàn)

我們已經(jīng)知道RDTSC可以獲取CPU運(yùn)行時(shí)間,另外win平臺(tái)上也已經(jīng)有了一個(gè)類似的函數(shù)

DWORD GetTickCount();

該函數(shù)返回值是系統(tǒng)啟動(dòng)后經(jīng)過的毫秒數(shù),最長為49.7天。

其微軟幫助為:

https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-gettickcount

win和linux下RDTSC的實(shí)現(xiàn)

#include <stdint.h>

//  rdtsc
#if _WIN32

#include <intrin.h>
uint64_t rdtsc()  // win
{
    return __rdtsc();
}

#else

uint64_t rdtsc() // linux
{
    unsigned int lo, hi;
    __asm__ volatile ("rdtsc" : "=a" (lo), "=d" (hi));
    return ((uint64_t)hi << 32) | lo;
}

#endif

win下,__rdtsc()函數(shù)的微軟幫助為:

https://docs.microsoft.com/zh-cn/cpp/intrinsics/rdtsc?view=vs-2019

linux下,則需要內(nèi)聯(lián)匯編來實(shí)現(xiàn)。

RDTSC指令結(jié)合CPU頻率,也可以用來計(jì)算代碼段的執(zhí)行時(shí)間。

參考鏈接:

《RDTSC指令的使用以及相關(guān)問題》


若對(duì)你有幫助,歡迎點(diǎn)贊、收藏、評(píng)論,你的支持就是我的最大動(dòng)力!?。?/p>

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請遵守用戶 評(píng)論公約

    類似文章 更多