Saya ingin bereksperimen dengan utas pada prosesor multi-inti, misalnya untuk membuat program yang menggunakan dua utas berbeda yang dijalankan oleh dua inti prosesor yang berbeda.
Namun, tidak jelas bagi saya di tingkat mana benang dialokasikan ke inti yang berbeda. Saya bisa membayangkan skenario berikut (tergantung pada sistem operasi dan implementasi bahasa pemrograman):
- Alokasi utas dikelola oleh sistem operasi. Utas dibuat menggunakan panggilan sistem OS dan, jika proses tersebut berjalan pada prosesor multi-inti, OS secara otomatis mencoba mengalokasikan / menjadwalkan utas yang berbeda pada inti yang berbeda.
- Alokasi utas dikelola oleh implementasi bahasa pemrograman. Mengalokasikan utas ke inti yang berbeda membutuhkan pemanggilan sistem khusus, tetapi pustaka utas standar bahasa pemrograman secara otomatis menangani ini ketika saya menggunakan implementasi utas standar untuk bahasa itu.
- Alokasi utas harus diprogram secara eksplisit. Dalam program saya, saya harus menulis kode eksplisit untuk mendeteksi berapa banyak core yang tersedia dan untuk mengalokasikan utas yang berbeda untuk inti yang berbeda menggunakan, misalnya, fungsi perpustakaan.
Untuk membuat pertanyaan lebih spesifik, bayangkan saya telah menulis aplikasi multi-threaded saya di Java atau C ++ di Windows atau Linux. Apakah aplikasi saya secara ajaib melihat dan menggunakan banyak core ketika dijalankan pada prosesor multi-core (karena semuanya dikelola baik oleh sistem operasi atau oleh pustaka thread standar), atau apakah saya harus memodifikasi kode saya untuk mengetahui beberapa core ?
sumber
Saya pernah memiliki lingkungan IRIX SGI yang besar. Hanya untuk itu, saya menulis sebuah program java multi-threaded kecil (yang hanya melakukan siklus CPU) dan membuat 12 thread di dalamnya. Pekerjaan membentang di 12 CPU dalam arsitektur NUMA. Mungkin saya akan mencari program dan menjalankannya pada Dell R910s dan periksa ..
sumber