Bisakah program single-threaded dibuat untuk menggunakan banyak core?

12

Judulnya mengatakan semuanya: apakah ada cara untuk mendapatkan program yang lebih tua yang dirancang untuk menggunakan inti CPU tunggal untuk menggunakan beberapa inti CPU?

Chris
sumber
13
Tidak, tidak mungkin.
Moab
5
Kalau saja itu semudah itu ..
Brendan Long
1
Bagaimana jika ada program yang 'meniru' prosesor (seperti mungkin vm?) Tetapi mengambil CPU multi-core Anda dan mengemulasi CPU single-core dengan daya pemrosesan lebih banyak per thread? Apakah itu mungkin?
schizoid04
Siapa yang akan mengelola sinkronisasi antara beberapa utas, karena urutan penting.
user36582

Jawaban:

16

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.

bwDraco
sumber
19
Perlu juga dicatat bahwa beberapa aplikasi tidak dapat ditulis ulang untuk memperhitungkan banyak inti. Sebagian besar tergantung pada seberapa paralel prosesnya. Contoh sederhana dari proses yang tidak dapat diparalelkan adalah reproduksi manusia: Seorang wanita dapat menghasilkan satu anak dalam 9 bulan. Sembilan wanita dapat menghasilkan 9 anak dalam 9 bulan, tetapi Anda tidak dapat menggunakan 9 wanita untuk menghasilkan anak tunggal dalam satu bulan.
AndrejaKo
1
Pada prinsipnya seseorang dapat menulis suatu program untuk menganalisis program lain dan mencoba untuk memparalelkannya. Yang mengatakan, bahkan versi "mudah" yang sangat terbatas dari masalah ini telah menghasilkan Ph.D. disertasi untuk beberapa generasi terakhir dan kemajuannya lambat. Masalah penuh mungkin AI-lengkap.
dmckee --- ex-moderator kitten
Hebat, terima kasih semua, Anda membuat saya grion dengan Wanita dan contoh kelahiran Anda, terutama ketika Anda berbicara tentang manufaktur: D
Chris
bagaimana jika suatu program memiliki banyak operasi matematika independen yang kemudian digunakan untuk satu sama lain? mungkin utas kedua dapat menguraikan program, hmm saya tidak tahu apa yang saya katakan. Jika sebuah thread dapat mengurai perakitan .. "lakukan operasi mahal di sini, kemudian lakukan operasi mahal kedua pada hal ini sehingga operasi mahal pertama tidak menyentuh" ​​oke saya akan meletakkan satu operasi mahal pada satu utas, satu di yang lain, kemudian disinkronkan menempatkannya kembali ke utas utama. Saya kira seluruh program harus dipra-parsing untuk mengidentifikasi operasi mahal yang independen.
Menyebabkan Arus Bawah Di Mana Saja
13

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.


sumber
2

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.

Paul A. Clayton
sumber
0

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.

pengguna36582
sumber