我将 omp 与 Visual Studio 2019 和 C++ 一起使用。但它一直给我提示“C6993:代码分析忽略 OpenMP”。这是否意味着 omp 将在单线程中运行该程序?为什么?以下是代码。我测量了添加 omp 之前和之后的时间,它似乎是并行运行的,那么为什么它给我 c6993 提示?
#pragma omp parallel for
for (int i = 0; i < nodeCount; i++)
{
if (masses[i] != 0)
{
predictPositions[i].x() += deltaX[i * 6];
predictPositions[i].y() += deltaX[i * 6 + 1];
predictPositions[i].z() += deltaX[i * 6 + 2];
}
}
微软对此警告的描述如下:
此警告表明代码分析器遇到了无法分析的 Open MP 编译指示。
至少在我读到它时,这意味着代码仍然应该run并行,但代码分析器(一种独立的东西)不理解 OpenMP 编译指示,因此不确定如何分析代码。
我猜想,分析它就好像它是纯粹的单线程一样(或者它可能只是不分析该代码块——描述并没有真正告诉我们足够多的信息来确定)。如果没记错的话,在一些旧版本中,它曾经说过有关单线程的内容,我认为这意味着它像单线程一样分析代码,并且警告只是告诉您它知道正在发生线程,但在分析代码时不会考虑到这一点(而且我会guess这就是它仍然有效的方式)。
鉴于您所显示的编译指示(与 OpenMP 编译指示一样简单和常见),看起来这可能适用于本质上all完全使用 OpenMP 的代码(尽管我猜它仍然可以与 OpenMP 4 SIMD 指令一起使用)。
参考
https://learn.microsoft.com/en-us/cpp/code-quality/c6993?view=vs-2019
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)