Sdílet prostřednictvím


/openmp (Povolit podporu OpenMP 2.0)

Způsobí, že kompilátor zpracovat #pragmaomp.

/openmp

Poznámky

#pragma ompslouží k určení Direktivy jazyka OpenMP a OpenMP – klauzule.Pokud /openmp není zadána v sestavení, kompilátor ignoruje klauzule OpenMP a směrnic.Funkce OpenMP i když kompilátor zpracovává volání /openmp není zadána.

Aplikace je kompilována s /openmp a OpenMP – knihovny lze spustit pouze v systému Windows 2000 nebo novější operační systémy.

Aplikace je kompilována s /openmp a /clr lze spustit pouze v doméně proces jedné aplikace; není podporováno více aplikačními doménami.To znamená, že při spuštění modulu konstruktoru (.cctor) zjistí proces je kompilována s /openmp a pokud je aplikace načtena do jiné než výchozí runtime.Další informace naleznete v tématu appdomainm /clr (Common Language Runtime) a Inicializace smíšených sestavení.

Pokud se pokusíte načíst aplikaci kompilovanou s /openmp a /clr do domény aplikace jiné než výchozí, TypeInitializationException mimo ladicí program bude vyvolána výjimka a bude vyvolána výjimka OpenMPWithMultipleAppdomainsException v debuggeru.

Tyto výjimky mohou být vyvolány také v následujících situacích:

  • Pokud je aplikace kompilována s /clr, ale nikoli s /openmp, je načten do domény aplikace jiné než výchozí, ale pokud proces zahrnuje aplikaci, která byla zkompilována s /openmp.

  • Pokud předáte váš /clr aplikace nástroj, jako je například regasm.exe (Regasm.exe (nástroj registrace sestavení)), který jeho cíl sestavení načte do domény aplikace jiné než výchozí.

Zabezpečení přístupu kódu modulu common language runtime nefunguje v oblasti OpenMP.Pokud aplikujete CLR atribut zabezpečení přístupu kódu mimo paralelní region, nebude ve skutečnosti v oblasti paralelní.

Microsoft výzva, že nelze zapsat /openmp aplikace, které umožňuje částečně důvěryhodné volající, pomocí AllowPartiallyTrustedCallersAttribute, nebo všechny atributy zabezpečení přístupu kódu modulu CLR.

Chcete-li nastavit tuto možnost kompilátoru ve vývojovém prostředí Visual Studio

  1. Otevřete dialogové okno projektu Stránky vlastností.Další informace naleznete v tématu Postupy: Otevření stránek vlastností projektu.

  2. Rozbalte uzel Vlastnosti konfigurace.

  3. Rozbalte uzel C/C++.

  4. Vyberte jazyka stránky vlastností.

  5. Změnit OpenMP podporu vlastnost.

Chcete-li tuto možnost kompilátoru nastavit v programu

  • Další informace naleznete v tématu OpenMP.

Příklad

Následující příklad ukazuje některé z účinků při spuštění fondu podprocesů a kdy zachovalo po jeho spuštění.X 64, jednojádrový, za předpokladu, že má dva procesory zachovalo asi 16ms spuštění.Poté však není náklady zachovalo jen velmi málo.

Pokud kompilujete s /openmp, druhé volání test2 nikdy spouští déle, než pokud kompilujete s /openmp-, je bez spuštění fondu podprocesů.Na milión iterací /openmp je rychlejší než verze /openmp- verze pro druhé volání test2 a na 25 iterací /openmp- a /openmp registru verze nižší než rozlišovací schopnost hodiny.

Ano, pokud máte pouze jeden cyklus v aplikaci a spustí se v menší než 15ms (upravenou pro přibližné režie v počítači), /openmp nemusí být vhodné, ale pokud je více než cokoli, je vhodné zvážit použití /openmp.

// cpp_compiler_options_openmp.cpp
#include <omp.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>

volatile DWORD dwStart;
volatile int global = 0;

double test2(int num_steps) {
   int i;
   global++;
   double x, pi, sum = 0.0, step;

   step = 1.0 / (double) num_steps;

   #pragma omp parallel for reduction(+:sum) private(x)
   for (i = 1; i <= num_steps; i++) {
      x = (i - 0.5) * step;
      sum = sum + 4.0 / (1.0 + x*x);
   }

   pi = step * sum;
   return pi;
}

int main(int argc, char* argv[]) {
   double   d;
   int n = 1000000;

   if (argc > 1)
      n = atoi(argv[1]);

   dwStart = GetTickCount();
   d = test2(n);
   printf_s("For %d steps, pi = %.15f, %d milliseconds\n", n, d, GetTickCount() - dwStart);

   dwStart = GetTickCount();
   d = test2(n);
   printf_s("For %d steps, pi = %.15f, %d milliseconds\n", n, d, GetTickCount() - dwStart);
}

Viz také

Referenční dokumentace

Možnosti kompilátoru

Nastavení možností kompilátoru