簡體   English   中英

為什么 high_resolution_clock 的運行時間會隨着我調用它的頻率越高而增加?

[英]Why does the runtime of high_resolution_clock increase with the greater frequency I call it?

在下面的代碼中,我重復調用std::chrono::high_resolution_clock::now兩次,並測量這兩次調用之間花費的時間。 我預計這次會非常小,因為在這兩個調用之間沒有運行其他代碼。 但是,我觀察到奇怪的行為。

正如預期的那樣,對於小 N,最大元素在幾納秒內。 然而,我增加 N 的次數越多,我就會得到非常大的異常值,並且已經達到幾毫秒。 為什么會這樣?

換句話說,為什么在下面的代碼中,當我增加 N 時,v 的最大元素會增加?

#include <iostream>
#include <vector>
#include <chrono>
#include <algorithm>

int main()
{
    using ns = std::chrono::nanoseconds;
    
    uint64_t N = 10000000;
    std::vector<uint64_t> v(N, 0);
    for (uint64_t i = 0; i < N; i++) {
        auto start = std::chrono::high_resolution_clock::now();
        v[i] = std::chrono::duration_cast<ns>(std::chrono::high_resolution_clock::now() - start).count();
    }
    
    std::cout << "max: " << *std::max_element(v.begin(), v.end()) << std::endl;
    
    return 0;
}

您運行循環的時間越長,您的操作系統就越有可能確定您的線程目前已經消耗了足夠的資源並將其掛起。 循環運行的時間越長,在這些調用之間發生暫停的可能性就越大。

由於您只查看“最大”時間,因此只需發生一次即可使最大時間達到毫秒范圍。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM