Saya memiliki perhitungan besar untuk dilakukan. Meskipun saya dapat menggunakan semua core, saya pikir apakah ada alasan untuk meninggalkan 1 core dan tidak menggunakannya? (perhitungan cpu saja tidak ada IO). Atau apakah saya meremehkan OS yang tidak akan diketahui untuk ditangani dan melakukan pengalihan konteks yang tepat bahkan jika saya menggunakan semua core?
12
Jawaban:
Sistem operasi utama cukup matang untuk mengetahui bagaimana menangani proses yang menggunakan setiap inti yang tersedia. Proses lain mungkin (dan sering akan) terpengaruh, tetapi perhitungannya tidak akan menjadi lebih lambat karena Anda menggunakan setiap inti yang tersedia.
Pilihan jumlah inti lebih tergantung pada niat Anda melakukan sesuatu yang lain saat perhitungan sedang dilakukan.
Jika, pada mesin desktop, Anda ingin dapat menggunakan browser web Anda atau menonton video saat perhitungan sedang dilakukan, Anda akan lebih baik membiarkan satu inti gratis untuk itu. Dengan cara yang sama, jika server melakukan dua hal (seperti melakukan perhitungan dan, pada saat yang sama, memproses dan melaporkan metriknya), menjaga inti bebas untuk tugas sampingan bisa menjadi ide yang bagus.
Di sisi lain, jika prioritas Anda adalah membuat perhitungan secepat mungkin, Anda harus menggunakan semua core.
sumber
Tergantung.
Jika mesin ini didedikasikan untuk perhitungan ini, Anda harus menggunakan semua core - sumber daya komputasi yang tidak digunakan tidak mempercepat .
Jika Anda menggunakan penjadwal waktu nyata, penjadwal non-preemptive, atau afinitas prosesor maka Anda harus sedikit lebih berhati-hati karena mudah untuk secara tidak sengaja kelaparan proses lain dari semua sumber daya komputasi. Namun Anda harus mengubah pengaturan ini secara manual agar ada masalah, jadi secara default tidak ada masalah di sebagian besar OS.
Jika mesin tidak didedikasikan untuk perhitungan, memberikan 100% untuk perhitungan mungkin tidak ideal. Misalnya, jika Anda menggunakan browser web saat perhitungan sedang berjalan. Karena beban mesin Anda kadang-kadang akan memuncak di atas 100%, itu akan terasa lamban. Tugas berorientasi throughput seperti perhitungan tidak akan benar-benar diperlambat, tetapi tugas yang sensitif terhadap latensi seperti GUI tidak akan bereaksi dengan cepat. Maka masuk akal untuk hanya memulai NPROC-1 utas / proses untuk perhitungan. Atau, secara eksplisit menggunakan prioritas yang lebih rendah untuk perhitungan daripada tugas normal dapat menyelesaikan masalah ini, dalam hal ini perhitungan harus menggunakan proses NPROC untuk tidak menyia-nyiakan sumber daya apa pun.
sumber
nice
.Saya agak berhati-hati tentang setuju dengan @motoDrizzt, di bawah ini, karena suara negatifnya :), tapi itu memang pengalaman saya yang sebenarnya - lebih banyak lebih baik, bahkan di luar jumlah sebenarnya dari inti (tetapi tidak ribuan). Sebagai contoh, lihat http://www.forkosh.com/images/avoronoi.gif di mana setiap bidang 2D dari 3D-voronoi_diagram dapat dihasilkan secara independen. Dan program ini mengambil atribut nfork = n query_string untuk memotong perhitungan untuk n pesawat "secara bersamaan".
Dengan prosesor empat-inti, waktu (pengguna) untuk menyelesaikan diagram berkurang cukup banyak dengan nfork, hingga sekitar nfork = 8 (empat core ber-hiphread). Namun melampaui 8, waktu masih menurun, meski lebih lambat. Dan di luar sekitar 16, atau lebih, tidak ada peningkatan yang terlihat. Saya belum menganalisis perilaku ini sama sekali, tetapi secara naif menghubungkannya dengan os (linux slackware 14.2x64 dalam kasus ini) proses juggling untuk lebih mengurangi waktu idle secara keseluruhan.
sumber
Pilihan terbaik adalah ketergantungan sistem. Jadi yang ingin Anda lakukan adalah menjalankan kedua versi pada sistem nyata, dan kemudian memeriksa bagaimana sistem merespons. Masih bisakah Anda menggunakan browser, editor teks, hal-hal lain di sistem Anda? Dan apakah kinerja lebih baik saat menggunakan n utas dan bukan n-1? Apa yang terjadi jika Anda menjalankan aplikasi bersama dengan aplikasi lain yang mencoba menggunakan semua CPU?
Dan kemudian Anda perlu mempertimbangkan hyperthreading. Dengan empat core plus hyperthreading, Anda bisa menggunakan 8 core, atau 7 core. Sekali lagi, cobalah responsif sistem dan waktu untuk menyelesaikannya.
Dan akhirnya, pertimbangkan untuk membagi pekerjaan Anda menjadi lebih banyak blok daripada utas. Alasannya adalah bahwa utas yang berbeda akan menyelesaikan pekerjaan pada waktu yang berbeda, dan kemudian Anda ingin pekerjaan yang tersisa diserahkan ke utas yang lebih cepat. Kalau tidak, Anda harus menunggu sampai utas terakhir selesai.
PS. "Hyperthreading tidak dapat membantu dengan kode intensif FPU karena hanya ada satu FPU". Sangat salah. Sangat sulit, bahkan dengan kode intensif FPU, untuk memanfaatkan FPU sepenuhnya karena latensi. Hyperthreading membantu karena ada dua kali lebih banyak operasi independen yang tersedia untuk penjadwalan.
sumber
Saya tidak tahu bagaimana menulis ini dengan cara yang tidak terdengar "buruk", jadi anggap saja itu sebagai ucapan bersahabat, ok?
Mengingat bahwa rata-rata PC biasanya memiliki ribuan atau lebih utas, apa yang membuat Anda berpikir bahwa menggunakan 8 vs 7 akan membuat perbedaan? :-)
Gunakan sebanyak mungkin utas. Dan jika Anda tidak perlu peduli dengan respons OS, dan utas Anda berjalan cukup lama (lebih dari satu detik), Anda bahkan dapat bereksperimen dalam menggunakan dua kali jumlah inti.
sumber