Saya biasa menulis banyak assembler kembali pada hari itu. Bukan saja kompiler menjadi lebih baik, tetapi sebagian besar perangkat keras sekarang memiliki banyak logika yang dikhususkan untuk eksekusi kode yang out-of-order. Masalah mikro sebenarnya adalah penjadwalan, sebagian besar instruksi komputer mengambil beberapa jam mesin untuk menghasilkan hasil - dan beban memori yang meluputkan cache mungkin membutuhkan beberapa ratus! Jadi idenya adalah untuk menjadwalkan instruksi lain untuk melakukan sesuatu yang bermanfaat, alih-alih menunggu hasil. Dan mesin modern dapat mengeluarkan beberapa instruksi per periode jam. Setelah kami mulai mengeksekusi HW yang tidak sesuai pesanan, saya menemukan bahwa mencoba untuk mendapatkan kinerja yang hebat dengan hand coding menjadi permainan mug. Pertama HW rusak tidak akan menjalankan instruksi dalam pesanan Anda dibuat dengan hati-hati, arsitektur HW baru yang mewah telah mengurangi penalti cukup penjadwalan perangkat lunak yang tidak optimal sehingga kompiler biasanya dalam beberapa persen dari kinerja Anda. Saya juga menemukan bahwa kompiler sekarang menerapkan trik yang terkenal tetapi menghasilkan kompleksitas, seperti membuka gulungan, memuat bawah, pipelining perangkat lunak dll. Intinya, Anda harus bekerja sangat keras, lewati beberapa trik ini dan kompiler mengalahkan Anda. Gunakan semuanya dan jumlah instruksi assembler yang Anda butuhkan bertambah beberapa kali lipat!
Mungkin bahkan lebih penting, sebagian besar masalah kinerja, bukan tentang tingkat masalah instruksi, tetapi memasukkan data ke dalam CPU. Seperti yang saya sebutkan di atas, latensi memori sekarang ratusan siklus, dan CPU dapat menjalankan beberapa instruksi per periode jam, jadi kecuali program-dan terutama struktur data dirancang sehingga tingkat hit cache sangat tinggi, microtuning pada instruksi level tidak akan memiliki hasil. Sama seperti tipe militer mengatakan taktik bicara amatir, logistik pro bicara. Pemrograman kinerja sekarang lebih dari 90% logistik (memindahkan data). Dan ini sulit untuk diukur, karena manajemen memori modern biasanya memiliki beberapa tingkat cache, dan halaman memori virtual ditangani oleh unit perangkat keras yang disebut TLB. Juga penyejajaran tingkat rendah dari alamat menjadi penting, karena transfer data aktual, tidak dalam satuan byte, atau bahkan panjang 64bit, tetapi mereka datang dalam satuan garis cache. Kemudian sebagian besar mesin modern memiliki perangkat keras yang mencoba memprediksi baris cache yang Anda lewatkan dalam waktu dekat dan mengeluarkan prefetch otomatis untuk memasukkannya ke dalam cache. Jadi kenyataannya adalah bahwa dengan model kinerja CPU modern begitu rumit sehingga hampir tidak dapat dimengerti. Bahkan simulator perangkat keras terperinci tidak akan pernah bisa menandingi logika chip yang tepat, sehingga penyetelan yang tepat tidak mungkin dilakukan lagi.
Masih ada tempat untuk beberapa kode tangan. Pustaka matematika (seperti fungsi exp), seperti operasi aljabar linier yang lebih penting (seperti matriks berlipat ganda) masih biasanya dikodekan dengan tangan oleh para ahli yang bekerja untuk vendor perangkat keras (yaitu Intel atau AMD, atau IBM), tetapi mereka mungkin hanya perlu beberapa programmer assembler kedudukan tertinggi per mega-komputer corp.