Bagaimana Anda membatasi program proses tunggal yang berjalan di lingkungan Windows untuk berjalan hanya pada CPU tunggal pada mesin multi-core?
Apakah sama antara program berjendela dan program baris perintah?
MEMPERBARUI:
- Alasan untuk melakukan ini: membandingkan berbagai aspek bahasa pemrograman
- Saya memerlukan sesuatu yang akan bekerja sejak awal proses, oleh karena itu jawaban @ akseli, meskipun bagus untuk kasus lain, tidak menyelesaikan kasus saya
windows
process
multi-core
Jonathan
sumber
sumber
Jawaban:
Jika Anda menjalankan Windows Vista / 7 (mungkin XP, tetapi tidak yakin) itu sangat sederhana.
Ketik:
Control+Shift+Esc
untuk mengaktifkan pengelola tugas Anda.Klik pada tab Proses
Temukan proses yang membutuhkan afinitas prosesornya berubah
Klik kanan pada prosesnya
Klik pada "Set Affinity"
Di sini Anda dapat memilih prosesor mana yang akan digunakan proses Anda.
Semoga berhasil!
EDIT: Anda harus menjadi administrator untuk menjalankannya.
sumber
dari baris perintah, gunakan
ini akan menjalankan program.exe pada CPU pertama sebagai "1" adalah nilai hex dari topeng afinitas
sumber
Tergantung pada apa yang ingin Anda lakukan:
Metode 1: Sesuai permintaan
Gunakan ImageCFG . Utilitas ini akan memungkinkan Anda mensetup sebuah executable untuk dijalankan pada sejumlah core. Pastikan Anda mencadangkan target yang dapat dieksekusi sebelum melakukan perubahan dan mengembalikannya setelah Anda selesai memainkannya.
Metode 2: Memaksa seluruh Sesi Windows (Vista / 7)
bcdedit /set onecpu on
pada prompt perintahbcdedit /set onecpu off
dan reboot lagi.Metode 2: Memaksa seluruh Sesi Windows (XP)
Anda akan menemukan bagian berikut (atau serupa) dalam file:
[sistem operasi]
multi (0) disk (0) rdisk (0) partisi (2) \ WINDOWS = "Microsoft Windows XP Professional" / fastdetect
Ubah dengan menambahkan flag / onecpu:
[sistem operasi]
multi (0) disk (0) rdisk (0) partisi (2) \ WINDOWS = "Microsoft Windows XP Professional" / fastdetect / onecpu
Mulai ulang. Setelah selesai bermain hapus bendera dan reboot lagi.
Metode 0: Bukan metode yang baik (Prosesor Affinity)
Apa pun yang melibatkan Prosesor Affinity bukanlah pilihan yang baik, saya khawatir. Afinitas prosesor adalah petunjuk untuk prosesor. Prosesor tidak berkewajiban untuk menghormatinya, dan seringkali tidak.
sumber
D:\>bcdedit /set onecpu
hasil dalamThe set command specified is not valid.
....The parameter is incorrect.
Saya menempatkan fungsi berikut dalam program saya di python 2.6 dan itu memanggil fungsi windows. Mesin saya hanya memiliki dua inti sehingga Anda mungkin perlu mengubah bagian itu. Komentar memberi tahu Anda cara melihat apa yang menjadi pertalian saat ini. Ini berfungsi "sebagaimana adanya" untuk mesin inti tunggal jika Anda menetapkan atau default ke topeng 1.
sumber
Di Windows 8, Anda harus pergi ke tab Detail dari task manager untuk melakukan Set Affinity. Itu tidak memberi Anda opsi pada tab Proses.
EDIT: Juga, jika program yang Anda ingin mulai memiliki parameter, utas ini bisa berguna: Bagaimana memulai program dengan argumen baris perintah pada Windows 'cmd dengan perintah' mulai '?
sumber
Ketika saya mencari informasi yang sangat mirip menggunakan PowerShell, saya menemukan informasi yang saya butuhkan di sini: http://www.energizedtech.com/2010/07/powershell-setting-processor-a.html
Anda tidak menyebutkan OS Windows yang Anda gunakan, (Yang lebih tua tidak datang dengan PowerShell, meskipun Anda dapat menginstalnya jika tidak ada di sana).
Cepatnya, adalah bahwa di PowerShell, proses afinitas hanyalah sebuah properti yang dapat Anda ubah dengan mudah.
Untuk melihat properti (dan informasi menarik lainnya) dari proses Anda (menggunakan foo sebagai contoh proses), perintah PowerShell adalah:
Anda akan melihat ProcessorAffinity adalah salah satu properti itu. Mengubahnya sepele, dan Anda dapat memilih inti yang ingin Anda jalankan, menggunakan nilai-nilai dari tabel / tautan Revolter di atas.
Untuk melihat apa nilai properti ProcessorAffinity untuk foo, inilah perintahnya:
Jadi jika Anda ingin menjalankan foo hanya pada cpu 4, Anda akan menetapkan nilainya seperti:
sumber
start /affinity
jawabannya. Bisakah teknik Anda melakukannya? Jika demikian, tolong jelaskan caranya.Start-Process foo ; (Get-Process foo).ProcessorAffinity=8
Namun, setelah membaca komentar Anda, dan menemukan yangStart-Process
memiliki bendera afinitas yang hilang itu sendiri, saya datang dengan yang berikut, yang saya uji:[System.Diagnostics.Process]::start("foo.exe").ProcessorAffinity=0x0010