簡體   English   中英

使用OpenMP處理單鏈表

[英]Process singly linked list with OpenMP

我要並行化的代碼具有以下簡單形式:

for(const ListItem* item = myList; item; item = item->getNext())
  doSthWith(item);

我在具有omp 2.0支持的MSVC 2013上進行編譯。 是否有可能以一種干凈有效的方式並行化它? 我偶然發現的第一個問題是我需要一個積分回路計數器。 我顯然可以只使用int並在循環內分配指針,但這已經開始感覺像是一種骯臟的解決方法。 這樣的迭代類型是否甚至支持我的omp標准,還是最終可能會在UB中使用?

也許不是真正的答案,但我無法在注釋中設置代碼格式...

假設列表沒有被修改,您可以編寫一些令人不愉快的內容(在此處鍵入,未編譯,未測試)。

#pragma omp parallel
{
    int nThreads = omp_get_num_threads();
    int me       = omp_get_thread_num();
    int itemNo   = 0;

    for(const ListItem* item = myList; 
        item; 
        (item = item->getNext()), itemNo++)
    {
        if (itemNo%nThreads == me)
        {
            doSthWith(item);
        }
    }
}

暫無
暫無

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

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