R ile Yüksek Performanslı Programlama — 3

Onur Boyar
2 min readJan 19, 2019

--

Harajuku Metro İstasyonu

Daha Yüksek Performans İçin Basit Yöntemler

R ile Yüksek Performanslı Programala serimizin üçüncü yazısında vektörizasyon ve bellek ayırma yöntemlerini tartışacağız.

Vektörizasyon

Vektörizasyon en temel yöntemlerdendir. Bunu Udemy dersimizde bulunan Vektörleştirme kısmında detaylı bir şekilde işledik. O nedenle burada detaya girmeyeceğim. For döngüsü ile apply fonksiyonu arasındaki performans farkı bu yöntemin etkisini bize gösteriyor.

Önceden Bellek Ayırma

Bu dersimizde detaylı konuşacağımız iki konseptten birisi ‘Önceden Bellek Ayırma’. Eğer daha önce C, Java gibi dillerle çalıştıysanız aslında bunu yaptınız. Bu işlemin sebebi yaratacağımız değişkele çalışmaya başlamadan onu boş bir şekilde yaratarak ona ihtiyacı duyduğu belleği atamaktır. Bu sayede sonrasında yapacağımız işlemler daha hızlı gerçekleşmektedir. Örnek bunu anlamanıza yardımcı olacaktır.

N <- 1e4
data_series1 <- 1
system.time(for(j in 2:N){
data_series1 <- c(data_series1, data_series1[j — 1] + sample(-5:5, size = 1))
})
user system elapsed
0.249 0.056 0.307

Burada ilk olarak boş bir vektör yaratarak önceden bellek ayırmadık. Şimdi ayırdığımız versiyonunu uygulayalım.

N <- 1e4
data_series2 <- numeric(N)
data_series2[1] <- 1
system.time(for(j in 2:N){
data_series2[j] <- data_series2[j — 1] + sample(-5:5, size = 1)
}
)
user system elapsed
0.061 0.002 0.065

‘elapsed’ kısımlarını karşılaştırdığımızda performans farkını rahatça görebiliyoruz. 0.24 saniye gibi bir farkı az bulduysanız bir de şöyle bir örnek yapalım :)

N <- 1e5
data_series1 <- 1
system.time(for(j in 2:N){
data_series1 <- c(data_series1, data_series1[j — 1] + sample(-5:5, size = 1))
}
)
user system elapsed
23.584 8.139 32.325

İşlem sayısını 10 kat arttırdık. Bu sefer bellek ayırma yapmadığımız yöntem 32 saniye sürdü. Şimdi bir de bellek ayırarak yapalım.

N <- 1e5
data_series2 <- numeric(N)
data_series2[1] <- 1
system.time(for(j in 2:N){
data_series2[j] <- data_series2[j - 1] + sample(-5:5, size = 1)
}
)
user system elapsed
0.500 0.023 0.532

Bellek ayırdığımız yöntem yalnızca 0.5 saniye sürdü! Sanırım bu bellek ayırmanın etkisini göstermede daha etkili olmuştur :)

R ile ilgili daha fazla içerik ve video dersler için R Programlama ile Veri Bilimi isimli Udemy kursumu inceleyebilirsiniz.

Sıradaki yazımız için tıklayın!

--

--