Rprof ve profvis ile Kod Profilleme
Betiklerinizde en fazla zaman tüketen işlevleri belirleyin.
Rprof ve profvis ile Kod Profilleme, CoddyKit'te ücretsiz bir R Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, R Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. R Academy kursu toplamda 4 dersten oluşur.
Profil Çıkarma Nedir?
Süre ölçümü, kodun ne kadar süre çalıştığını söyler. Profil çıkarma ise bu kodun içinde zamanın nerede harcandığını gösterir. R'nin profil oluşturucusu, hangi işlevlerin maliyetli olduğuna dair istatistiksel bir görünüm oluşturmak için çağrı yığınından düzenli aralıklarla örnekler alır.
İki temel araç vardır: yerleşik Rprof() ve etkileşimli profvis paketi.
Rprof() İşlevini Başlatma ve Durdurma
Rprof('output.prof', interval = 0.01) profil oluşturucuyu başlatır. Çağrı yığını örneklerini her 10 ms'de bir dosyaya yazar. Yavaş kodunuzu çalıştırdıktan sonra kaydı durdurmak için Rprof(NULL) çağrısını yapın.
interval bağımsız değişkeni, saniye cinsinden örnekleme sıklığını denetler — daha küçük değerler daha yüksek çözünürlük, ancak daha büyük çıktı dosyaları sağlar.
# Pattern — do not run Rprof inside knitr/Quarto
# Rprof('my_profile.prof', interval = 0.01)
#
# slow_function <- function(n) {
# x <- numeric(n)
# for (i in seq_len(n)) x[i] <- sqrt(i)
# sum(x)
# }
# slow_function(500000)
#
# Rprof(NULL) # stop profilingSonuçları summaryRprof() ile Okuma
summaryRprof('output.prof') profil dosyasını ayrıştırır ve iki veri çerçevesi içeren bir liste döndürür:
- by.self — her işlevin kendi içinde harcadığı süre (çağırdığı işlevler hariç)
- by.total — o işlev tarafından çağrılan tüm işlevler dâhil toplam süre
Sıcak noktaları bulmak için self.pct değerine göre sıralayın.
# After Rprof() run:
# prof <- summaryRprof('my_profile.prof')
# head(prof$by.self)
#
# Example output columns:
# self.time self.pct total.time total.pct
# slow_fn 1.22 61.0 1.98 99.0
# sqrt 0.76 38.0 0.76 38.0
# sum 0.02 1.0 0.02 1.0Kendi Süresi ve Toplam Süre
Profil çıkarırken kendi süresi ile toplam süre arasındaki farkı anlamak kritik önem taşır:
- Kendi süresi — işlevin kendi satırlarını çalıştırırken harcadığı süre (çağırdığı işlevleri beklediği süre hariç)
- Toplam süre — kendi süresi ile çağırdığı tüm işlevlerde harcadığı sürenin toplamı
Toplam süresi yüksek, ancak kendi süresi düşük olan bir işlev, kendi mantığı nedeniyle değil, çağırdığı işlevler nedeniyle yavaştır. Çağıranı değil, çağrılan işlevi iyileştirin.
# Conceptual example:
# wrapper() -> process_data() -> slow_sort()
#
# total.pct: wrapper=100, process_data=90, slow_sort=85
# self.pct: wrapper=5, process_data=5, slow_sort=85
#
# => slow_sort is the real bottleneck to fix.
cat('High total + low self => the culprit is a callee function
')profvis'e Giriş
profvis, Rprof() işlevini sarar ve RStudio'da veya bir tarayıcıda etkileşimli bir HTML alev grafiği sunar. Bu grafik, ham summaryRprof() çıktısına göre okunması çok daha kolaydır.
Bir kez install.packages('profvis') ile kurun, ardından kodunuzu profvis({...}) ile sarın.
# library(profvis)
#
# profvis({
# n <- 200000
# x <- numeric(n)
# for (i in seq_len(n)) x[i] <- log(i)
# total <- sum(x)
# sorted <- sort(x)
# })profvis Alev Grafiğini Okuma
profvis çıktısında iki panel bulunur:
- Alev grafiği — genişliği süreyi gösteren yatay çubuklar; iç içe çubuklar çağrı yığını derinliğini gösterir
- Veri tablosu — her işlev ve kaynak satırı için kendi süresinin ve toplam sürenin sıralanabilir görünümü
Alev grafiğinin altındaki geniş çubuklar, en maliyetli çağıranları gösterir. Yüksek yığınlar, derin çağrı zincirlerine işaret eder.
# Reading the flame graph:
# - Each horizontal bar = one function on the call stack
# - Width proportional to time spent
# - Bottom = outermost caller, top = deepest callee
# - Click a bar to zoom in
# - 'Memory' tab shows allocation by line
cat('profvis shows self time per source line — invaluable for tight loops
')Sıcak Noktaları Belirleme
profvis çıktısını inceledikten sonra, alev grafiğinde geniş görünen ve kendi süresi yüksek olan işlevleri arayarak sıcak noktaları belirleyin. R'deki yaygın sorumlular şunlardır:
- Öğe öğe iş yapan vektörleştirilmemiş döngüler
- Döngü içinde nesneleri büyüten tekrarlanan
rbind()veyac()çağrıları - Sıkı döngülerde tekrarlanan düzenli ifade veya dize ayrıştırma işlemleri
# Before fix — growing vector in loop (common hot spot)
# profvis reveals repeated reallocations:
# result <- c()
# for (i in 1:50000) result <- c(result, i^2)
#
# After fix — pre-allocated:
# result <- numeric(50000)
# for (i in 1:50000) result[i] <- i^2
cat('Pre-allocation eliminates the most common loop hot spot
')Bellek Ayırmalarının Profilini Çıkarma
Rprof, memory.profiling = TRUE ile bellek ayırmalarını da izleyebilir. profvis, süre ölçümünün yanında bir bellek paneli gösterir. Böylece çöp toplama duraklamalarının başlıca kaynaklarından biri olan, büyük geçici nesneler ayıran işlevleri fark edebilirsiniz.
# Memory profiling with Rprof:
# Rprof('mem.prof', interval = 0.01, memory.profiling = TRUE)
# ... slow code ...
# Rprof(NULL)
# prof <- summaryRprof('mem.prof', memory = 'both')
# head(prof$by.self)
#
# profvis also shows mem delta per line automatically
cat('Memory profiling pinpoints allocation hot spots causing GC pauses
')Gerçek Bir Veri İşlem Hattığının Profilini Çıkarma
Profil çıkarmayı bir veri işlem hattına sistematik biçimde uygulayın: işlem hattının tamamını profvis({}) içine alın, en yavaş aşamayı belirleyin, onu iyileştirin ve ardından iyileşmeyi doğrulamak için yeniden profil çıkarın. Asla körlemesine iyileştirme yapmayın.
# Workflow:
# 1. profvis({ full_pipeline() }) => identify Stage 3 is 80% of time
# 2. Rewrite Stage 3 (vectorize / use data.table)
# 3. profvis({ full_pipeline() }) => confirm Stage 3 now < 10%
# 4. system.time({ full_pipeline() }) => confirm overall speedup
cat('Profile -> identify -> fix -> re-profile is the correct cycle
')Rprof Örneklemesinin Sınırlamaları
Rprof istatistiksel örnekleme kullanır; bu nedenle çok hızlı işlevler (örnekleme aralığından daha hızlı olanlar) görünmeyebilir. Çok küçük ifadeler için mikro karşılaştırmalar yaparken bunun yerine microbenchmark paketini kullanın.
Ayrıca Rprof, R arayüzünün altındaki C/C++ kodunun profilini çıkarmaz; yalnızca R düzeyindeki çağrı yığınları görünür.
# Rprof interval = 0.01s => functions faster than 10ms may not appear
# For sub-millisecond work use microbenchmark:
# microbenchmark(expr1, expr2, times = 1000L)
#
# For C-level profiling use external tools:
# - Instruments (macOS)
# - perf (Linux)
cat('Rprof is for R-level profiling; use microbenchmark for micro-timing
')R Profil Çıkarma için En İyi Uygulamalar
Güvenilir profil çıkarma sonuçları elde etmek için şu uygulamaları izleyin:
- Gerçekçi veri boyutlarıyla profil çıkarın — küçük girdiler gerçek darboğazı gizler
- Tek seferlik kurulum maliyetlerini dışarıda bırakmak için profil çıkarmadan önce ısınma yinelemeleri çalıştırın
- Yüklü paketlerin neden olacağı etkileşimi önlemek için temiz bir R oturumunda profil çıkarın
- Keşif için
profvis, CI/otomatik raporlar içinsummaryRprofkullanın
# Clean session profiling checklist:
# 1. Restart R (Ctrl+Shift+F10 in RStudio)
# 2. Load only required packages
# 3. Run once to warm up
# 4. profvis({ ... }) on second run
# 5. Compare before/after with system.time()
cat('Always profile with realistic data in a clean R session
')Hızlı Kontrol: Rprof Kendi Süresi ve Toplam Süresi
Bir işlevin summaryRprof() çıktısında total.pct = 95%, ancak self.pct = 3% değeri gösteriliyor. Bu size ne anlatır?
Profil Çıkarma Araçlarının Özeti
R size iki düzeyli bir profil çıkarma araç seti sunar:
Rprof('file.prof', interval=0.01)+Rprof(NULL)+summaryRprof()— yerleşik, betiklerle kullanılabilen ve CI dostuprofvis({...})— kaynak satırı açıklamaları ve bellek izleme özelliklerine sahip etkileşimli alev grafiği
Doğru iş akışı her zaman şöyledir: önce ölçün, en sıcak noktayı belirleyin, yalnızca onu iyileştirin ve ardından kazanımı doğrulamak için yeniden ölçün.
Yapay zeka eğitmeniyle R öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 43
- Dersler
- 159
Sıkça Sorulan Sorular
“Rprof ve profvis ile Kod Profilleme” dersi ücretsiz mi?
Evet — “Rprof ve profvis ile Kod Profilleme” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve R Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. R Academy kursu toplamda 4 dersten oluşur.
“Rprof ve profvis ile Kod Profilleme” dersinde ne öğreneceğim?
Betiklerinizde en fazla zaman tüketen işlevleri belirleyin. R Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
R Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te R Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Rprof ve profvis ile Kod Profilleme” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu R Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her R Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- system.time() ve proc.time()
- Rprof ve profvis ile Kod Profilleme
- Hız için Vektörleştirme
- microbenchmark ile Performans Karşılaştırması