Bölünme neden diğer aritmetik işlemlerden daha karmaşık?


39

Geçenlerde bir tane olmayan bir çip üzerinde bir tamsayı bölme işlemine ihtiyaç duyduğum bir durumla karşılaştım (ARM Cortex-A8). Bunun neden olması gerektiğini araştırmaya çalışırken, genel olarak bölünmenin hemen hemen her türlü tamsayılı (veya sabit nokta) mimaride toplama, çıkarma veya çarpma işlemlerinden çok daha fazla döngü gerektirdiğini öğrendim. Neden bu böyle? Her şey gibi iki katmanlı bir AND-OR mantığı ile gösterilemez mi?

Yanıtlar:


34

Bölünme, bölümden elde edilen sonucun bir Öklid ölçüsü kullanılarak geri kalanına kaydırılması gereken yinelemeli bir algoritmadır , bkz. 2 ; oysa çarpma (sabit) bir dizi bit manipülasyon hilesine indirgenebilir.


2
Hem çarpma hem de bölme işlemlerinin yavaş olmasıydı. Günümüzde çarpma biraz daha hızlıdır (ancak toplama / çıkarma işleminden biraz daha yavaş), ancak bölme hala diğerlerinden daha yavaştır. Newton-Raphson'un bir sayı ileri geri almak için hala dahili olarak kullanıldığını düşünüyorum.
JM,

12
(Konu dışı: "Ters işlemler genellikle zordur. Sadece farklılaşmaya karşı entegrasyona bakın." - yaptığınız şeyin sembolik mi yoksa sayısal mı olduğuna bağlı olarak değişir. Farklılaşma sembolik olarak kolaydır, ancak sayısal olarak zordur; kolay.)
JM

1
Tamam, küpün solucanların farklı bir solucan kutusu olduğunu söyleyerek yok edeceğim; ancak en azından tek boyutlu durumda, kareleme farklılaşmadan daha kolaydır.
JM,

1
Her durumda, tersler her zaman çiftler halinde gelir. Neden birine "işlem" diğeri "ters" diyorsun?
David Ketcheson

2
Ne yineleme ne de tersi bunu zorlaştırmaz. Bölünme zorluğu, bir Öklid ölçüsü kullanarak sonucu bölümden geriye kalanına kaydırmanız gerekmesinden kaynaklanmaktadır. Bkz bölme algoritması teoremi .

20

Tüm mevcut CPU'ların aterrel'in önerdiği gibi yinelemeli bir yaklaşım kullandığı görülmesine rağmen, yinelemeli olmayan yaklaşımlar üzerinde bazı çalışmalar yapıldı. Değişken Hassas Kayan Nokta Bölümü ve Karekök , arama tablolarını ve taylor serisi genişletmeyi kullanarak , bir FPGA'da yinelemeli kayan nokta bölümü ve karekök uygulaması hakkında konuşur .

Aynı tekniklerin bu işlemleri tek bir döngüye indirmeyi mümkün kılacağından şüpheliyim (gecikme olmasa bile verimlilik), ancak büyük arama tablolarına ve bu nedenle bunu yapmak için büyük ölçüde silikon emlak alanlarına ihtiyacınız olabilir. .

Neden mümkün olmuyor?

CPU'ları tasarlarken yapılacak birçok takas var. İşlevsellik, karmaşıklık (transistör sayısı), hız ve güç tüketimi birbiriyle ilişkilidir ve tasarım sırasında verilen kararlar performans üzerinde büyük bir etki yaratabilir.

Modern bir işlemci muhtemelen tek bir döngüde bir kayan nokta bölümü gerçekleştirmek için silikon üzerinde yeterli transistör tahsis eden bir ana kayan nokta birimine sahip olabilir , ancak bu transistörlerin verimli bir şekilde kullanılması olası değildir.

Kayan nokta, onlu yıl önce yinelemeden yinelemeden yinelemeye geçişi sağlamıştır. Bu günlerde, tek döngü çarpma ve hatta çarpma birikimi, mobil işlemcilerde bile yaygındır.

Transistör bütçesinin verimli bir şekilde kullanılmasından önce, bölme gibi çarpma işlemi yinelemeli bir yöntemle yapılmıştır. O zamanlar, özel DSP işlemcileri, silikonlarının çoğunu tek bir hızlı çarpma (MAC) birimine tahsis edebilirler . Bir Core2duo CPU 3 kayan nokta çarpma gecikmesine sahiptir (değer girdikten sonra 3 çevrim hattından değer gelir), fakat aynı anda uçuşta 3 çarpma yapabilir, bu arada SSE2 ünitesi olabilir Tek bir döngüde birden fazla FP çarpımı pompalayın.

Büyük silikon alanlarını tek döngülü bir bölme birimine tahsis etmek yerine, modern CPU'ların her biri paralel olarak işlem yapabilen, ancak kendi özel durumları için optimize edilmiş olan çoklu birimleri vardır. Eğer hesap içine almak Aslında, bir kez SIMD gibi talimatlar SSE veya CPU entegre grafik arasında Sandy Bridge ya da geç CPU, olabilir birçok CPU böyle kayan nokta bölme birimleri.

Eğer genel kayan nokta bölünmesi modern CPU'lar için daha önemliyse, tek bir döngü oluşturmak için yeterli silikon alanını tahsis etmek mantıklı olabilir, ancak çoğu yonga üreticisi bu kapıları başka şeyler için daha iyi kullanabileceklerine karar vermişlerdir. . Bu nedenle bir işlem daha yavaştır, ancak genel olarak (tipik kullanım senaryoları için) CPU daha hızlıdır ve / veya daha az güç harcar.


Bildiğim kadarıyla, hiçbir yonga kayan nokta için tek-çevrim bölme gecikme süresine sahip değildir. Örneğin, Agner Fog'un Intel, AMD ve VIA CPU'ları için talimat tabloları DIVPS'yi (SSE paketli kayan nokta bölme) 10-14 döngü olarak listeler. Tek döngülü bölme talimatlarına sahip herhangi bir donanım bulamıyorum, ancak yanlış olduğunu kanıtlamak istiyorum. Söyleyebileceğim kadar yaygın değil.
Bill Barth

@Bill - Teşekkürler, haklısın. Daha önce DSP yongalarında tek çevrim bölme işlemlerini daha önce gördüğümden eminim, bu yüzden masaüstüne gideceğini farz ediyorum, tıpkı tek çevrim çarpma işleminde olduğu gibi, ancak artık referans bulamıyorum. Cevabımı güncelledim ve ileride buna izin verebilecek yinelemeli olmayan yöntemler hakkında bazı bilgiler ekledim. Dönüştürücüler kullanırken bölünmenin döngü başına artık daha verimli olmadığını düşünmek şaşırtıcı.
Mark Booth,

1
Bence DSP'ler doğru olduklarını sınırlayarak bunu yapıyorlar. Bu, karekök için arama + enterpolasyon için kullanılanla aynı stratejidir.
Matt Knepley

1
Yine de böyle bir bölünmenin gecikmesinin ne olacağını bilmiyorum . 4 GHz'de N döngüler içindeki arama tablosuna bir gidiş dönüş yapmak, söz konusu masanın potansiyel boyutunu ciddi şekilde sınırlandırır (örneğin, L1 önbellekleri her biri 32K'da durmaktadır). 3B'ye çıkmak bunu arttırmaya yardımcı olur (ancak, soğutma zorludur). Modern 4GHz / 5GHz CPU'lar için hangi gecikmeye ulaşılabileceği hakkında bir fikriniz var mı?
Matthieu M.

1
Divps / divpd - mulps / mulpd gecikme ve verim sayıları için, bkz. Kayan nokta çarpma vs Kayan nokta çarpma . Agner Fog'un talimat tablolarından veri aldım ve onu tekli ve çiftli ve farklı SIMD vektör genişlikleri için div ve mul verim ve gecikme süreleri boyunca bir özet haline getirdim. (Intel çipleri tipik olarak diğer vektör ALU'ların sadece yarısı genişliğinde bir SIMD bölücüye sahiptir.)
Peter Cordes
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.