伪代码如下:
myfun()
{
mytype a,b,c,d;
getData(a,b);//从数据采集程序的缓存中读取a、b
funA(a,c);//传递a、c的引用,a作为输入,c作为返回值
funB(b,d);//同上
funC(c,d);
}
funA和funB的计算量相同,顺序执行的话共用时约0.3ms。funC的计算量忽略不计。
myfun需要每秒执行4000次,所以顺序执行的速度不够,很快缓存就满了。
我试过openmp section,funA和funB各一个section,在4核CPU上运行时CPU占用翻倍(本来占满一个核,现在占满两个核),但速度没啥变化。
然后用标准库的thread,
myfun()
{
mytype a,b,c,d;
getData(a,b);//从数据采集程序的缓存中读取a、b
auto t=std::thread(funA,std::ref(a),std::ref(c));
funB(b,d);
t.join();
funC(c,d);
}
这样的话,CPU占用没啥变化,速度也没啥变化。猜想可能是因为0.3ms的时间对于线程调度来说太短了。
所以请教各位大佬有没有什么好办法能比较简单的解决?
--
FROM 121.69.95.*