Susun Atur Data Mesra Cache
Reka struktur tatasusunan dan padatkan data untuk setempat cache.
Susun Atur Data Mesra Cache ialah pelajaran C++ Academy percuma di CoddyKit. Ini ialah pelajaran 1 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran C++ Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Hierarki Memori
CPU mempunyai berbilang aras cache (L1, L2, L3) yang jauh lebih pantas daripada memori utama. Kod yang mesra cache memastikan data yang kerap digunakan dekat dengan CPU.
Baris Cache
Memori diambil dalam baris cache — biasanya 64 bait. Membaca satu bait akan memuatkan seluruh baris. Gunakan sifat ini untuk kelebihan anda.
Kekalian Rujukan
Dua sifat penting:
- Kekalian ruang — menggunakan memori berdekatan tidak lama kemudian
- Kekalian masa — menggunakan semula memori yang sama tidak lama kemudian
Berjiran Berbanding Terpaut
Vektor menyimpan data secara berjiran — melaluinya secara lelaran adalah mesra cache. Senarai terpaut menyelerakkan memori, lalu mengosongkan cache pada setiap langkah.
// Cache friendly
std::vector<int> v(1000);
for (auto& x : v) ++x;
// Cache UNfriendly
std::list<int> l(1000);
for (auto& x : l) ++x;AoS Berbanding SoA
Dua susun atur untuk tatasusunan rekod:
- AoS (Tatasusunan Struktur) — semula jadi, tetapi mengiterasi satu medan menyentuh semua medan
- SoA (Struktur Tatasusunan) — lebih baik apabila kebanyakan gelung hanya menggunakan sesetengah medan
// AoS
struct Particle { float x, y, z, vx, vy, vz; };
std::vector<Particle> particles;
// SoA
struct Particles {
std::vector<float> x, y, z, vx, vy, vz;
};Pembungkusan Struktur
Susun ahli daripada yang terbesar kepada yang terkecil untuk meminimumkan pelapik. Alat seperti pahole menunjukkan susun atur sebenar.
struct Bad { char c; double d; char c2; }; // padded
struct Good { double d; char c; char c2; }; // smallerPerkongsian Palsu
Dua bebenang yang menulis pada variabel berbeza dalam baris cache yang sama akan membatalkan cache satu sama lain. Hal ini membawa kesan buruk terhadap prestasi. Tambahkan pelapik sehingga 64 bait.
struct alignas(64) Counter {
std::atomic<int> value;
};Pemisahan Data Panas dan Sejuk
Asingkan data panas (kerap diakses) daripada data sejuk (jarang diakses) ke dalam struktur yang berbeza. CPU hanya menyimpan bahagian panas dalam cache.
Peruntukan Awal
Peruntukkan vektor terlebih dahulu dengan reserve untuk mengelakkan peruntukan semula berulang. Setiap peruntukan semula menyalin semua elemen — mahal dan menyebabkan cache terjejas.
Akses Berjujukan Lebih Pantas
Imbasan linear melalui tatasusunan adalah yang terpantas. Prapengambil perkakasan meramal dan memuatkan baris cache seterusnya secara automatik.
Elakkan Pengalamatan Tidak Langsung
Penuding memaksa CPU menjejaki kebergantungan. std::vector<T*> lebih perlahan daripada std::vector<T> untuk traversal. Gunakan pengalamatan tidak langsung hanya apabila perlu.
Buat Pemprofilan Sebelum Mengoptimumkan
"Mesra cache" ialah panduan, bukan peraturan. Ukur dengan alat seperti perf atau VTune untuk melihat bahagian yang terjejas akibat cache terlepas — kemudian optimumkan.
Semakan Pantas
Mengapakah mengiterasi std::vector biasanya jauh lebih pantas daripada mengiterasi std::list yang mempunyai saiz sama?
Imbas Kembali
CPU moden bergantung pada cache. Utamakan bekas berjiran, gunakan SoA untuk akses medan terpilih, padatkan struktur, elakkan perkongsian palsu, dan buat pemprofilan terhadap cache terlepas dengan perf atau VTune untuk mencari titik panas.
Pelajari C++ dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 51
- Pelajaran
- 203
Soalan Lazim
Adakah pelajaran “Susun Atur Data Mesra Cache” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran C++ Academy, termasuk “Susun Atur Data Mesra Cache”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus C++ Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Susun Atur Data Mesra Cache”?
Reka struktur tatasusunan dan padatkan data untuk setempat cache. Anda berlatih C++ Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan C++ Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran C++ Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 1 daripada 4.
Berapa lamakah pelajaran “Susun Atur Data Mesra Cache” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran C++ Academy ini?
Ya. Setiap pelajaran C++ Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- Susun Atur Data Mesra Cache
- Ramalan Percabangan dan Gelung Panas
- Pemprofilan dengan perf, vtune dan Sanitizers
- Penanda Aras Mikro dengan Google Benchmark