第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

得到CPU周期計(jì)數(shù)了嗎?

得到CPU周期計(jì)數(shù)了嗎?

C++ C
holdtom 2019-06-20 15:38:34
得到CPU周期計(jì)數(shù)了嗎?我看到了這篇文章,其中包含C代碼以獲取最新的CPU周期計(jì)數(shù):C/C+Linux x86_64中基于CPU周期計(jì)數(shù)的分析有什么方法可以在C+(Windows和Linux解決方案歡迎)中使用這段代碼嗎?雖然是用C編寫(xiě)的(C是C+的一個(gè)子集),但我不太確定這段代碼是否能在C+項(xiàng)目中工作,如果不是,如何翻譯它?我使用的是x86-64EDIT 2:找到此功能,但無(wú)法獲得VS 2010來(lái)識(shí)別匯編程序。我需要包括什么嗎?(我想我得交換一下uint64_t到long long對(duì)于窗戶.?)static inline uint64_t get_cycles(){   uint64_t t;   __asm volatile ("rdtsc" : "=A"(t));   return t;}EDIT 3:從上面的代碼中我得到了錯(cuò)誤:錯(cuò)誤C 2400:‘操作碼’中內(nèi)聯(lián)匯編程序語(yǔ)法錯(cuò)誤;找到‘?dāng)?shù)據(jù)類型’“有人能幫忙嗎?
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊

從GCC 4.5及更高版本開(kāi)始,__rdtsc()內(nèi)稟現(xiàn)在得到MSVC和GCC的支持。

但所需的包含是不同的:

#ifdef _WIN32#include <intrin.h>#else#include <x86intrin.h>#endif

這是GCC 4.5之前的最初答案。

直接退出了我的一個(gè)項(xiàng)目:

#include <stdint.h>//  Windows#ifdef _WIN32#include <intrin.h>uint64_t rdtsc(){
    return __rdtsc();}//  Linux/GCC#elseuint64_t rdtsc(){
    unsigned int lo,hi;
    __asm__ __volatile__ ("rdtsc" : "=a" (lo), "=d" (hi));
    return ((uint64_t)hi << 32) | lo;}#endif


查看完整回答
反對(duì) 回復(fù) 2019-06-20
?
呼喚遠(yuǎn)方

TA貢獻(xiàn)1856條經(jīng)驗(yàn) 獲得超11個(gè)贊

VC+對(duì)內(nèi)聯(lián)程序集使用完全不同的語(yǔ)法-但只在32位版本中使用.64位編譯器根本不支持內(nèi)聯(lián)程序集。

在這種情況下,這很可能也是-rdtsc當(dāng)涉及到定時(shí)代碼序列時(shí),(至少)有兩個(gè)主要問(wèn)題。首先(與大多數(shù)指令一樣)它可以按順序執(zhí)行,因此,如果您試圖安排一個(gè)簡(jiǎn)短的代碼序列,rdtsc在該代碼之前和之后都可能執(zhí)行,或者在它之后執(zhí)行,或者您有什么內(nèi)容(我相當(dāng)肯定這兩個(gè)代碼將始終按照彼此的順序執(zhí)行,因此至少兩者之間的區(qū)別永遠(yuǎn)不會(huì)是否定的)。

其次,在多核(或多處理器)系統(tǒng)上,一個(gè)rdtsc可能在一個(gè)核心/處理器上執(zhí)行,另一個(gè)在另一個(gè)核心/處理器上執(zhí)行。在這種情況下,結(jié)果是否定的完全有可能。

一般來(lái)說(shuō),如果您想要在Windows下有一個(gè)精確的定時(shí)器,最好使用QueryPerformanceCounter.

如果你真的堅(jiān)持用rdtsc,我相信您必須在一個(gè)完全用匯編語(yǔ)言編寫(xiě)的單獨(dú)模塊中完成(或者使用編譯器內(nèi)部的),然后與您的C或C+鏈接。我從未為64位模式編寫(xiě)過(guò)該代碼,但在32位模式下,它看起來(lái)如下所示:

   xor eax, eax
   cpuid
   xor eax, eax
   cpuid
   xor eax, eax
   cpuid
   rdtsc   ; save eax, edx   ; code you're going to time goes here

   xor eax, eax
   cpuid
   rdtsc

我知道這看起來(lái)很奇怪,但實(shí)際上是對(duì)的。執(zhí)行CPUID是因?yàn)樗且粋€(gè)序列化指令(不能按順序執(zhí)行),并且可以在用戶模式下使用。在開(kāi)始計(jì)時(shí)之前執(zhí)行三次,因?yàn)镮ntel記錄了第一次執(zhí)行可以/將以與第二次執(zhí)行不同的速度運(yùn)行的事實(shí)(他們建議的是三次,所以三次)。

然后執(zhí)行正在測(cè)試的代碼、強(qiáng)制序列化的另一個(gè)cpuid和最后的rdtsc以獲得代碼完成后的時(shí)間。

同時(shí),您希望使用操作系統(tǒng)提供的任何方式來(lái)強(qiáng)制在一個(gè)進(jìn)程/核心上運(yùn)行所有這些。在大多數(shù)情況下,您還希望強(qiáng)制代碼對(duì)齊-對(duì)齊方式的更改會(huì)導(dǎo)致執(zhí)行Spee中相當(dāng)大的差異。

最后,你想要多次執(zhí)行它-它總是有可能在中間被打斷(例如,任務(wù)切換),所以你需要做好準(zhǔn)備,一次執(zhí)行所需的時(shí)間要比其他時(shí)間長(zhǎng)得多-例如,5次運(yùn)行每次花費(fèi)40到43次時(shí)鐘周期,第六次執(zhí)行需要10000多個(gè)時(shí)鐘周期。顯然,在后一種情況下,您只需排除異常值-這不是來(lái)自您的代碼。

摘要:設(shè)法執(zhí)行rdtsc指令本身(幾乎)是你最不擔(dān)心的。更多的是你需要在您從rdtsc那實(shí)際上意味著什么。


查看完整回答
反對(duì) 回復(fù) 2019-06-20
  • 3 回答
  • 0 關(guān)注
  • 896 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)