Sdílet prostřednictvím


/openmp (Povolit OpenMP 2.0 podpora)

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

/openmp

Poznámky

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

Aplikace zkompilována /openmp a OpenMP knihoven lze spustit pouze v systému Windows 2000 nebo novější operační systémy.

Aplikace zkompilována /openmp a /clr lze spustit pouze v jedné aplikaci domény procesu; více domén aplikace není podporována.Je při spuštění modulu konstruktoru (.cctor) zjistí proces je kompilována s /openmp a pokud aplikace je načten do jiné než výchozí runtime.Další informace naleznete v tématu AppDomain, /CLR (kompilace společné Language Runtime) a Inicializace smíšených sestavení.

Při pokusu o načtení aplikace zkompilována /openmp a /clr do aplikace jiné než výchozí doménu, TypeInitializationException bude výjimka data mimo debugger a OpenMPWithMultipleAppdomainsException výjimka bude vyvolána v debuggeru.

Tyto odchylky lze zvýšit také v následujících situacích:

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

  • Předáte vaše /clr použití nástroje, jako je například regasm.exe (Regasm.exe (sestavení registrační nástroj)), které jeho sestavení cílového načte do aplikace jiné než výchozí domény.

Zabezpečení přístupu ke kódu common language runtime nefunguje v OpenMP regionech.Pokud aplikujete atribut zabezpečení přístupu kódu CLR mimo paralelní region, jeho se neuplatní v oblasti paralelní.

Microsoft dá pokyn, že můžete zapsat /openmp důvěryhodné aplikace, které částečně umožňuje volajícím, pomocí AllowPartiallyTrustedCallersAttribute, nebo atributy zabezpečení přístupu kódu 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 Jak: otevření stránky vlastností projektu.

  2. Rozbalte uzel Vlastnosti konfigurace.

  3. Rozbalte C/C++ uzel.

  4. Vyberte jazyk stránky vlastností.

  5. Změnit Podporu OpenMP vlastnost.

Programově nastavit tuto volbu kompilátoru

Příklad

Následující ukázka představuje některé efekty zachovalo spuštění oproti použití zachovalo po jeho spuštění.X 64 jednojádrové, za předpokladu, že duální procesor zachovalo trvá asi 16ms spuštění.Po, přestože je velmi málo náklady zachovalo.

Při sestavování s /openmp, druhé volání test2 nikdy spouští déle, než při kompilaci 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 verze rejstříku menší než rozlišení hodin.

Ano, pokud máte pouze jeden cyklus v aplikaci a spustí se v méně než 15ms (upravenou pro přibližný režie v počítači) /openmp nemusí být vhodné, ale pokud je více než nic, můžete 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

Možnosti nastavení kompilátoru