SORU
27 HAZİRAN 2012, ÇARŞAMBA


Paralel Repa dizilerinde mapM

Gibbs sampling, work benim son, benim görüşüme göre, rasgele sayı üretimi için yakın ideal bir arayüz sağlayan RVar iyi yapıyorum. Ne yazık ki, Repa kullanımı haritalarda monadic eylemleri kullanmak için yetersizlik nedeniyle yapamaz oldum.

Daha açık bir monadic haritalar olamaz parallelized genel olarak, bana öyle geliyor ki, RVar olabilir en azından bir örnek, bir monad nereye etkileri olabilir güvenli bir şekilde paralelleştirilmiş (en azından prensip olarak; ben pek aşina iç yapısı RVar). Yani, aşağıdaki gibi bir şey yazmak istiyorum

drawClass :: Sample -> RVar Class
drawClass = ...

drawClasses :: Array U DIM1 Sample -> RVar (Array U DIM1 Class)
drawClasses samples = A.mapM drawClass samples

A.mapM gibi olacaktır nerede

mapM :: ParallelMonad m => (a -> m b) -> Array r sh a -> m (Array r sh b)

Daha açık nasıl olur bu iş değişir önemlisi uygulanması RVar ve onun temel RandomSource, prensip olarak bir sanman bu çizim içeren yeni bir rasgele tohum için her iş parçacığı kökenli ve devam her zamanki gibi.

Sezgisel olarak, bu aynı fikri başka monadlar için genelleme olabilir gibi görünüyor.

Peki, sorum şu: hangisi için etkileri güvenle parallelized olabilir monadlar bir sınıf ParallelMonad (muhtemelen, en azından yaşadığı, RVar) inşa Edebilir?

Bu neye benziyor acaba? Diğer monadlar bu sınıf yaşamak ne olabilir? Bu Repa iş nasıl olabileceği ihtimalini düşündünüz başkaları var mı?

Son olarak, eğer bu düşünce ile paralel monadic eylemleri olamaz genelleştirilmiş, herkes her gördüğüne güzel şekilde bu işi yapmak için belirli bir davanın RVar (nerede olacağını çok yararlı)? Paralellik için RVar vazgeçmek çok zor bir anlaşma olduğunu.

CEVAP
16 AĞUSTOS 2015, Pazar


@~ baskı uygulamasıdır.

Köşeli parantez rol alan türlerine altını mektubu tarafından verilen refleksif bir zorlama göstermek.

Böylece <Nat.Flip x_ap0H>_N Nat.Flip x_apH Nat.Flip x_apH eşit nominal (eşit türleri değil, sadece eşit temsilleri olarak) eşitlik bir kanıtıdır.

PS çok tartışma var. Akıllı yapıcı $WPS baktığımızda ilk iki x türlerini görmek ve sırasıyla y edebiliriz. Yapıcı tartışma Flip x olduğuna dair kanıtımız var (bu durumda Flip x ~ Even var. Biz o kanıtları x ~ Flip y y ~ Flip x. Son bağımsız ParNat x bir değerdir.

Şimdi 25 ** yazın ilk döküm üzerinden yürüyeceğim

(Nat.ParNat ...)_R ile başlıyoruz. Bu tür yapıcı bir uygulamadır. Nat.ParNat x_aIX ~# Nat.ParNat 'Nat.Odd 27 *kanıtı kaldırıyor. R türleri izomorfik ama aynı değil (bu durumda aynı ama bu Bilgi döküm gerçekleştirmek gerek yok) bu representationally anlamı yok demektir.

Şimdi geçirmez ana gövde (dt1_dK7 ; (Nat.Flip (dt2_dK8 ; Sym dt_dK6))_N; Nat.TFCo:R:Flip[0]) bakıyoruz. ; sırada bu deliller geçerli transitivty yani demek oluyor.

dt1_dK7 x_aIX ~# Nat.Flip y_aIY bir kanıtıdır.

(dt2_dK8 ; Sym dt_dK6) bakacak olursak. dt2_dK8 y_aIY ~# Nat.Flip x_aIX gösterir. dt_dK6 38 ** tür. Sym dt_dK6 türü Nat.Flip x_aIX ~# 'Nat.Even (dt2_dK8 ; Sym dt_dK6) 42 ** tür

Böylece (Nat.Flip (dt2_dK8 ; Sym dt_dK6))_N 44* *bir kanıtıdır.

Nat.TFCo:R:Flip[0] Nat.Flip 'Nat.Even ~# 'Nat.Odd' olan flip ilk şartıdır .

Birlikte bu (dt1_dK7 ; (Nat.Flip (dt2_dK8 ; Sym dt_dK6))_N; Nat.TFCo:R:Flip[0]) get koyarak x_aIX #~ 'Nat.Odd türü vardır.

Daha karmaşık ikinci atın çalışmak için biraz daha zordur ama aynı prensip üzerinde çalışmak gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • GenTechPC

    GenTechPC

    1 Temmuz 2007
  • ItZWaffleS420

    ItZWaffleS42

    9 EYLÜL 2011
  • RogerBuckChrist

    RogerBuckChr

    9 Temmuz 2011