1

我正在用visual studio編寫一個程序,以便能夠在公園處理一條線。我把所有的客戶都集中在公園,我希望能夠通過使用openmp的多線程服務他們。什麼是使用多線程來模擬的好方法?

當我把編譯指示等寫進去時,我爲同一個客戶同時爲我創建的每個客戶提供多個線程,而不是我想要的。

我想舉個例子,如果我有兩個線程和四個客戶,那麼當線程2執行客戶2時,線程執行一個客戶。然後,我想要線程1執行相同的客戶3和線程2客戶4時間。我不知道它是否可行或者是否有更好的方法,但我需要使用openmp。感謝您的輸入。

回答

1

您可以將每個迭代作爲客戶關聯,並以靜態方式將每個客戶(客戶)分配給每個線程。

#pragma omp parallel for schedule(static, CHUNKSIZE) 
for(i = 0; i < customer_max; i++) 
{ 
// do something with customers 

} 

靜態:在這裏,他們執行的循環迭代之前,所有的線程分配迭代。迭代在默認情況下在線程之間被均分。但是,爲參數CHUNKSIZE指定一個整數將爲特定線程分配塊數的連續迭代。

因此,在2個線程和4個客戶的例子中,你將使用CHUNKSIZE = 1。因此,線程0將執行兩種負荷消費0和2,而線2將執行負荷消費1和3

如果您不指定CHUNKSIZE,線程0將執行前2個用戶,線程1執行剩餘的2個。

另一方面,如果您希望每個線程都以動態方式爲用戶提供服務,則可以使用動態分配。

#pragma omp parallel for schedule(dynamic) 
    for(i = 0; i < customer_max; i++) 
    { 
    // do something with customers 

    } 

動態調度適用於構造的情況,迭代需要變化甚至不可預知的工作量。類似於你的情況,如果你有消費者服用不同的時間。

+0

太棒了,非常感謝。我剛開始多處理,這將幫助我一噸。 – user1504257

+0

Np,歡迎你。 – dreamcrash

相關問題