İçindekiler

Kısaca: Bir oyun gününde zamanın nereye gittiğini ölçtük ve iki ayrı yerde gereksiz işi azalttık. Yüksek bilgisayar yükünde küçük görevleri bekleme süresi yüzde 43 kısaldı; ayrı bir pazar karşılaştırmasında günlük ekonomi hesabı yüzde 14, toplam gün süresi yüzde 9 kısaldı. Bu sonuçlar farklı koşullarda alındı; bekleme ölçümünü bütün günün hızlandığı şeklinde okumuyoruz.
Sorun ne idi?
“Günü bitir” dediğimizde nüfus, pazar ve oyunun kendi kuralları arka arkaya çalışır. Bir gündeki toplam süreyi anlamak için yalnızca tek bir işlemin ne kadar sürdüğüne bakmak yetmez; hangi işlerin büyük pay tuttuğunu ve beklemelerin nerede biriktiğini de görmek gerekir.
İlk profil, motorun işi paralel bölmeden tek görevliyle yürüttüğü sabit bir deneme dünyasında 300 oyun gününü ölçtü. Deneme dünyası, farklı sürümleri aynı başlangıç koşulunda karşılaştırmak için kullandığımız örnek düzendir. Bu dünyada 30.000 konum, 250 ülke, 2 milyon nüfus grubu ve her birinde 8 mal bulunan 512 pazar vardı. Modlar ve veraset hesabı kapalıydı. Ölçüm Linux üzerinde, 16 işlem parçacıklı AMD Ryzen 7 5700G makinede, arayüz kapalıyken tek işçiyle alındı; bilgisayarın bir dakikalık iş yükü göstergesi yaklaşık 14’tü. Bu gösterge, çalışan ve sırasını bekleyen işlerin yoğunluğunu kabaca anlatır; tek başına oyun süresi değildir.
Nasıl çözdük?
Küçük görevlerde yalnız işe katılanları bekledik
Günün bazı işleri küçük parçalara ayrılıp birden çok işçi arasında paylaşılır. Eski düzende bir parça başlarken bütün işçiler dönüş listesine ekleniyordu. Parça hemen bitse bile ana işçi, o işe hiç katılmamış olanların uyanıp geri dönmesini bekleyebiliyordu.
Yeni düzende ana işçi kendi payını bitirince grubu kapatıyor ve yalnız gerçekten iş almış işçilerin dönmesini bekliyor. Geç uyanan ama iş almamış bir işçi kapalı gruba katılmıyor. İşlerin hangi sırayla birleştirildiği ve oyun içindeki sonuçlar değişmiyor; değişen, beklemek zorunda kalanların kim olduğu.

Pazar hesabında tekrarları azalttık
Pazar, alıcı ve satıcıların isteklerine bakarak bir malın uygun fiyatını ve kimin ne kadar alıp sattığını bulur. Eski hesap, fiyat ararken bazı emir listelerini tekrar kopyalıyordu. Yeni düzen aynı bilgiyi yeniden çoğaltmak yerine saklanan listeleri yeniden kullanıyor. Paylar doğrudan biliniyorsa gereksiz bölme hesabı da yapılmıyor; para tutarı sıfırsa para paylarını bölme adımı atlanıyor.
Bu değişiklikler alım satım kuralını, fiyatı veya eşitlikte kime öncelik verileceğini değiştirmiyor. Daha önce anlattığımız paylaştırma kuralı aynı kalıyor; yalnızca aynı sonuca ulaşmak için yapılan tekrarlar azalıyor.

Ne gördük?
Günün ilk profilinde ortalama süre oyun günü başına 8,70 milisaniyeydi. Ekonomi hesabı 3,16, nüfus artışı 2,21 milisaniye sürdü; diğer günlük hesaplar, oyunun gün sonundaki kuralları ve gün özeti de sürenin kalan bölümünü oluşturdu. Bu, arayüzüyle birlikte çalışan tam bir oyunun süresi değil; sabit deneme dünyasının tek işçiyle alınmış ölçümüdür.
İş paylaşımı ayrı bir karşılaştırmada, 8 işçiyle ve sürekli yük altındaki bilgisayarda incelendi. Yük göstergesinin 17,8–18,0 olduğu 10 çiftte küçük görevleri bekleme kaleminin ortancası oyun günü başına 0,5 milisaniye, yüzde 43 azaldı. Bu tur, bekleme ölçümüne yöneliktir. Farklı yüklerdeki 16 karşılaştırma çiftinin tamamında toplam gün süresindeki ortanca fark 0,2 milisaniyeydi; nüfus ve ekonomi bölümündeki yaklaşık 0,6 milisaniyelik dalgalanmadan küçük kaldığı için bütün günün kesin olarak hızlandığını söylemiyoruz.
Pazar değişikliği ise aynı deneme dünyasında tek işçiyle, aynı makinede yapılan 6 eski-yeni karşılaştırma çiftiyle ölçüldü; bilgisayarın iş yükü göstergesi 7,7–8,5 arasındaydı. Ekonomi hesabı altı çiftin hepsinde kısaldı; ortanca azalma oyun günü başına 0,39 milisaniye, yüzde 14 oldu. Toplam gün süresi beş çiftte kısaldı; ortanca azalma 0,64 milisaniye, yüzde 9’du. Bu sonuç da yalnızca belirtilen deneme dünyası ve koşullara aittir.
İki iyileştirmeyi aynı test gibi birleştirmedik: iş paylaşımı 8 işçiyle yüksek yükte, pazar hesabı tek işçiyle ayrı koşullarda ölçüldü. Sonuçların korunup korunmadığını da karşılaştırdık; gün sonu özetleri ve pazar payları aynı kaldı.
Neden böyle seçtik?
İş paylaşımında hedefimiz, hangi işçinin hangi görevi alacağını belirlemek değil, boşta kalan işçinin gecikmesinin tamamlanmış bir işi bekletmesini önlemekti. Pazarda da fiyatı ve paylaştırmayı yeniden tasarlamak yerine, aynı hesabın gereksiz tekrarlarını azalttık. Böylece ölçtüğümüz değişiklikler oyun kuralından ayrıldı.
Bedeli ne?
İşçi grubunun ne zaman kapandığını ve kimlerin gerçekten katıldığını doğru izlemek gerekir. Pazar hesabında da yeniden kullanılan listelerin doğru fiyat aramasına bağlı kalması gerekir. Ölçümler modlar kapalı sabit bir deneme dünyasında yapıldı; gerçek oyunun kuralları ve bilgisayar yükü süreleri değiştirebilir.
Sırada ne var?
Bir sonraki günlükte yeni oyun kurulurken arayüzün çalışmayı sürdürmesini ve mod hatalarının oyun adımının sonucunda nasıl görünür olduğunu inceleyeceğiz.
Sık sorulanlar
İş paylaşımı değişikliği bütün oyun gününü yüzde 43 hızlandırdı mı?
Hayır. Yüzde 43, yüksek yükteki ayrı ölçümde küçük görevleri bekleme süresindeki azalmadır. Toplam gün farkı daha küçük kaldı ve ölçüm dalgalanmasının altındaydı.
Pazar hesabında hangi sonuç değişmedi?
Karşılaştırılan sürümlerde gün sonu özetleri ve pazar payları aynı kaldı. Fiyat ve paylaştırma kuralları yeniden tanımlanmadı.
Pazar iyileştirmesi günün tamamını ne kadar kısalttı?
Tek işçili deneme dünyasında altı çiftin beşinde toplam gün süresi kısaldı; ortanca azalma yüzde 9’du. Bu, gerçek bir kampanyanın genel hızına dair garanti değildir.
Bu ölçümler modlarla çalışan tam bir oyunu temsil ediyor mu?
Hayır. Profilde modlar ve veraset hesabı kapalıydı, arayüz çalışmıyordu. Sonuçlar belirtilen deneme dünyası ve makine yüküyle sınırlı.
Bir oyun gününün adımlarını Geliştirici Günlüğü #4’te, paylaştırmada kalan kişilerin nasıl seçildiğini Geliştirici Günlüğü #7’de anlatmıştık. MKA Engine ve günlükler sayfalarını inceleyebilir, sorularınızı iletişim sayfasından iletebilirsiniz.
Kaynaklar ve ilgili belgeler
Bunlar da ilginizi çekebilir
- Bir strateji oyununun dünya haritası nasıl yapılır?
MKA Engine için gerçek veriden 27.357 konumluk bir 1337 dünya haritası ürettik: arazi, nehirler, boğazlar, nüfus ve konum sınırları nasıl çıkarıldı?
- Oyun motoruna giden yol
MKA Engine'e nasıl başladık: dört oyunu okumak, belirlenimciliği yasa saymak, aşama aşama ölçerek ilerlemek ve şu an neredeyiz.