Judulnya mengatakan semuanya: apakah ada cara untuk mendapatkan program yang lebih tua yang dirancang untuk menggunakan inti CPU tunggal untuk menggunakan beberapa inti CPU?
Judulnya mengatakan semuanya: apakah ada cara untuk mendapatkan program yang lebih tua yang dirancang untuk menggunakan inti CPU tunggal untuk menggunakan beberapa inti CPU?
Jawaban:
Sayangnya, program lawas yang ditulis untuk satu CPU tidak dapat dipaksa untuk menggunakan banyak inti CPU. Penggunaan beberapa inti CPU memerlukan banyak utas, yang perlu berkomunikasi satu sama lain sambil memastikan bahwa kondisi balapan dan masalah lainnya tidak terjadi. Aplikasi yang lebih lama tidak dapat dibuat untuk menggunakan lebih dari inti CPU kecuali jika ditulis ulang untuk melakukannya, dan hanya jika sifat aplikasi memungkinkan diparalelkan.
Apa tujuan Anda? Peningkatan kinerja? Sayangnya aplikasi yang dirancang untuk menggunakan hanya 1 inti tidak akan memanfaatkan lebih banyak. Itulah pembicaraan tentang aplikasi "multi-utas" ini.
Setidaknya ada tiga teknik untuk mengeksploitasi banyak prosesor dalam program yang dirancang untuk menggunakan inti tunggal. Yang paling mudah dari teknik-teknik ini adalah dengan menggunakan perpustakaan dan kode sistem yang menggunakan banyak core atau dapat mengeksekusi setidaknya sebagian secara paralel dengan kode aplikasi. Pengumpulan sampah adalah contoh fungsionalitas yang dapat diparalelkan dan mungkin dapat dilakukan secara paralel dengan eksekusi aplikasi. Bahkan tanpa manajemen memori otomatis, ada beberapa potensi paralelisme dalam fungsi alokasi memori karena pengalokasi memori mungkin memiliki beberapa pekerjaan yang harus dilakukan selain hanya menandai bagian memori yang tersedia.
Teknik kedua adalah terjemahan biner. Meskipun ini mungkin dianggap "menulis ulang aplikasi", hal itu dilakukan oleh perangkat lunak dan tanpa akses ke kode sumber. Memproduksi paralelisme tingkat thread tampaknya tidak menjadi tujuan utama dari sebagian besar penelitian dan pengembangan menggunakan terjemahan biner (yang sering berkaitan dengan menjalankan kode warisan pada ISA yang berbeda, mengeksploitasi ekstensi ISA atau mengoptimalkan untuk mikroarsitektur tertentu, dan menggunakan informasi dinamis untuk memberikan yang lebih tinggi pengoptimalan yang dipandu profil kualitas), tetapi potensinya jelas.
Teknik ketiga adalah multithreading spekulatif. Saat ini tidak ada prosesor (yang saya tahu) mendukung multithreading yang dikelola perangkat keras yang dikelola. Namun, dengan diperkenalkannya memori transaksional perangkat keras, memiliki implementasi sistem runtime menjadi agak lebih praktis karena HTM dapat digunakan untuk mendeteksi konflik dalam penggunaan memori. Multithreading yang dikelola perangkat lunak biasanya akan melibatkan beberapa terjemahan biner, tetapi sifat spekulatifnya membenarkan mempertimbangkan teknik yang terpisah.
Kepraktisan teknik ini dibatasi oleh biaya yang terkait dengan sistem yang ada (termasuk biaya komunikasi antara benang dan benang pemijahan), oleh paralelisme terbatas yang dapat mereka eksploitasi, dan oleh pengembalian investasi yang terbatas (aplikasi penting yang dapat bermanfaat secara menguntungkan). diparalelkan kemungkinan akan ditulis ulang, banyak aplikasi akan mendapat manfaat yang relatif sedikit jika sama sekali dari teknik tersebut (terutama dengan batas daya / termal yang memungkinkan satu inti berjalan pada frekuensi yang lebih tinggi daripada beberapa inti), dan biaya pengembangannya signifikan). Namun teknik ini memang ada dan secara teori dimungkinkan untuk menggunakan banyak core dengan aplikasi yang dirancang untuk menggunakan inti tunggal.
Tidak, itu tidak mungkin. Suatu program ditulis secara eksplisit untuk menggunakan banyak core. Bukan hal sepele untuk melakukan pekerjaan dalam banyak core. Itu membutuhkan sinkronisasi semua utas. Seperti satu melempar bola, yang lain menangkap, satu memoles bola, satu membersihkan, satu memeriksa bola apakah memiliki jumlah udara yang baik di dalamnya. Sekarang bayangkan setiap karakter berjalan di utas secara terpisah satu sama lain. Seseorang mencoba menangkap bola ketika tidak dilempar. Atau seseorang mencoba memoles bola ketika sedang dimainkan. Atau dua karakter mencoba menangkap dan melempar bola secara bersamaan. Ada banyak cara untuk crash. Jadi programmer perlu hati-hati mendesain ulang aplikasi inti tunggal sehingga dapat mengambil keuntungan dari beberapa core.