不好意思 小弟非資工系
但是最近在寫平行運算 小弟算是外行的 但對基本的C是大致可以的
教授有一些要求 不知道是否能做到
所以以下小弟有一些問題想問板上的大大
主要是使用<ppl.h> parallel patterns library 寫平行
我用parallel_invoke 執行四項工作跑4個演算法
其中1個演算法的資源 會跟另外3個演算法溝通 做讀寫或比較
簡單來說一個演算法在跑GA
另外三個平行工作是相同的演算法
GA在做自己的流程
另外三個平行工作(以下簡稱A,B,C)會讀取GA的陣列做讀寫
當找到最佳解時會將解跟GA的母群體陣列做讀取,此時會需要用到Critical section
而我現在想要當A在GA陣列互通時 B C繼續執行(有可能跟GA陣列做存取
請問是否可行 ? 是否critical section 要宣告不同的變數 或是使用別的函式
EX:
critical section cs;
parallel_invoke
(
[&cs] // algorithm 1
{
...
}
[&cs] // algorithm 2
{
...
}
,
[&cs] // algorithm 3
{
...
}
,
[&cs] // algorithm 4
{
...
}
,
)
問題(Question):
1. 關於parallel_invoke
parallel_invoke可以平行執行多個工作,
想請問是否有三項工作平行執行,就是3個thread在跑????
4項工作平行執行 就是4個thread在跑???????????
2. 關於crtical section
想請問假如我宣告 critical section aa,bb,cc;
aa.lock()
{
... //執行程式
}
aa.unlock()
bb.lock()
{
... //執行程式
}
bb.unlock()
想請問不同名字的critical section有差嗎?
跑到aa.lock()時 只有一個thread在跑吧?
跑到bb.clock()時 也是只有一個thread在跑吧?
我是否可以用aa選定一個區域
當aa.lock() 只有一個區域的程式碼時 一個thread在跑aa的區域
而bb & cc的區域 還在其他thread跑?? ((這是教授的要求
3. 當我使用cs.lock() ,
cs.lock();
{
//a[] 這個陣列正在被讀寫
}
cs.lock();
當其他平行工作想要讀取a[]這個陣列時
我能否判定a[]是否被lock住?
程式碼(Code):(請善用置底文網頁, 記得排版)