簡體   English   中英

如何測量launch::async的執行速度?

[英]How to measure the execution speed of launch::async?

我正在處理我的任務並嘗試測量async策略的執行速度。 我沒有迭代raNums向量的時間大約是 60 秒,這是相當多的。 並且它的迭代 - 9 毫秒,這是相當多的(我知道在這種情況下,進程會不停地進行)。 但是,我真的不明白我應該如何捕捉正確的異步執行時間?

#include <iostream>
#include <future>
#include <random>

using namespace std;
using namespace std::chrono;

class RandomNum {
public:
    enum class Task {
        SMALL,
        BIG
    };
    Task task;

    RandomNum() {
        pickNum();
    }

    int randNum() {
        if (task == RandomNum::Task::SMALL) {
            for (int i = 0; i < 100; i++) {
                rand();
            }
        }
        else if (task == RandomNum::Task::BIG) {
            for (int i = 0; i < 10000000; i++) {
                rand();
            }
        }
        return 0;
    }

private:

    void pickNum() {
        int randNum = rand() % 100 + 1;
        task = (randNum % 2 == 0) ? RandomNum::Task::SMALL : RandomNum::Task::BIG;
    }

};

int main()
{
    srand((unsigned int)time(NULL));

    vector<RandomNum*> raNums;

    for (auto i = 0; i < 100; i++) {
        raNums.push_back(new RandomNum());
    }

    auto start = steady_clock::now();

    vector<future<int>> res;

    for (auto& value : raNums) {
        //if (value->task == RandomNum::Task::SMALL) {
        //  res.push_back(async(launch::deferred, &RandomNum::randNum, value));
        //}
        //else {
        //  res.push_back(async(launch::async, &RandomNum::randNum, value));
        //}
        res.push_back(async(launch::async, &RandomNum::randNum, value));
    }


    for (auto& i : res) {
        i.get();
    }

    auto stop = steady_clock::now();

    cout << "Time = " << duration_cast<milliseconds>(stop - start).count() << "ms.\n";

    return 0;
}

我有:

  • 15秒同時使用
  • 僅使用asynch 18 秒
  • 僅使用deferred的 40 秒

很容易理解, deferred的所有事情都更長,因為單個線程可以完成所有事情。

由於我的計算機有 2 個超線程內核,因此async速度大約是原來的兩倍是有道理的。

最后,通過混合兩者,它會更快一些,因為您避免了小函數的async開銷。

話雖如此,您可能可以通過僅使用小型或大型任務測試有和沒有異步的時間來猜測更好的比率(在特定計算機上),以便更好地了解特定大小的改進。

事實上,對於 plot 來說,1、10、100、1000、10000 等直到 10000000 的圖表可能會很有趣。這樣,您可以更好地了解大小的影響以及使用任務的大小很有用。

作為參考,您可能還想通過僅生成隨機數來比較時間而不使用任務...

暫無
暫無

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

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