2010-11-05 15 views
12

MOD işlemi neden multiplication'dan biraz daha factor of 2'dan daha pahalı? Lütfen CPU'nun bölünme işlemini nasıl gerçekleştirdiği konusunda daha spesifik olun ve MOD işlemi için sonucu döndürür.MOD işlemi, çarpmadan daha fazla CPU mu yoğun?

Aşağıdaki örnekte, iş parçacıkları her biri bir saniyeliğine çalışır. Test, bir SPARC işlemcisi üzerinde gerçekleştirildi.

// multiplication 
void someThread() { 

    int a = 10234; 
    while (true) { 
     opers++; 
     a = a * a; 
     a++; 
    } 

    // opers ~ 26 * 10^6 in a sec. 
} 

// MOD 
void someThread() { 

    int a = 10234; 
    while (true) { 
     opers++; 
     a = a % 10000007; 
     a++; 
    } 

    // opers ~ 12 * 10^6 in a sec. 
} 
+2

Her iki kod örneği de aynıdır. –

+0

Sorun düzeltildi. – Leonid

+0

'+ 'ile sürüm nerede? ^^ –

cevap

5

Algoritma bölünmesi için (işlemciler bölünme ve kapılar uygulanan algoritmalarla çarpma yürütme) çoğalması için daha maliyetlidir. Nitekim, iyi bir karmaşıklığa sahip olan bölüme yönelik bazı algoritmalar, çarpmayı temel bir adım olarak kullanmaktadır.

Okulda öğrenilen naif algoritmaları kullansanız bile. Her ikisi de aynı asimptotik karmaşıklığa sahiptir, fakat bölünmenin sabiti daha büyüktür (rakamı bulmak zorundasınız ve bu önemsiz değildir, bu yüzden dağınıklık yaratabilir ve karışıklığı düzeltmelisiniz).

12

MOD, bir bölme işlemi değil, bir bölme işlemidir. Bölüm çarpmadan daha pahalıdır. Burada MOD operasyon hakkında

fazla bilgi: o bölünme yoluyla uygulanmaktadır olarak http://en.wikipedia.org/wiki/Modulo_operation

+3

Downvoter: Neden? –

+2

Robert: Bölünme hakkında da aynı şey söylenebilir - yani MOD çalışması daha pahalıdır çünkü MOD, çarpımdan daha pahalıdır. CPU seviyesinde daha fazla detay bilmek isterdim; bölüm/mod neden çarpmadan daha pahalıdır. Bu cevap sorumu tekrar ediyor. – Leonid

+1

Bu doğru cevap, açıkçası, OP mod ile div karşılaştırmak için ciddiye almadı. İnternette sparc işlemci internals hakkında konuşulan tozlu köşe olmalı. –

1

Evet, mod, çarpma daha pahalıdır. (CPU'lar genellikle hem bölümü hem de kalanını bölümlere ayırırlar.) Ancak her iki parçanız da çoğaltma kullanıyor. kopyala/yapıştır hata?

İlgili konular