SORU
26 Temmuz 2015, Pazar


Konuları sadece 22 MB toplam bellek kullanımı rağmen yığın taşması Haskell?

Ray-tracer bir parallelize için çalışıyorum. Bu küçük hesaplamaları çok uzun bir liste var demektir. Vanilya programı 67.98 saniye içinde belirli bir sahne ve toplam bellek kullanımı ve 99.2% verimlilik 13) üzerinde çalışır.

Benim ilk denemem paralel Strateji parBuffer 50 lik bir tampon boyutu ile kullandım. Seçtim parBuffer çünkü bunun üzerinden yürüyor listesini sadece hızlı olarak kıvılcım tüketilen, değil kuvvet omurga listesi gibi parList, bunun için bir sürü anısı bu yana liste çok uzun. -N2 ile 100.46 saniye ve toplam bellek kullanımı ve 97.8% verimlilik 14 MB zamanı geldi. Spark bilgi: SPARKS: 480000 (476469 converted, 0 overflowed, 0 dud, 161 GC'd, 3370 fizzled)

Büyük oranda suya düştü kıvılcım gösteren bir ayrıntı kıvılcım çok küçük, bu yüzden bir sonraki çalıştım kullanarak strateji parListChunk, böler listesine parçalar ve oluşturur bir kıvılcım için her parça. 0.25 * imageWidth bir yığın boyutu ile en iyi sonuçları aldım. Programın toplam bellek kullanımı ve oran yþzde 97,3% verimlilik 93.43 saniye ve 236 MB koştu. Spark bilgi: SPARKS: 2400 (2400 converted, 0 overflowed, 0 dud, 0 GC'd, 0 fizzled). Çok daha fazla bellek kullanımı parListChunk listenin omurga zorlar inanıyorum.

Sonra tembel parçalar halinde liste bölünmüş ve daha sonra parBuffer parçalar geçti kendi stratejimi yazmaya çalıştım ve sonuçları birleştirilmiş.

 concat $ withStrategy (parBuffer 40 rdeepseq) (chunksOf 100 (map colorPixel pixels))

Bu saniye 95.99 ve toplam bellek kullanımı ve 98.8 " MB verimlilik koştu. Bu kıvılcım dönüştürülmektedir ve bellek kullanımı çok daha düşüktür, bu anlamda başarılı olduğunu, ancak hızı artırıldı. İşte olay günlüğü profilini parçası bir görüntü*.19*

Gördüğünüz gibi, bu iş parçacığı yığın taşması nedeniyle durduruldu. Varsayılan yığın boyutunu artırır RTS -M1G ekleme sonuna kadar 1Gb etmeye çalıştım. Sonuçlar değişmedi. Haskell ana iş parçacığı, ben de varsayılan boyutu çok yığın RTS -M1G -K1G ile artan çalıştı ama bu da bir önemi yoktu o yüzden taşması yığın, yığın bellek kullanacağı okudum.

Deneyebileceğim başka bir şey var mı? Ben post daha ayrıntılı bilgi için profil oluşturma bellek kullanımı veya olay günlüğü gerekirse, ben yapmadım dahil hepsini çünkü çok fazla bilgi ve yaptığımı da düşünmüyorum bu oldu gerekli vardır.

Haskell RTS multicore support, hakkında bir kitap okuyordum ve orada bir YÖK (Haskell Yürütme İçeriği) her bir çekirdek için olduğu konuşuluyor. EDİT: Her HEC, diğer şeyler arasında, Ayırma Alanı tek bir paylaşılan bir yığın bir parçası olan) içerir. Herhangi HEC Tahsisat Alan bitti her çöp toplama gerçekleştirilmelidir. RTS option bir kontrol için görünüyor-A. çalıştım -A32M ama hiç bir fark görmedim.

EDİT2: Here is a link to a github repo dedicated to this question. Profil klasöründe profil sonuçlarını ekledim.

EDİT3: İşte kod: ilgili bit

render :: [([(Float,Float)],[(Float,Float)])] -> World -> [Color]
render grids world = cs where 
  ps = [ (i,j) | j <- reverse [0..wImgHt world - 1] , i <- [0..wImgWd world - 1] ]
  cs = map (colorPixel world) (zip ps grids)
  --cs = withStrategy (parListChunk (round (wImgWd world)) rdeepseq) (map (colorPixel world) (zip ps grids))
  --cs = withStrategy (parBuffer 16 rdeepseq) (map (colorPixel world) (zip ps grids))
  --cs = concat $ withStrategy (parBuffer 40 rdeepseq) (chunksOf 100 (map (colorPixel world) (zip ps grids)))

Izgaralar rastgele ve colorPixel tarafından önceden hesaplanan kullanılan yüzer.colorPixel türü:

 colorPixel :: World -> ((Float,Float),([(Float,Float)],[(Float,Float)])) -> Color

CEVAP
2 Temmuz 2013, Salı


Windows Vista Security Model Analysis göre farklı IL arasında gidip adında bir kanal gibi Paylaşılan Nesneler kullanmak gerekir. Ayrıca, paylaşılan bir nesne IL en IL kullanılan eşdeğer olmalıdır.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Alfredo Garcia

    Alfredo Garc

    25 Mayıs 2007
  • BASS212M

    BASS212M

    15 Temmuz 2009
  • MagmaRhino

    MagmaRhino

    16 Temmuz 2011