Saya baru-baru ini menemukan sebuah kasus di mana saya membutuhkan operasi divisi integer pada chip yang tidak memiliki satu (ARM Cortex-A8). Ketika mencoba meneliti mengapa itu harus terjadi, saya menemukan bahwa secara umum pembagian membutuhkan lebih banyak siklus daripada penambahan, pengurangan atau penggandaan pada hampir semua arsitektur integer (atau fixed-point). Mengapa demikian? Apakah tidak dapat diwakili dengan logika dua-lapisan AND-OR seperti yang lainnya?
computer-arithmetic
Phonon
sumber
sumber
Sementara semua CPU saat ini tampaknya menggunakan pendekatan iteratif seperti yang disarankan aterrel , ada beberapa pekerjaan yang dilakukan pada pendekatan non-iteratif. Divisi Poin Floating Precision Variabel dan Root Square berbicara tentang implementasi non-iteratif divisi floating point dan kuadrat dalam FPGA , menggunakan tabel pencarian dan ekspansi seri taylor.
Saya menduga bahwa teknik yang sama memungkinkan untuk menjalankan operasi ini ke satu siklus (throughput, jika bukan latensi), tetapi Anda cenderung membutuhkan tabel pencarian yang besar , dan dengan demikian sangat luas area real-estate silikon untuk melakukannya .
Mengapa itu tidak layak?
Dalam mendesain CPU ada banyak trade-off yang harus dilakukan. Fungsionalitas, kompleksitas (jumlah transistor), kecepatan dan konsumsi daya semuanya saling terkait dan keputusan yang dibuat selama desain dapat membuat dampak besar pada kinerja.
Sebuah prosesor modern mungkin dapat memiliki unit floating point utama yang mendedikasikan transistor cukup pada silikon untuk melakukan divisi floating point dalam satu siklus , tetapi tidak mungkin menjadi penggunaan yang efisien dari transistor tersebut.
Multiply floating point membuat transisi ini dari iteratif ke non-iteratif satu dekade lalu. Saat ini, siklus tunggal bertambah dan bahkan bertambah banyak adalah hal yang biasa, bahkan dalam prosesor seluler.
Sebelum menjadi penggunaan anggaran transistor yang efisien, penggandaan, seperti pembagian, sering dilakukan dengan metode berulang. Saat itu, prosesor DSP yang berdedikasi dapat mendedikasikan sebagian besar silikon mereka untuk unit cepat multiplikasi terakumulasi (MAC) . Core2duo CPU memiliki floating point multiply latency 3 (nilainya keluar dari pipeline 3 cycle setelah masuk), tetapi dapat memiliki 3 multiply dalam penerbangan sekaligus, menghasilkan throughput satu siklus, sedangkan unit SSE2 dapat memompa banyak multiplikasi FP dalam satu siklus tunggal.
Alih-alih mendedikasikan area besar silikon ke unit pembagian satu siklus, CPU modern memiliki banyak unit, masing-masing dapat melakukan operasi secara paralel, tetapi dioptimalkan untuk situasi spesifik mereka sendiri. Faktanya, begitu Anda mempertimbangkan instruksi SIMD seperti SSE atau grafis terintegrasi CPU dari Sandy Bridge atau yang lebih baru dari CPU, mungkin ada banyak unit pembagian titik apung pada CPU Anda.
Jika pembagian floating point generik lebih penting bagi CPU modern maka mungkin masuk akal untuk mendedikasikan area silikon yang cukup untuk membuatnya menjadi siklus tunggal, namun sebagian besar pembuat chip jelas memutuskan bahwa mereka dapat menggunakan silikon dengan lebih baik dengan menggunakan gerbang itu untuk hal-hal lain . Jadi satu operasi lebih lambat, tetapi secara keseluruhan (untuk skenario penggunaan khas) CPU lebih cepat dan / atau mengkonsumsi daya lebih sedikit.
sumber