我正在寫一個並行程序使用開放熔點,其中我生成隨機浮點數的矩陣,然後做了一些計算。我當前想要讓生成矩陣並行運行的步驟,但我有問題,rand()函數並不是要同時運行。我不想在rand上使用鎖來提供互斥鎖,因爲這是循環中唯一要做的事情,它可能會更有效地按順序運行它。有沒有辦法有效地並行執行這一步驟?併發隨機數的生成
這裏如果當前代碼爲這部分(帶蘭特上無互斥鎖);
#pragma omp parallel default(private)
{
int i= omp_get_thread_num();
for(int j=0; j<cols; j++)
matrix[i][j]= rand()%1000 + (float)(rand()%100)/(float)(rand()%1000);
}
PRNG從固定的種子生成一致的數字序列。這個順序(可重複性)對你來說很重要,還是你真的想要「隨機」? – 2010-11-20 19:20:30
無論他們是否按照任何特定的順序都沒關係,我遇到的問題是當我順序運行它時,我在整個範圍內獲得了很好的分佈,但是當我將其更改爲平行時,總體上這些數字小於10,當我總結行幾乎所有他們加起來0(我從來沒有負面的順序)。這使我認爲函數調用存在某種併發問題。 – user381261 2010-11-20 19:28:22
堅持一秒 - 平均每1000次迭代一次,rand()%1000將爲零,那麼如何分配呢? – TonyK 2010-11-20 19:47:22