Geliştirici günlüğü

Geliştirici Günlüğü #7: Oyun matematiği nasıl hızlandı?

Sayı hesabındaki hızlanmaları, ölçüm aralıklarını ve değişen son basamakların sınırlarını açıklıyoruz.

İçindekiler
Bir hazine salonunda genç bir kâtip, duvardaki dev hazır sonuç tablosunda değneğiyle cevabı gösteriyor; arkada bir başka kâtip uzun hesap tomarlarının altında bunalmış. Ortadaki masa haritasında eyaletler değişen renklerle parlıyor.

Kısaca: MKA Engine’in sabit noktalı sayı hesabını hızlandırdık. Bu sayı biçimi, farklı bilgisayarlarda aynı oyun sonucuna ulaşmayı kolaylaştırır. Yaygın değerlerle yapılan bölme ölçümde 3,6 kat hızlandı; ayrıca sekiz iş parçacıklı bir ölçek dünyası koşusundaki beş karşılaştırmanın her biri daha kısa sürdü. Bu sonuçlar tam bir oyunun tamamı için hız garantisi değildir. Üs ve kuvvet hesaplarının son basamaklarında da sınırlı değişiklikler oldu.

Büyük sayı işlemleri süreyi nerede tüketiyordu?

Büyük bir strateji oyunu her gün nüfus ve pazar gibi pek çok değeri tekrar tekrar hesaplar. MKA Engine, aynı oyunun farklı bilgisayarlarda tutarlı ilerlemesi için sabit noktalı sayılar kullanır: sayıların kesirli kısmı belirli bir adım boyunda tutulur ve hesaplar bu ortak düzende yapılır. Bu tutarlılık yararlıdır; ancak büyük değerlerde bazı işlemler daha uzun sürebilir.

Geç oyun aşamasını temsil eden ölçek dünyasında, işlemcinin hangi işlere zaman ayırdığını örnekleyen profil, büyük değerler için kullanılan bölme yolunu taban ölçümünde örneklenen sürenin yüzde 7,58’i olarak gösterdi. Değişiklikten sonra aynı profil koşulunda bu pay yüzde 0,24 oldu. Bu oran bir oyun gününün süresi değil, yalnızca o profilin işlemci örneklerinde görülen paydır.

Yaygın ve büyük değerler için ayrı hesap yolları

Yaygın değerler için bölme işleminin daha kısa bir yolunu kullandık; büyük değerler için daha geniş hesaplama yolunu koruduk. Karekök hesabında, önceden hazırlanmış yakın bir değerden başlayıp tek bir düzeltme yapıyoruz. Üs ve logaritma (hedef değere ulaşmak için gereken üssü bulan işlem) gibi hesaplarda gereksiz tekrarları azalttık; logaritma için de hazırlanmış başvuru değerlerinden yararlandık.

Bir sayı, en yakın hazır değeri seçen tabloda eşleştirilir; küçük bir düzeltme adımı sonuç işaretçisini doğru noktaya taşır

Bir miktar birden çok alıcıya paylaştırıldığında yuvarlamadan küçük kalanlar doğabilir. Bu kalanları seçme işi de daha az sıralama çalışmasıyla yapıldı; ölçüm kaydındaki sınama, dağıtım sırasının ve sonucunun değişmediğini doğruluyor. Bu, oyunun paylaştırma kuralını değil, aynı kuralı uygulama biçimini hızlandırıyor.

İşlem ölçümleri ve ölçek koşusu ne gösteriyor?

Bu günlükte sonradan eklenen ölçümler, 16 Ekim 2026'da başlayan çalışma kapsamında raporlanıyor. Kaynak 16 Ekim'i çalışmanın başlangıç tarihi olarak veriyor; ölçümlerin o gün yapıldığını söylemiyoruz.

Sayı işlemlerini ayrı bir ölçümde, bir milyon rastgele değerle ve her işlem için beş koşunun en iyisini alarak karşılaştırdık. Makine başka işlerle de meşguldü; bu nedenle aynı koşudaki hız oranları, tek başına mutlak sürelere göre daha anlamlı. İşlemler aynı girdi aralığında ölçülmedi; özellikle karekök sonucu aralığa göre değişiyor.

İşlemBu ölçümdeki hızlanma
BölmeYaygın değerlerde 3,6 kat; geniş değer aralığında 1,8 kat
KarekökDenenen aralığa göre 2,6–4,1 kat
Üs3,5 kat
LogaritmaDenenen aralığa göre 3,6–4,1 kat
Kuvvet3,5 kat

Bunlar farklı girdi aralıklarındaki küçük ölçümlerdir; tek bir “oyun matematiği hızlandı” katsayısı gibi okunmamalı. Örneğin karekök, 65.536’ya kadar olan aralıkta 4,1 kat; bir milyona kadar uzanan aralıkta 2,6 kat hızlandı.

Bütün bir oyun günü üzerindeki etkiyi ayrıca, geç oyun aşamasını temsil eden ölçek dünyasında ölçtük. Bu çalışma 300 gün sürdü ve sekiz iş parçacığı, yani sekiz paralel iş akışı kullandı. Beş taban/son koşusunun tamamında gün süresi kısaldı:

KoşuÖnce (milisaniye/gün)Sonra (milisaniye/gün)
12,211,74
22,151,60
32,881,93
42,762,16
52,852,12

Bu beş ham eşleşmeden hesaplanan kısalma yaklaşık yüzde 21–33 arasında değişiyor. Ölçek dünyasının son durum özeti önce ve sonra aynı kaldı; ancak bu tek senaryo, değişen üs ve kuvvet sonuçlarını kullanan başka bir oyunun nasıl davranacağını kanıtlamıyor.

Aynı sonucu korurken matematiği hızlandırmak

Buradaki amaç, sayı biçimini değiştirip tutarlılığı kaybetmek yerine aynı hesaplama düzeninde daha az iş yapmaktı. Karekök için başlangıç tahmini tek başına son cevap değildir; düzeltme adımıyla tamamlanır. Kaynak sınamalarında bölme, karekök ve paylaştırma sonuçları denetlenen girdilerde aynı kaldı. Üs ve kuvvette ise sonuçların son basamakları değişti; yüksek hassasiyetli başvuru değerleriyle yapılan karşılaştırmada hata azaldı.

Hız kazanımının kapsamı ve sınırları

Üs ve kuvvet sonuçlarının son basamakları değiştiği için, bu işlemleri kullanan eski bir oyunu yeni sürümde yeniden oynatırken sonuç farklılaşabilir. Ölçek dünyasının aynı son durumu vermesi, başka iş yüklerinde bu riskin bulunmadığını göstermez. Ayrıca ölçüm gerçek bir oyunda değil, belirli bir ölçek dünyasında yapıldı.

Tam oyun ölçümünde açık kalan soru

Açık kalan soru, gerçek bir strateji oyununun kendi sayı dağılımında aynı kazancın görülüp görülmeyeceği. Bu günlükte böyle bir tam oyun ölçümü yok; ölçek dünyası sonucunu daha geniş bir performans garantisi olarak sunmuyoruz.

Sık sorulanlar

Sabit noktalı sayı ne demek?

Sayıların kesirli kısmının sabit bir adım boyuyla tutulduğu bir yöntemdir. Farklı bilgisayarların aynı oyun hesabında aynı sonucu üretmesine yardımcı olur.

Her işlem 3,5 kat mı hızlandı?

Hayır. Sonuçlar işlem ve girdi aralığına göre değişiyor. Örneğin geniş aralıktaki bölme 1,8 kat, karekök ölçümleri 2,6–4,1 kat hızlandı. Bunlar küçük, ayrı ölçümlerdir.

Oyun sonucu değişti mi?

Ölçülen ölçek dünyasının son durum özeti aynı kaldı; ancak bu tek sonuç, değişen üs ve kuvvet değerlerini kullanan her oyunda aynı sonucun kalacağını kanıtlamıyor.

Bu gerçek bir oyunun tam gününü mü ölçüyor?

Hayır. Geç oyun aşamasını temsil eden ölçek dünyasını 300 gün ve sekiz iş parçacığıyla ölçtük. Gerçek bir oyunun iş yükü farklı olabilir.

Bağlantılar

Sabit noktalı sayılar ve tutarlılık için Geliştirici Günlüğü #1, oyun gününün aşamaları için Geliştirici Günlüğü #4 yazılarına bakabilirsiniz. MKA Engine hakkında daha fazlası için motor sayfasını ve geliştirici günlükleri listesini ziyaret edin.

Kaynaklar ve ilgili belgeler

Bunlar da ilginizi çekebilir