R ile Yüksek Performanslı Programlama — 3
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.