Memori latensi adalah salah satu masalah mendasar yang dipelajari dalam penelitian arsitektur komputer.
Eksekusi Spekulatif
Eksekusi spekulatif dengan masalah instruksi out-of-order sering dapat menemukan pekerjaan yang berguna untuk mengisi latensi selama hit cache L1, tetapi biasanya kehabisan pekerjaan yang bermanfaat setelah 10 atau 20 siklus atau lebih. Ada beberapa upaya untuk meningkatkan jumlah pekerjaan yang dapat dilakukan selama absen latensi panjang. Satu ide adalah mencoba melakukan prediksi nilai (Lipasti, Wilkerson dan Shen, (ASPLOS-VII): 138-147, 1996). Gagasan ini sangat populer di kalangan penelitian arsitektur akademik untuk sementara waktu tetapi tampaknya tidak berhasil dalam praktiknya. Upaya terakhir terkesiap untuk menyimpan prediksi nilai dari tempat sampah sejarah adalah eksekusi runahead(Mutlu, Stark, Wilkerson, dan Patt (HPCA-9): 129, 2003). Dalam eksekusi runahead Anda mengakui bahwa prediksi nilai Anda akan salah, tetapi tetap mengeksekusi spekulatif dan kemudian membuang semua pekerjaan berdasarkan prediksi, pada teori bahwa Anda setidaknya akan memulai beberapa prefetch untuk apa yang seharusnya menjadi L2 cache kangen. Ternyata runahead membuang begitu banyak energi sehingga tidak layak.
Pendekatan terakhir dalam nada ini yang mungkin mendapatkan daya tarik dalam industri melibatkan menciptakan buffer pemesanan ulang sangat lama. Instruksi dijalankan secara spekulatif berdasarkan prediksi cabang, tetapi tidak ada prediksi nilai yang dilakukan. Alih-alih, semua instruksi yang bergantung pada long-latency load miss sit dan tunggu di buffer pemesanan ulang. Tetapi karena buffer pemesanan ulang begitu besar Anda dapat terus mengambil instruksi jika prediktor cabang melakukan pekerjaan yang layak, Anda kadang-kadang dapat menemukan pekerjaan yang berguna jauh di aliran instruksi. Makalah penelitian yang berpengaruh di bidang ini adalah Continual Flow Pipelines(Srinivasan, Rajwar, Akkary, Gandhi, dan Upton (ASPLOS-XI): 107-119, 2004). (Terlepas dari kenyataan bahwa semua penulis berasal dari Intel, saya yakin gagasan itu mendapat lebih banyak daya tarik di AMD.)
Multi-threading
Menggunakan banyak utas untuk toleransi latensi memiliki sejarah yang jauh lebih lama, dengan keberhasilan yang jauh lebih besar di industri. Semua versi yang sukses menggunakan dukungan perangkat keras untuk multithreading. Versi paling sederhana (dan paling sukses) dari ini adalah apa yang sering disebut FGMT ( multi-threading berbutir halus ) atau multi-threading yang disisipkan . Setiap inti perangkat keras mendukung beberapa konteks utas ( konteks pada dasarnya adalah status register, termasuk register seperti penunjuk instruksi dan register flag implisit apa pun). Dalam prosesor multi-threading fine-grained setiap thread diproses di-memesan. Prosesor melacak thread mana yang terhenti pada miss-latency load yang lama dan yang siap untuk instruksi mereka berikutnya dan menggunakan strategi penjadwalan FIFO sederhana pada setiap siklus untuk memilih thread yang siap untuk menjalankan siklus itu. Contoh awal dari ini dalam skala besar adalah prosesor HEP Burton Smith (Burton Smith melanjutkan ke arsitek superkomputer Tera, yang juga merupakan prosesor multi-threading berbutir halus). Tapi idenya jauh lebih jauh ke belakang, ke tahun 1960-an, saya pikir.
FGMT sangat efektif untuk mengalirkan beban kerja. Semua GPU modern (unit pemrosesan grafis) adalah multicore di mana setiap inti adalah FGMT, dan konsep ini juga banyak digunakan dalam domain komputasi lainnya. Sun T1 juga multicore FMGT, dan begitu pula Intel Xeon Phi (prosesor yang sering disebut "MIC" dan dulu disebut "Larabee").
Gagasan Multithreading Simultan (Tullsen, Eggers, dan Levy, (ISCA-22): 392-403, 1995) menggabungkan perangkat keras multi-threading dengan eksekusi spekulatif. Prosesor memiliki beberapa konteks utas, tetapi setiap utas dijalankan secara spekulatif dan tidak sesuai pesanan. Penjadwal yang lebih canggih kemudian dapat menggunakan berbagai heuristik untuk mengambil dari utas yang kemungkinan besar memiliki pekerjaan yang bermanfaat ( Malik, Agarwal, Dhar, dan Frank, (HPCA-14: 50-61), 2008 ). Sebuah perusahaan semikonduktor besar tertentu mulai menggunakan istilah hyperthreading untuk multithreading simultan, dan nama itu tampaknya menjadi yang paling banyak digunakan saat ini.
Kekhawatiran mikroarsitektur tingkat rendah
Saya menyadari setelah membaca ulang komentar Anda bahwa Anda juga tertarik dengan pensinyalan yang terjadi antara prosesor dan memori. Cache modern biasanya memungkinkan beberapa kesalahan secara bersamaan beredar. Ini disebut cache bebas Lockup (Kroft, (ISCA-8): 81-87, 1981). (Tetapi makalah ini sulit ditemukan secara online, dan agak sulit dibaca. Jawaban singkat: ada banyak pembukuan tetapi Anda hanya menanganinya. Struktur pembukuan perangkat keras disebut MSHR (miss information / status holding register) ), yang merupakan nama yang diberikan Kroft dalam makalahnya tahun 1981.)