【问题标题】:What's the meaning of "C6993: code analysis ignores OpenMP construct" in omp?omp 中的“C6993:代码分析忽略 OpenMP 构造”是什么意思?
【发布时间】:2020-10-08 00:15:22
【问题描述】:

我正在将 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];
        }
    }

【问题讨论】:

    标签: c++ visual-studio parallel-processing openmp


    【解决方案1】:

    Microsoft 对此警告的描述如下:

    此警告表明代码分析器遇到了无法分析的 Open MP pragma。

    至少在我阅读时,这意味着代码仍应运行并行,但代码分析器(一种独立的东西)不理解 OpenMP 编译指示,所以它是'不知道如何分析代码。

    我猜想是把它当作纯粹的单线程来分析(或者它可能根本不分析那段代码——描述并没有真正告诉我们足够的确定性)。如果没记错的话,在一些旧版本中,它曾经说过一些关于单线程的事情,我认为它的意思是它分析了代码,就好像它是单线程的一样,警告只是告诉你它知道有线程正在进行,但它不会在分析代码时考虑到这一点(我它仍然是这样工作的)。

    鉴于您显示的编译指示(与 OpenMP 编译指示一样简单和常见),看起来这可能适用于基本上使用 OpenMP 的所有代码(尽管我猜它可以仍然可以使用 OpenMP 4 SIMD 指令)。

    参考

    https://docs.microsoft.com/en-us/cpp/code-quality/c6993?view=vs-2019

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-14
      • 1970-01-01
      相关资源
      最近更新 更多