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

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

OpenMP程序比順序程序慢

OpenMP程序比順序程序慢

元芳怎么了 2019-11-03 16:04:33
當(dāng)我嘗試以下代碼double start = omp_get_wtime();long i;#pragma omp parallel for    for (i = 0; i <= 1000000000; i++) {        double x = rand();    }    double end = omp_get_wtime();    printf("%f\n", end - start);執(zhí)行時間約為168秒,而順序版本僅花費20秒。我仍然是并行編程的新手。如何獲得比順序版本更快的并行版本?
查看完整描述

2 回答

?
夢里花落0921

TA貢獻(xiàn)1772條經(jīng)驗 獲得超6個贊

隨機數(shù)生成器rand(3)使用全局狀態(tài)變量(隱藏在(g)libc實現(xiàn)中)。從多個線程訪問它們會導(dǎo)致緩存問題,而且也不安全。您應(yīng)該對線程rand_r(3)使用seed參數(shù)private 的調(diào)用:


long i;

unsigned seed;


#pragma omp parallel private(seed)

{

    // Initialise the random number generator with different seed in each thread

    // The following constants are chosen arbitrarily... use something more sensible

    seed = 25234 + 17*omp_get_thread_num();

    #pragma omp for

    for (i = 0; i <= 1000000000; i++) {

       double x = rand_r(&seed);

    }

}

請注意,并行執(zhí)行與串行執(zhí)行時會產(chǎn)生不同的隨機數(shù)流。我還建議將其erand48(3)作為更好的(偽)隨機數(shù)源。



查看完整回答
反對 回復(fù) 2019-11-04
?
白板的微信

TA貢獻(xiàn)1883條經(jīng)驗 獲得超3個贊

rand()是一個外部庫函數(shù)。它的聲明stdlib.h絕不會說明它是否修改了外部狀態(tài),此外,其代碼還隱藏在已編譯的庫中。GCC __atribute__ ((pure))為純外部功能提供了顯式注釋。只需嘗試在啟用最大優(yōu)化的情況下編譯串行版本,然后自己看看。

查看完整回答
反對 回復(fù) 2019-11-04
  • 2 回答
  • 0 關(guān)注
  • 300 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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