Şimdi Ara

beyler acil yardım!

Daha Fazla
Bu Konudaki Kullanıcılar: Daha Az
2 Misafir - 2 Masaüstü
5 sn
8
Cevap
1
Favori
419
Tıklama
Daha Fazla
İstatistik
  • Konu İstatistikleri Yükleniyor
0 oy
Öne Çıkar
Sayfa: 1
Giriş
Mesaj
  • bil. programlamaya giriş dersi alıyorum hoca ödev verdi bil hesaplarken 10/2 mi önce veya daha hızlı yapar yoksa 10*0.5 mi.
    yani temel olarak çarpma mı öncelikli bölme mi



  • Benzer soru için uzun bir cevap yazmışlar buradan okuyabilirsin
    http://stackoverflow.com/questions/226465/should-i-use-multiplication-or-division
  • Kendin deneyerek de sonuçlarını karşılaştırabilirsin. Ancak unutma ki 10*0.5 teriminde type-cast yapılıyor(10 bir int, 0.5 bir float) yani sonuçtaki hızı etkiler. Eşit durumlarda test etmelisin.
  • Type cast derken

    < Bu ileti mobil sürüm kullanılarak atıldı >
  • Tam sayılar için:

    Çok çok eskiden hesaplatmazdık, bellekteki önceden hesaplanmış değerleri alırdık.

    sonuc=bolmeSonucuGetir(10,2) gibi.

    Sonradan işlemciler hızlandı ve

    sonuc=10>>1;

    yazılmaya başlandı.

    Sonra işlemcilerin pipeline hatları derinleştirildi ve

    sonuc1=10/2
    sonuc2=10/2
    sonuc3=10/2

    bile yazabilir hale geldik.

    En sonunda pipeline hatları genişletildi ve

    sonuc1234=bolmeIslemi1234(10,2)

    yazarak bir kerede 4 tane bölme işlemi yapabilir olduk. Yani işlemcinin türüne göre değişir hangisinin hızlı olduğu.

    Ondalıklı sayılar için:

    2.0 a bölmekle 0.5 ile çarpmak arasında da fark vardır ama güncel işlemcilerde bu fark okadar da önemli değildir.

    Fonksiyonda çok fazla çarpma işlemi varken, bölme işlemi yerine de çarpma kullanmak işlemcinin çarpma işlemi için kullanılan parçalarında fazladan beklemeye neden olabilir. Bu durumda düz bölme yapmak daha hızlı olabilir. Atıyorum işlemcide çarpma işlemi için 1 tane kapı, bölme işlemi için 1 tane kapı olsun, o zaman 4 tane çarpma kullanırsan sonuncu çarpma işlemi fazladan beklemeye neden olacak. 3 çarpma bir bölme kullanırsan hepsi de beklemeden hesaplamaya alınır ama tamamlanma süreleri değişebilir, atıyorum 3 tane çarpma tamamlanana kadar o bölme işlemi de tamamlanabilir. Aynı ana denk gelirlerse sanki hiç bölme yapılmamış gibi çabucak işlem tamamlanabilir.

    şöyle:

    4 çarpma işlemi:


    zaman=0
    birinci çarpma işleminin ilk adımı

    zaman=1
    birinci çarpma işleminin ikinci adımı ve ikinci çarpma işleminin birinci adımı

    zaman=2
    birinci çarpma işleminin son adımı ve ikinci çarpma işleminin ikinci adımı ve üçüncü çarpma işleminin ilk adımı

    .....

    ....

    zaman=6
    dördüncü çarpma işleminin son adımı

    yani 6 birim sürede 4 çarpma işlemi yapılabildi.

    Üç çarpma işlemi olsaydı bu süre 5 birim süreye inecekti.

    Eğer bölme işlemi 5 birim sürede tamamlanabiliyorsa o zaman 3 çarpma + 1 bölme daha hızlıdır.

    Güncel sistemlerde bellekten bu değeri getirmek 500 birim zaman sürebilir. Ama şöyle birşey de var, bellekten arka arkaya 1-milyon tane bilgiyi arka arkaya hiç beklemeden getirirsen o zaman hesapalamalar sırasında veri başına gereken 500 birim zamanı bile gizleyebilirsin. Bunun için 500 birim zaman gereken çarpma bölme gibi işlemler yapmak gerek.



    < Bu mesaj bu kişi tarafından değiştirildi Tugrul_512bit -- 23 Eylül 2016; 15:09:10 >




  • Bir de tutarlılık önemi. Bölme işlemiyle çarpma işleminin sonuçları sıfırdan sonraki yedinci hanede farklı olabilir. Ardarda tekrarlanan işlemlerde bu hata birikerek saatler sonra apayrı bir sonuca ulaşmana neden olabilir bile.

    Tıpkı bir dizinin ondalıklı elemanlarının teker teker toplandığında alınacak sonuçla, çifter çifter sonra dörder dörder sonra sekizer sekizer toplanarak alınan sonuçtan farklı olacağı gibi.

    Söz konusu program bir oyunsa 0.5 ile çarparım. Bilimsel bir çalışmaysa bölmeyi olduğu gibi bırakırım.

    Quake oyununda kullanılan bir kök alma işlemi var, o zaman için baya hızlı ama şimdiki işlemcilere ve ekran kartlarında çalıştırınca yavaş kalıyor ve işlemcinin kendi kök alma işlemi çok daha hızlı oluyor.


    Tabiki tek başına bir çarpma işlemi 5 birim zamanda tamamlanıyorsa, tek başına bir bölme işlemi de 9 - 38 arası birim zamanda tamamlanabilir. Eğer bölme işlemi için pipeline derinliği 38 ise ve her adımda 1 birim zaman geçirirse, arka arkaya yollanan 38 tane bölme işleminden sonra her birim zamanda 1 bölme işlemi tamamlanmaya başlar. Çarpma işlemi için pipeline derinliği 5 ise, beşinci birim zamandan sonraki her adımda bir çarpma işlemi tamamlanır.



    < Bu mesaj bu kişi tarafından değiştirildi Tugrul_512bit -- 23 Eylül 2016; 15:54:35 >




  • aydınlatığın teşekkür ederim
  • Yapay Zeka’dan İlgili Konular
    beyler acil
    geçen yıl açıldı
    Acil Yardım!!!
    16 yıl önce açıldı
    acil yardım
    4 ay önce açıldı
    Daha Fazla Göster
  • Hocana tamamen aynı olduğunu söyle. Bu zamanda hiçbir derleyici 2'ye bölme için bölme ya da çarpma kullanmaz. Basitçe 1 sağa öteler ki o da modern işlemcilerde en fazla 1 çevrimdir.
  • 
Sayfa: 1
- x
Bildirim
mesajınız kopyalandı (ctrl+v) yapıştırmak istediğiniz yere yapıştırabilirsiniz.