Примеры Джулии для сравнения производительности с R seem particularly convoluted. https://github.com/JuliaLang/julia/blob/master/test/perf/perf.RУскорение плохих письменных примеров Джулии
Какова максимальная производительность, которую вы можете извлечь из двух приведенных ниже алгоритмов (желательно с объяснением того, что вы изменили, чтобы сделать ее более R-подобной)?
## 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)
Для начала, http://rtricks.blogspot.ca/2007/04/mandelbrot-set-with-r-animation.html –
добра пользы ... получить R программистов для программирования R. – John
(1) Вот пример фибоначчи в R johnmyleswhite.com/notebook/2012/03/31/julia-i-love-you, и кажется, что они используют это, чтобы заключить, что Джулия была быстрее, но проверяя мои комментарии ниже сообщения в блоге I смог переписать решение R (все еще только с чистым R) и заставить его работать в 2000 раз быстрее. (2) Многие могут быть запущены на 3x-4 раза быстрее в R путем компиляции байтов, и это даже не требует, чтобы вы изменили код. (3) Многие из примеров сложены с R с самого начала, поскольку они используют рекурсию, в которой R не подходит. Включение проблем в микс, которые легко векторизованы, будет более справедливым. –