Mengapa pembagian perangkat keras memakan waktu lebih lama daripada multiplikasi pada mikrokontroler? Misalnya, pada dsPIC, sebuah divisi membutuhkan 19 siklus, sedangkan multiplikasi hanya membutuhkan satu siklus clock.
Saya telah melalui beberapa tutorial, termasuk algoritma Division dan algoritma Multiplication di Wikipedia. Ini alasan saya.
Algoritma pembagian, seperti metode pembagian lambat dengan memulihkan di Wikipedia, adalah algoritma rekursif. Ini berarti bahwa (perantara) hasil dari langkah k
digunakan sebagai input ke langkah k+1
, yang berarti bahwa algoritma ini tidak dapat diparalelkan. Oleh karena itu, dibutuhkan setidaknya n
siklus untuk menyelesaikan pembagian, sedangkan n
sejumlah bit dalam dividen. Untuk dividen 16-bit, ini sama dengan setidaknya 16 siklus.
Algoritma multiplikasi tidak perlu bersifat rekursif, yang artinya dimungkinkan untuk memparalelkannya. Namun, ada banyak algoritma multiplikasi yang berbeda, dan saya tidak memiliki petunjuk yang mana yang dapat digunakan oleh mikrokontroler. Bagaimana cara kerja multiplikasi pada perangkat keras / mikrokontroler?
Saya telah menemukan algoritma pengali Dadda , yang seharusnya hanya membutuhkan satu siklus clock untuk menyelesaikannya. Namun, yang tidak saya dapatkan di sini adalah bahwa algoritma Dadda menghasilkan dalam tiga langkah, sedangkan hasil dari langkah 1 digunakan pada langkah 2, dll. Menurut ini, ini akan memakan waktu setidaknya tiga siklus jam untuk menyelesaikannya.