MSVC是否会自动优化双核架构上的计算?
void Func()
{
Computation1();
Computation2();
}如果给定函数中没有关系的2计算,则visual studio
编译器会自动优化计算并将它们分配到不同的内核吗?
发布于 2010-01-14 11:37:10
不要引用我的话,但我对此表示怀疑。OpenMP编译指示与您在这里要做的事情最接近,但即使这样,您也必须告诉编译器使用OpenMP并描述任务。
除了链接到本质上是多线程的库之外,如果你想同时使用两个核心,你必须设置线程并智能地划分你想要完成的工作。
发布于 2010-01-14 11:49:50
编译器没有可靠的方法来检测这两个函数是完全独立的,并且它们没有状态。因此,编译器没有办法知道将它们分解到单独的执行线程中是安全的。事实上,线程甚至不是C++标准的一部分(直到C++1x),即使它们将成为标准的一部分,它们也不是固有特性-您必须显式地使用该特性才能从中受益。
如果你想让你的两个函数在独立的线程中运行,那么创建独立的线程让它们在其中执行。查看boost::thread (如果您的编译器有的话,也可以在std::tr1名称空间中使用它)。它易于使用,并且完美地适用于您的用例。
发布于 2010-01-14 15:11:49
不是的。如果编译器在你背后做这样的事情,疯狂的事情会随之而来;如果Computation2依赖于Computation1的副作用呢?
如果你使用的是VC10,看看concert和它的合作伙伴Parallel Patterns Library (PPL)
类似的解决方案包括OpenMP (有点老掉牙的国际海事组织,但受到广泛支持)和英特尔的Threading Building Blocks。
https://stackoverflow.com/questions/2061990
复制相似问题