Aracılığıyla paylaş


/openmp (OpenMP 2.0 Desteğini Etkinleştir)

İşlemek derleyici neden #pragmaomp.

/openmp

Notlar

#pragma ompbelirtmek için kullanılan OpenMP Yönergeleri ve OpenMP Yan Tümceleri.Yoksa /openmp belirtilmemiş bir derlemede derleyicisinin yoksaydığı OpenMP yan tümceleri ve yönergeleri.OpenMP işlevi çağrıları derleyici olsa dahi tarafından işlenen /openmp belirtilmedi.

İle derlenmiş bir uygulamanın /openmp ve OpenMP Kitaplıkları yalnızca Windows 2000 veya sonraki işletim sistemleri üzerinde çalışabilir.

İle derlenmiş uygulamalar /openmp ve /clr yalnızca tek bir uygulama etki alanı işleminde; Çalıştır birden çok uygulama etki alanları desteklenmez.Modül oluşturucuyu (.cctor) çalıştırdığınızda, diğer bir deyişle, bu işlem ile derlenmiş algılar /openmp ve uygulama varsayılan dışı çalışma zamanı modülü yüklüyse.Daha fazla bilgi için bkz. appdomain, /clr (Ortak Dil Çalışma Zamanı Derlemesi) ve Karışık Derlemeleri Başlatma.

İle derlenmiş bir uygulamanın yükleme girişimi, /openmp ve /clr bir varsayılan olmayan uygulama etki alanına bir TypeInitializationException özel hata ayıklayıcı durum ve hata ayıklayıcı'OpenMPWithMultipleAppdomainsException istisnası atılır.

Bu özel durumlar aşağıdaki durumlarda yükseltilmiş olması:

  • Uygulamanız ile derlenmişse /clr, birlikte değil /openmp, bir varsayılan olmayan uygulama etki alanına, ancak burada ile derlenmiş bir uygulamanın işlem içerir yüklü olduğu /openmp.

  • Geçirirseniz, /clr regasm.exe gibi bir yardımcı uygulama (Regasm.exe (Derleme Kayıt Aracı)), varsayılan olmayan uygulama etki alanına kendi hedef derlemeler yükler.

Ortak dil çalışma zamanı'nın kod erişim güvenliği OpenMP bölgelerde işe yaramıyor.CLR kod erişim güvenlik özniteliği bir paralel bölgesi dışında uygularsanız, paralel bölgenizde geçerli olmayacaktır.

Microsoft, arşivlemenin değil yazdığınız olduğunu /openmp kısmen veren uygulamaları kullanarak arayanlar, güvenilir AllowPartiallyTrustedCallersAttribute, veya tüm CLR kod erişim güvenlik öznitelikleri.

Visual Studio geliştirme ortamındaki bu derleyici seçeneğini ayarlamak için

  1. Projenin Özellik Sayfaları iletişim kutusunu açın.Ayrıntılar için bkz. Nasıl Yapılır: Proje Özellik Sayfalarını Açma.

  2. Yapılandırma Özellikleri düğümünü genişletin.

  3. Genişletme C/C++ düğümü.

  4. Seçin Dil özellik sayfası.

  5. Değiştirme OpenMP destek özelliği.

Bu derleyici seçeneğini program üzerinden ayarlamak için

Örnek

Aşağıdaki örnek bazı iş parçacığı havuzu başlangıç çalışmaya başladıktan sonra iş parçacığı havuzu kullanarak karşı etkilerini gösterir.X 64, tek çekirdekli varsayarak çift işlemcili iş parçacığı havuzu yaklaşık 16ms başlangıç olarak alır.Bundan sonra yine de var. iş parçacığı havuzu için çok az maliyet.

Ne zaman derleme ile /openmp, test2 ikinci çağrısı ile derleme daha artık hiçbir zaman çalışır /openmp-, hiçbir iş parçacığı havuzu başlangıç olarak.Bir milyon yineleme sırasında /openmp sürümü daha hızlı /openmp- ikinci bir çağrı test2 için ve 25 yinelemeler için sürüm /openmp- ve /openmp kayıt sürümlerini saat parçalı yapı'dan.

Bunu uygulamanızdaki tek bir döngü varsa ve küçüktür (yaklaşık yükü makinenizde için ayarlanmış), 15ms içinde çalışan /openmp , uygun olmayabilir, ancak, birden fazla bir şey ise, kullanmayı düşünebilirsiniz /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);
}

Ayrıca bkz.

Başvuru

Derleyici Seçenekleri

Derleyici Seçeneklerini Ayarlama