簡體   English   中英

為什么std :: inner_product比天真的實現慢?

[英]Why is std::inner_product slower than the naive implementation?

這是我對dot產品的天真實現:

float simple_dot(int N, float *A, float *B) {
    float dot = 0;
    for(int i = 0; i < N; ++i) {
    dot += A[i] * B[i];
    }

    return dot;
}

這是使用C ++庫:

float library_dot(int N, float *A, float *B) {
    return std::inner_product(A, A+N, B, 0);
}

我運行了一些基准測試(代碼在這里https://github.com/ijklr/sse ),庫版本慢很多。 我的編譯器標志是-Ofast -march=native

你的兩個功能不做同樣的事情。 該算法使用一個累加器,其類型是從初始值推導出來的,在你的情況下( 0 )是int 將浮點數累積到int中不僅需要比累積到浮點數更長的時間,而且還會產生不同的結果。

原始循環代碼的等價物是使用初始值0.0f ,或等效float{}

(注意std::accumulate在這方面非常相似。)

暫無
暫無

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

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