Aracılığıyla paylaş


parallel_for_each işlevi (C++ amp)

Hesaplama alanı genelinde bir işlev çalıştırır.Daha fazla bilgi için bkz. C++ amp genel bakış.

template <
   int _Rank,
   typename _Kernel_type                     
>
void parallel_for_each(
   const extent<_Rank>& _Compute_domain,
   const _Kernel_type &_Kernel                     
);
                     
template <
   int _Dim0,
   int _Dim1,
   int _Dim2,
   typename _Kernel_type                     
>
void parallel_for_each(
   const tiled_extent<_Dim0,
   _Dim1,
   _Dim2>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   int _Dim1,
   typename _Kernel_type                     
>
void parallel_for_each(
   const tiled_extent<_Dim0,
   _Dim1>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   typename _Kernel_type                     
>
void parallel_for_each(
   const tiled_extent<_Dim0>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Rank,
   typename _Kernel_type                     
>
void parallel_for_each(
   const accelerator_view& _Accl_view,
   const extent<_Rank>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   int _Dim1,
   int _Dim2,
   typename _Kernel_type                     
>
void parallel_for_each(
   const accelerator_view& _Accl_view,
   const tiled_extent<_Dim0,
   _Dim1,
   _Dim2>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   int _Dim1,
   typename _Kernel_type                     
>
void parallel_for_each(
   const accelerator_view& _Accl_view,
   const tiled_extent<_Dim0,
   _Dim1>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);
                     
template <
   int _Dim0,
   typename _Kernel_type                     
>
void parallel_for_each(
   const accelerator_view& _Accl_view,
   const tiled_extent<_Dim0>& _Compute_domain,
   const _Kernel_type& _Kernel                     
);

Parametreler

  • _Accl_view
    Paralel hesaplama yapabilmek için accelerator_view nesnesi.

  • _Compute_domain
    Hesaplama için gerekli dataları tutan extent nesnesi.

  • _Dim0
    tiled_extent nesnesinin ölçüleri.

  • _Dim1
    tiled_extent nesnesinin ölçüleri.

  • _Dim2
    tiled_extent nesnesinin ölçüleri.

  • _Kernel
    Paralel hesaplama yapan ve "Dizin <_Sıra>" türünde bir bağımsız değişken alın bir lambda veya fonksiyon nesnesi.

  • _Kernel_type
    Lambda veya functor.

  • _Rank
    Kapsamın derecesi.

Notlar

parallel_for_each işlevi hızlandırıcı aygıtlarda paralel veri hesaplaması başlatır.parallel_for_each aynı for_each'de oldugu gibi, bir kapsayıcı içindeki öğeleri çalıştırır.Bir parallel_for_each çagrısında kullanılan basit elemanlar etki alanı hesaplamak, bir dizinve bir çekirdek işlevidir..Ne zaman parallel_for_each çalışırsa, etki alanında bulunan her dizin için paralel bir etkinlik çalışır.Paralel etkinliği girdi veya çıktı dizilerindeki öğelere erişmek için kullanabilirsiniz.Bir parallel_for_each 'e gelen çağrı sanki eşzamanlıymış gibi davranır.Pratikte, ayrı bir aygıtta çalıştığı için, çağrı zaman uyumsuz.Paralel etkinliklerde bölünmemiş parallel_for_each çalışırken sıralamanın ve tutarlılığın garantisi yoktur.Etkinlikler sadece atomik işlevlerini kullanarak iletişim kurar.

Bir parallel_for_each 'in döşenmiş sürümü sabit boyutu ve 1, 2 ya da 3 olan döşemelere paralel aktiviteleri tiled_extent değişkeninde belirtildiği gibi döşemesini organize eder.Aynı döşemedeki iş parçacıkları static_döşeme 'de ki bütün değişkenlere erişim hakkına sahiptir.Bir tile_barrier::Wait yöntemi yöntemi kullanarak statik_döşeme 'de tanımlanan değişkenleri kullanarak senkronize edebilirsiniz.Aşağıdaki kısıtlamalar döşenmiş parallel_for_each'e uygulanır :

  • Ürünün döşeme boyutları 1024'ü geçemez.

    • 3B: B0 * B1 * B2 ≤ 1024; ve B0 ≤ 64

    • 2B: B0* B1 ≤ 1024

    • 1B: B0 ≤ 1024

  • İlk parametre olarak sağlanan döşenmiş kılavuz parallel_for_each boyunca her biri kendi boyutlarına karşılık gelen hükümlere göre bölünebiler olması gerekir.

Daha fazla bilgi için bkz. Döşemeleri kullanarak.

parallel_for_each kodu bir hızlandırıcı üzerinde, genellikle de bir gpu aygıtında çalışır.Bir hızlandırıcıyı doğrudan parallel_for_each 'e isteğe bağlı bir accelerator_view parametresi ile gönderebilirsiniz.Aksi durumda, array<T,N> nesnesi türünde seçilen hızlandırıcılar çekirdek işlevinde yakalanır.Tüm diziler aynı hızlandırıcı bağlı değilse, bir istisna atılır.Bir tiled_index değişkeni çekirdeğe geçerken kullanılan döşemeye yakın olan bir dizinler kümesi içerir.

_Kernel parametresi parallel_for_each işlevinin lambda ya da işlev nesnesi olması gerekir.Hızlandırıcı üzerinde çalıştırmak için lambda restrict(amp) yan tümcesi içermelidir,ayrıca ek kısıtlamalar da içerebilir.Kısıtlama yan tümcesi çekirdek işlevine çeşitli kısıtlamalar getirir.Daha fazla bilgi için bkz. Kısıtlama yan tümcesi (C++ amp).

Bir _Kernel değişkenini çağırmak için aşağıdakilerden birini kullanabilirsiniz:

  • Döşenmemiş: index<N>, burada N ile aynı mertebeyi olmalıdır extent<N> ki parallel_for_eachkullanabilsin.

  • Döşenmiş: Bir tiled_index nesnesi, boyutları uyuşan tiled_extent nesnelerinin parallel_for_eachçağırmada kullanılan nesneleridir.

Çekirdek işlevini voiddöndürmelidir .

Çekirdek işlevi başka bir değişken daha almadığı için, kernelde işlenen diğer datalar lambda ya da işlev nesneleri ile yakalanır.Yakalanan tüm veriler değere göre gönderilmelirdir, fakat array<T,N> nesnelerinin, başvuru veya işaretçi tarafından yakalanması gerekir.Yakalanacak nesne türleri üzerinde de bazı sınırlamalar uygulanabilir.Daha fazla bilgi için bkz. Kısıtlama yan tümcesi (C++ amp).

Eğer parallel_for_eachbaşlatmaya çalışırken bir hata meydana gelirse, çağrı çalışma zamanı bir istisna fırlatır.İstisnalar aşşağıdaki sebeplerle fırlatılabilir:

  • Gölgelendirici oluşturma hatası.

  • Arabellekler oluşturulamıyor.

  • Geçersiz uzantı geçirildi.

  • Eşleşmeyen hızlandırıcılar.

Gereksinimler

Üst bilgi: amp.h

Ad Alanı: Concurrency

Ayrıca bkz.

Başvuru

Eşzamanlılık ad (C++ amp)