SORU
1 NİSAN 2012, Pazar


Hızlandırmak Julia'In kötü yazılmış R örnekler

Julia R seem particularly convolutedkarşı performansını karşılaştırmak için örnekler. https://github.com/JuliaLang/julia/blob/master/test/perf/perf.R

İki algoritma aşağıda (tercihen Ar-sanki daha fazla yapmak için ne değişti bir açıklama ile) eke en hızlı performansı nedir?

## mandel

mandel = function(z) {
    c = z
    maxiter = 80
    for (n in 1:maxiter) {
        if (Mod(z) > 2) return(n-1)
        z = z^2 c
    }
    return(maxiter)
}

mandelperf = function() {
    re = seq(-2,0.5,.1)
    im = seq(-1,1,.1)
    M = matrix(0.0,nrow=length(re),ncol=length(im))
    count = 1
    for (r in re) {
        for (i in im) {
            M[count] = mandel(complex(real=r,imag=i))
            count = count   1
        }
    }
    return(M)
}

assert(sum(mandelperf()) == 14791)

## quicksort ##

qsort_kernel = function(a, lo, hi) {
    i = lo
    j = hi
    while (i < hi) {
        pivot = a[floor((lo hi)/2)]
        while (i <= j) {
            while (a[i] < pivot) i = i   1
            while (a[j] > pivot) j = j - 1
            if (i <= j) {
                t = a[i]
                a[i] = a[j]
                a[j] = t
            }
            i = i   1;
            j = j - 1;
        }
        if (lo < j) qsort_kernel(a, lo, j)
        lo = i
        j = hi
    }
    return(a)
}

qsort = function(a) {
  return(qsort_kernel(a, 1, length(a)))
}

sortperf = function(n) {
    v = runif(n)
    return(qsort(v))
}

sortperf(5000)

CEVAP
23 Mayıs 2012, ÇARŞAMBA


Bu, söz konusu anahtar kelime "": . algoritma

Ne iki kıt en hızlı performansalgoritmalarıaşağıda (tercihen Ar-sanki daha fazla yapmak için ne değişti bir açıklama ile)?

"Bu ne kadar hızlı yapabilirsiniz gibialgoritmalarıR?" Söz konusu algoritmalar burada standart Mandelbrot karmaşık döngü yineleme algoritması ve standart özyinelemeli quicksort çekirdek.

Kesinlikle sorun bu kriterler ortaya atılan cevaplar hesaplamak için hızlı yolu vardır, ama aynı algoritmaları kullanarak değil. Özyineleme önlemek için, yineleme önlemek ve iyi değil ne olursa olsun önleyebilirsiniz. Ama artık algoritmalar ile karıştırıyorsunuz.

Eğer gerçekten R Mandelbrot kümesi hesaplamak veya numaraları sıralamak istedim, evet, bu kodu yazarsınız. Mümkün olduğunca, böylece önceden tanımlanmış C çekirdekler tüm iş itme – vektörize ya da sadece özel bir C uzantısı yazma ve hesaplama var ya yok. Her iki şekilde de, sonuç R kendi başına çok iyi bir performans elde etmek için yeterince hızlı değil – iyi bir performans elde etmek için C işin çoğunu yapmak gerekir.

Ve bu tam olarak bu kriterleri noktası: Julia hiç C kodu üzerinde iyi bir performans elde etmek için kullanır. Sadece saf Julia ne yapmak istediğinizi yazabilirsiniz ve iyi bir performansa sahip olacaktır. Eğer yinelemeli döngü skaler bir algoritma yapmak istediğini yapmak en doğal yolu ise, o zaman sadece bunu. Eğer özyineleme sorunu çözmek için en doğal yolu ise, bu da Tamam. Hiçbir noktada ister doğal vektörleştirme ile performans için C güveniyor – zorla ya da özel C uzantıları yazma. Tabii ki, senolabilirgenellikle Lineer Cebir; ve sizin içinde doğal olarak, ne zaman vectorized kod yazmakolabilireğer sen zaten istediğini yapan bir kütüphane varsa C Ara. Ama gerek yok.

Diller arasında aynı algoritmalar olabildiğince adil bir karşılaştırma yapmak istiyoruz:

  1. Eğer birisi R daha hızlı sürümleri olan varsaaynı algoritmayı kullanırlütfen yamalar gönderin!
  2. Sanırım o R kriterler üzerinde julia site zaten bayt derlenmiş, ama yaptığımın yanlış ve haksız bir karşılaştırma için R, lütfen bana bildirin ve ben düzeltme ve güncelleme kriterleri.

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • Microsoft Research

    Microsoft Re

    24 EKİM 2008
  • Missouri Star Quilt Company

    Missouri Sta

    18 ŞUBAT 2009