Bu iyi bir soru çünkü sayısal algoritmaları ve performansı anlamak etkili bir hesaplamalı bilim adamı olmanın önemli bir önkoşuludur. Aynı zamanda, bu zayıf bir sorudur, çünkü ortaya konan kısıtlamalar, anlamlı bir cevap vermeye yeteri kadar yeterli değildir.
Üç hesaplamanın performansı, nihai sonuçta ihtiyaç duyulan doğruluğa ve ayrıca işlenenleri temsil etmek için gereken minimum hassasiyete bağlı olacaktır. Sen hak , b ve c pozitif reel sayı olarak, ama biz de ikili rakam kaç bilmek gerekir d nbirbcdn bunları doğru bir şekilde temsil etmek için gereklidir. Genel reel sayılar için performansla ilgili hususları anlamak için öncelikle bilgisayarların tamsayıları nasıl temsil ettiğini ve gerçek sayıları kayan noktalı sayıları kullanarak nasıl yaklaştırdığını anlamamız gerekir.
Bilgisayarlar arasında bir tamsayıdır faaliyet zaman , daha sonra gerekli ikili basamak sayısı tabii ki günlüğüne eşit 2 tamsayı büyüklüğü, artı işareti işlemek için bir ilave bit:M2
log 2 | M | + 1dn=2| M| +1
Örneğin, -8 sayısı 4 ikili basamakla temsil edilebilir. Performans ve alan verimliliği için, modern işlem birimlerindeki tamsayıların sayısal hesaplamalarından sorumlu olan aritmetik mantık birimleri (ALU'lar), belirli bir boyuta kadar tamsayılardaki matematiği işlemek için tasarlanmıştır, bu günlerde en yaygın olanı d = 32 ve d = 64. Bilgisayarınızda olduğu gibi sadece x86 işlemcilerin ALU'ları değil, günümüz elektronik toplumunda her yerde bulunan bilgisayar mimarisinin temel yapı taşıdır. Video oyun konsollarına aşina iseniz, konsolun işlemcisindeki aritmetik mantık birimleri boyutundan (bit olarak) adlandırılan bir video oyun sistemi olan Nintendo 64'ü hatırlayabilirsiniz.
Aritmetik mantık birimleri üzerindeki tamsayı toplama, çıkarma ve çarpma işlemleri çok verimlidir ve genellikle hesaplamak için birden fazla döngü gerektirmez. Bölümler daha az performans gösterir ve modern işlemcilerde birkaç düzine döngü gerektirebilir. Performans, hem işlem biriminin mimarisine (hem de aritmetik mantık biriminin karşılık gelen uygulamasına) ve frekansına bağlıdır. 64 bit işlemcinin bit işlenenlerinde genellikle 1 ile 64 arasında herhangi bir yerde x için aynı hızda aritmetik gerçekleştirebileceğini unutmayın .xx
Genel hesaplamada ve özellikle bilimsel hesaplamada, tamsayı matematik birçok hesaplama için gereksizdir ve 'kayan nokta' gösterimi olarak adlandırılan başka bir sayı gösterimi gereklidir. Kayan nokta sayıları, modern mikroişlemcilerin çalışma şekli ( bit parçalarında veri toplama ) ve sabit bir taban b (genellikle b = 2 veya bnbb = 2 ), ve iki tamsayı, bazı çevrelerde bir mantis (significand) kullanılarak sayısını temsil eden s ve bir üs e . Belirli bir sayı xb = 10sex daha sonra yaklaşık olarak şu şekilde temsil edilir:
x = s ∗ be
Yaklaşık olarak söylüyorum çünkü bu gibi basit gerekçelerin bile açık olması gerekir 13 , standart bazlar için tam olarak bir kayan nokta sayısı olarak gösterilemez. Öneme bağlı basamak sayısı ve kendi büyüklüğüne göre sayının doğruluğunu belirler. IEEE 754 standart significand ve mantisin aralıkları dahil olmak üzere (ve aralığı ve hassasiyetini karşılık gelir) birkaç önemli değerleri için kayan nokta sayılarının beklenmektedir nasıl bir kural sayıda davranmaya belirtir, , o kadar sayısal hesaplamalar içinde tekrarlanabilir olduğu bazı hoşgörü. Bu cevapta yakalamayı umamadığım kayan nokta sayılarının nasıl çalıştığına dair biraz incelik var, iyi bir tanıtım için "Her Bilgisayar Bilimcisinin Kayan Nokta Aritmetiği Hakkında Bilmesi Gerekenler"dn.
Son 50 yılda önemli miktarda entelektüel çaba, aritmetik kayan nokta işlemlerini verimli bir şekilde hesaplamak için işlemci kapasitesinin artırılmasına yatırım yapmıştır. Modern işlemcilerde bu hesaplamalar, kayan nokta sayıları üzerinde aritmetik işlemler gerçekleştirmek için tasarlanmış ve genellikle her iki IEEE 754 tarafından belirtilen 32'yi işlemek için tasarlanmış olan aritmetik mantık biriminin daha karmaşık bir sürümü olan bir veya daha fazla Kayan Nokta Birimi (FPU) tarafından işlenir. -bit kayan nokta sayıları (genellikle 'şamandıralar' olarak adlandırılır) ve 64 bit kayan nokta sayıları (genellikle 'çiftler' olarak adlandırılır) verimli bir şekilde. Aritmetik mantık birimlerine benzer şekilde, kayan noktalı birimler genellikle toplama, çıkarma ve çarpma işlemlerini yalnızca birkaç döngüde hesaplayabilirken, bölme genellikle biraz daha fazlasını gerektirir.
Çoğu durumda, IEEE 754 64-bit kayan nokta 'çiftler' sayısal hesaplamalar için yeterlidir, bu yüzden , b vebirb her birinin 64 bit çiftler olarak temsil edildiğini ve x87 kayan noktalı yönerge alt kümesini kullanarak bir Intel Nehalem mimarisinde skaler işlemler olarak üç hesaplama, yani bu işlemleri bir for döngüsünde veya bir veri aralığında hesaplamakla ilgilenmezsiniz ve vektör uzantılarını kullanmak istemezsiniz . Komut gecikmesi bilgileriAgner Fog'unIntel / AMD mimarileri içinmükemmel talimat referans tablolarındantoplanır.c
- birb
- günlükbirc
- c1b
1 Genel üs alma genellikle aşağıdaki kimlikle uygulanır:
birb= βBir ⋅ logβb
Burada ya olup 2 ya da E (bu durumda, I kullanma β = 2 ). Sonuçta bir miktar doğruluk atmak istediğinizi varsayarsak (x87 ünitesi hesaplarını 80 bit hassasiyetle yapar, ancak bu a ve b için belirli değer aralıkları için yetersizdir ), bu hesaplama FYL2X donanım talimatı ile yapılabilir hesaplamak için t = a ⋅ log 2 b ve F2XM1 donanım talimatı (bazı ölçeklendirme yardımı ile)β2eβ= 2birbt = a ⋅ günlüğü2b . Ölçeklendirmeyi ele almak için ~ 20 döngü varsayarsak:2t
FYL2X + F2XM1 + ~ 20 = 80 + 51 + ~ 20 = ~ 151 devir
2 Bu, iki logaritmaya ve temel kimliğin değişmesiyle bölünmeye dönüştürülebilir ve doğru bir sonuç için yeniden ölçeklendirmeye gerek yoktur.
2 * FYL2X + FDIV = 2 * 80 + (7 ila 27) = 167 ila 187 döngü
[3] Bu, bir bölme ve ardından üs alma ile eşdeğerdir, bu nedenle [1] artı FDIV, ~ 175 döngü.