Saya hanya ingin tahu mengapa penjadwal terus-menerus memindahkan aplikasi di antara CPU, daripada membiarkannya tetap. Tampaknya agak konyol untuk memiliki 4 core pada 25% daripada satu pada 100%.
Apakah ini ada hubungannya dengan panas, atau lebih efisien entah bagaimana? Apakah OS lain melakukannya secara berbeda?
Wawasan atau tautan ke hal-hal yang mendalam akan menyenangkan. (Tidak dapat menemukan banyak sendiri.)
Memperbarui:
Dengan "menyebar" Saya tidak bermaksud bahwa itu dijalankan pada beberapa CPU sekaligus, tetapi sedang dipindahkan dari satu ke yang lain beberapa kali per detik, membuat efek yang terlihat menyebar.
windows
performance
cpu
Macke
sumber
sumber
Jawaban:
Saya pikir
wierob
telah menggambarkan hal itu dengan cukup baik.Berikut ini adalah artikel yang lebih lama membahas
processor affinity
pengaturan dengan QX6800 quad-core .(tautan mengarah ke halaman kedua artikel itu).
Jika Anda tidak memaksa afinitas proses ke inti, apakah Anda kehilangan kinerja ?
yang desain prosesor itu sendiri juga mempertimbangkan hal-hal seperti itu.
memiliki cache 8MB
L3
dibagi di 4 core .Perlu dicatat bahwa walaupun Anda mungkin telah memilih untuk menjalankan proses satu-threaded tunggal ini pada sistem, OS itu sendiri akan memiliki beberapa tugas lain yang berjalan yang juga perlu dijadwalkan. Penjadwal menyeimbangkan semua aktivitas ini di seluruh kumpulan prosesor yang tersedia (atau inti).
Ke depannya, dengan arsitektur Nehalem dan NUMA ,
prosesor di beberapa soket juga akan dapat menangani akses akses yang lebih baik.
Berikut adalah gambar cepat dari halaman ArsTechnica di NUMA .
Jika Nehalem dan
i7
minat Anda, saya memiliki beberapa tautan di jawaban ini .sumber
Penjadwal hanya mengeksekusi utas berikutnya yang siap untuk dieksekusi pada inti / CPU "bebas".
Anda dapat menetapkan proses ke CPU tertentu melalui task manager Windows.
Memiliki 4 core pada 25% berarti bahwa 4 thread dijalankan secara bersamaan. Sedangkan, satu inti di x% berarti hanya satu utas yang dijalankan. Jadi yang pertama lebih efisien dalam beberapa kasus.
Tetapi selama eksekusi cache CPU diisi dengan data yang diakses oleh utas. Jadi jika utas dieksekusi pada CPU lain, itu akan mengalami lebih banyak kesalahan cache, yang mahal, karena data tidak ada dalam cache CPU ini.
Apa yang dilakukan utas Anda? Jika utas "tidur" untuk waktu yang sangat singkat, inti yang dieksekusi sebelumnya mungkin ditempati oleh ancaman lain dan karenanya utas Anda dieksekusi pada inti berikutnya yang tersedia. Apa yang terjadi jika Anda menentukan hanya satu inti yang akan digunakan oleh proses Anda (mis. Ia adalah pengelola tugas)?
sumber
Ini bukan. Satu utas hanya dapat berjalan pada satu prosesor. Namun, beberapa proses memiliki beberapa utas, yang dapat disebarkan.
Alasannya, percaya atau tidak, tidak pernah mempertimbangkan seperti apa bentuknya. Sistem mencoba untuk menyebar utas karena tidak memiliki cara untuk mengetahui kapan seseorang akan lonjakan.
sumber
OS memigrasikan utas melintasi inti CPU (dengan cepat, beberapa kali per detik). Lebih efisien untuk menjalankannya pada inti yang sama sepanjang waktu. Ini dapat diberlakukan oleh item menu konteks "Tetapkan afinitas" di Pengelola Tugas.
Perhatikan bahwa biasanya (penggunaan rumah biasa) perbedaannya adalah dalam kisaran beberapa persen.
"4 core masing-masing dengan penggunaan 25%" berarti, sebagaimana Task Manager menunjukkan penggunaan rata-rata, bahwa masing-masing inti sepenuhnya dimanfaatkan seperempat waktu dan membebaskan sisa waktu.
Deskripsi untuk Windows, tetapi serupa pada sistem operasi lain juga.
sumber
Jika ada yang masih membaca ini, saya perhatikan ini juga, dan melakukan beberapa tes untuk melihat apakah itu bukan hanya kebetulan. Ternyata tidak! Saya percaya menyebarkan satu utas ke semua inti lebih efisien karena beberapa alasan:
Juga, karena dua pengamatan di atas, saya menjadi percaya bahwa Turbo Boost dan IDA tidak efektif. Mereka mungkin berguna pada sistem operasi yang lebih lama, tetapi Linux dan Windows 7 menyebar semuanya ke semua core dengan cukup efisien. Jadi, Core 2 Quad q9100 @ 2.26 GHz akan hampir (selalu ada pengecualian :-) selalu lebih cepat daripada Core 2 Duo X9100 @ 3.06GHz, dan saya jarang melihatnya menggunakan IDA (pada dasarnya pendahulu Turbo boost, meningkatkan frekuensi pada satu atau dua core hanya untuk aplikasi berulir tunggal).
sumber