Kod Performansını Ölçme
chrono ile kıyaslama yapın
Kod Performansını Ölçme, CoddyKit'te ücretsiz bir C++ Academy dersidir. Bu, 4 dersinin 3. 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, C++ Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. C++ Academy kursu toplamda 4 dersten oluşur.
Neden Performans Ölçümü Yapılır
Kodun ne kadar sürede çalıştığını ölçmek, darboğazları bulmanıza ve iyileştirmeleri doğrulamanıza yardımcı olur. <chrono> ile taşınabilir ve tür güvenli zaman ölçümü elde edersiniz.
- İyileştirmeden önce ölçün.
- Güvenilir aralıklar için kararlı bir saat kullanın.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
auto end = steady_clock::now();
std::cout << "Timed a block: " << ((end - start).count() >= 0) << '\n';
return 0;
}Temel Yöntem
Performans ölçümü yöntemi her zaman aynıdır: çalışmadan önce now() değerini alın, çalışmayı yürütün, sonrasında tekrar now() değerini alın ve çıkarma işlemi yapın.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
long sum = 0;
for (int i = 0; i < 100000; ++i) sum += i;
auto end = steady_clock::now();
std::cout << "Sum: " << sum << ", elapsed >= 0: " << ((end - start).count() >= 0) << '\n';
return 0;
}Birimi Seçme
İş yüküne uygun birimi seçin. Hızlı döngüler için microseconds veya nanoseconds, daha büyük görevler için milliseconds kullanın.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
long sum = 0;
for (int i = 0; i < 500000; ++i) sum += i;
auto end = steady_clock::now();
auto us = duration_cast<microseconds>(end - start);
std::cout << "Result: " << sum << ", us non-negative: " << (us.count() >= 0) << '\n';
return 0;
}Kayan Noktalı Zaman Ölçümü
Kesirli, insan tarafından okunabilir saniyeler için duration<double> kullanarak saniyenin altındaki hassasiyeti koruyun.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto start = steady_clock::now();
long sum = 0;
for (int i = 0; i < 200000; ++i) sum += i % 7;
auto end = steady_clock::now();
duration<double> secs = end - start;
std::cout << "Computed " << sum << ", seconds >= 0: " << (secs.count() >= 0) << '\n';
return 0;
}Yeniden Kullanılabilir Bir Zamanlayıcı
Yöntemi küçük bir yardımcı işlevin içine alarak çağrılabilir herhangi bir şeyin süresini temiz bir şekilde ölçebilir ve kendinizi tekrarlamaktan kaçınabilirsiniz.
#include <iostream>
#include <chrono>
long long timeWork() {
using namespace std::chrono;
auto s = steady_clock::now();
long acc = 0;
for (int i = 0; i < 100000; ++i) acc += i;
auto e = steady_clock::now();
return duration_cast<microseconds>(e - s).count();
}
int main() {
std::cout << "Microseconds non-negative: " << (timeWork() >= 0) << '\n';
return 0;
}Ölü Kodun Kaldırılmasını Önleme
Derleyiciler, sonucu kullanılmayan çalışmaları silebilir ve bu da performans ölçümlerini geçersiz kılar. Sonucu her zaman kullanın; örneğin sonucu yazdırın veya görünür bir değişkende biriktirin.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto s = steady_clock::now();
volatile long sink = 0;
for (int i = 0; i < 100000; ++i) sink += i;
auto e = steady_clock::now();
std::cout << "Sink used: " << (sink > 0) << ", elapsed >= 0: " << ((e - s).count() >= 0) << '\n';
return 0;
}Isınma Çalıştırmaları
Önbellekler ve tembel başlatma nedeniyle ilk çalıştırma daha yavaş olabilir. Daha kararlı sayılar elde etmek için ölçümden önce bir ısınma geçişi yapın.
#include <iostream>
#include <chrono>
long work() {
long a = 0;
for (int i = 0; i < 50000; ++i) a += i;
return a;
}
int main() {
using namespace std::chrono;
work();
auto s = steady_clock::now();
long r = work();
auto e = steady_clock::now();
std::cout << r << " measured, ok: " << ((e - s).count() >= 0) << '\n';
return 0;
}Birden Çok Çalıştırmanın Ortalamasını Alma
Tek bir ölçüm gürültülüdür. Çalışmayı birçok kez yürütün, geçen süreleri toplayın ve kararlı bir ortalama elde etmek için toplamı bölün.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
long long total = 0;
const int runs = 5;
for (int r = 0; r < runs; ++r) {
auto s = steady_clock::now();
long acc = 0;
for (int i = 0; i < 100000; ++i) acc += i;
auto e = steady_clock::now();
total += duration_cast<microseconds>(e - s).count();
}
std::cout << "Average us non-negative: " << ((total / runs) >= 0) << '\n';
return 0;
}İki Yaklaşımın Karşılaştırılması
Performans ölçümü, uygulamaları karşılaştırırken çok işe yarar. Her birinin süresini aynı şekilde ölçün ve elde edilen süreleri karşılaştırın.
#include <iostream>
#include <chrono>
#include <vector>
int main() {
using namespace std::chrono;
std::vector<int> v;
auto s1 = steady_clock::now();
for (int i = 0; i < 10000; ++i) v.push_back(i);
auto e1 = steady_clock::now();
v.clear();
v.reserve(10000);
auto s2 = steady_clock::now();
for (int i = 0; i < 10000; ++i) v.push_back(i);
auto e2 = steady_clock::now();
std::cout << "Both timed: " << (((e1 - s1).count() >= 0) && ((e2 - s2).count() >= 0)) << '\n';
return 0;
}Çözünürlüğe Dikkat Edin
Ölçülen iş, saatin darbesinden daha kısaysa sıfır okuyabilirsiniz. Saat çözünürlüğünü aşmak için işi yeterli sayıda döngüyle tekrarlayın.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto s = steady_clock::now();
int x = 1 + 1;
auto e = steady_clock::now();
auto ns = duration_cast<nanoseconds>(e - s).count();
std::cout << "x=" << x << ", tiny work may read low: " << (ns >= 0) << '\n';
return 0;
}Sonuçları Raporlama
Son süreyi okunabilir bir birime dönüştürüp yazdırın. Derleyici iyileştiricisinin işi kaldırmaması için tüketilen sonucu görünür tutun.
#include <iostream>
#include <chrono>
int main() {
using namespace std::chrono;
auto s = steady_clock::now();
long acc = 0;
for (int i = 0; i < 300000; ++i) acc += (i * 3) % 11;
auto e = steady_clock::now();
auto ms = duration_cast<milliseconds>(e - s).count();
std::cout << "acc=" << acc << ", ms >= 0: " << (ms >= 0) << '\n';
return 0;
}Kısa Kontrol
Performans ölçümündeki tuzakları ne kadar anladığınızı test edin.
Özet
<chrono> ile kodun performansını nasıl ölçeceğinizi öğrendiniz:
- önce ve sonra
steady_clock::now()ile zaman noktalarını alın, ardından çıkarma işlemi yapın duration_castile uygun birim seçin- ölçümü önceden çalıştırın, birden çok çalıştırmanın ortalamasını alın ve kullanılmayan kodun elenmesini önlemek için sonuçları tüketin
- çok küçük iş yüklerinde saat çözünürlüğüne dikkat edin
Sonraki bölümde C++20'nin takvim ve saat dilimi türlerini inceleyeceksiniz.
Sıkça Sorulan Sorular
“Kod Performansını Ölçme” dersi ücretsiz mi?
Evet — “Kod Performansını Ölçme” 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 C++ Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. C++ Academy kursu toplamda 4 dersten oluşur.
“Kod Performansını Ölçme” dersinde ne öğreneceğim?
chrono ile kıyaslama yapın C++ 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.
C++ Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te C++ 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 3. dersidir.
“Kod Performansını Ölçme” 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 C++ Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her C++ 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
- Süreler ve Saatler
- Zaman Noktaları
- Kod Performansını Ölçme
- Takvim ve Saat Dilimleri