Saya mencari beberapa tabel atau yang serupa yang dapat membantu saya menghitung efisiensi kode assembly.
Seperti yang saya ketahui, bit shifting membutuhkan 1 jam CPU, tetapi saya benar-benar melihat berapa banyak yang membutuhkan penambahan (pengurangan harus sama), perkalian dan bagaimana mungkin menghitung waktu pembagian jika saya tahu nilai yang membagi.
Saya benar-benar membutuhkan info tentang nilai integer, tetapi waktu eksekusi float juga diterima.
Jawaban:
Secara umum, masing-masing operasi ini membutuhkan satu siklus clock tunggal juga untuk mengeksekusi jika argumen ada di register pada berbagai tahap pipa.
Apa yang Anda maksud dengan latensi? Berapa banyak siklus yang dihabiskan operasi dalam ALU?
Anda mungkin menemukan tabel ini berguna: http://www.agner.org/optimize/instruction_tables.pdf
Karena prosesor modern super skalar dan dapat berjalan di luar urutan, Anda sering dapat memperoleh instruksi total per siklus yang melebihi 1. Argumen untuk perintah makro adalah yang paling penting, tetapi operasi juga penting karena pembagian membutuhkan waktu lebih lama daripada XOR (<1 siklus latensi).
Banyak instruksi x86 dapat mengambil banyak siklus untuk menyelesaikan beberapa tahapan jika kompleks (misalnya, perintah REP atau MWAIT yang lebih buruk).
sumber
div
danidiv
) bahkan lebih buruk: ini diberi kode mikro, dan latensi jauh lebih tinggi daripadaadd
ataushr
, dan bahkan tidak sepenuhnya disalurkan melalui CPU. Semua ini langsung dari tabel instruksi Agner Fog, jadi ada baiknya Anda menghubungkannya.Menghitung efisiensi kode perakitan bukanlah cara terbaik untuk pergi di hari-hari ini dari jaringan pipa Super Scalar Out of Order. Ini akan bervariasi berdasarkan jenis prosesor. Ini akan bervariasi pada instruksi sebelum dan sesudahnya (Anda dapat menambahkan kode tambahan dan membuatnya kadang-kadang berjalan lebih cepat!). Beberapa operasi (divisi khususnya) dapat memiliki rentang waktu eksekusi bahkan pada chip yang lebih lama dapat diprediksi. Sebenarnya waktu banyak iterasi adalah satu-satunya cara untuk pergi.
sumber
Anda dapat menemukan informasi tentang cpu intel di manual pengembang perangkat lunak intel . Misalnya latensi adalah 1 siklus untuk penambahan bilangan bulat dan 3 siklus untuk perkalian bilangan bulat.
Saya tidak tahu tentang multiplikasi, tetapi saya berharap penambahan selalu mengambil satu siklus.
sumber