不好意思 小弟非资工系
但是最近在写平行运算 小弟算是外行的 但对基本的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):(请善用置底文网页, 记得排版)