Mengapa kode Anda tidak menggunakan CPU 100%? [Tutup]

42

Saya berbicara secara khusus tentang program C # .NET 4 yang berjalan pada Windows XP atau lebih tinggi, tetapi jawaban umum juga dapat diterima.

Asumsikan program yang sudah dioptimalkan dan efisien. Masalahnya di sini sepenuhnya karena efek penggunaan CPU yang tinggi pada perangkat keras, dan apakah program penggunaan tinggi harus dibatasi untuk mengurangi keausan, bukan pada apakah implementasi saya efisien.

Seorang kolega hari ini menyarankan saya untuk tidak menggunakan 100% CPU pada proses pemuatan data saya karena "CPU modern murah dan akan menurun dengan cepat pada CPU 100%".

Apakah ini benar? Dan jika demikian, mengapa? Saya sebelumnya mendapat kesan bahwa penggunaan CPU 100% lebih disukai untuk operasi intensif atau lama, dan saya tidak dapat menemukan sumber yang dapat dipercaya pada subjek.

Nick Udell
sumber
6
Dengan asumsi bahwa aplikasi Anda adalah satu-satunya hal yang berjalan di atas kotak, maka secara tegas, pemanfaatan CPU 100% sebenarnya tidak buruk, tetapi, itu mungkin mengindikasikan bahwa ada sesuatu yang mungkin bisa Anda lakukan dengan lebih baik. Saya belum banyak bekerja dengan aplikasi desktop, tetapi untuk aplikasi web, misalnya, saya belum pernah melihat aplikasi yang memaksimalkan beban CPU dan kode yang menggunakan siklus itu benar-benar optimal. Selalu ada yang salah. Namun, itu karena di web, kita sering terikat I / O, jadi masalah CPU sepertinya tidak pantas. Saya yakin aplikasi Anda berbeda.
Brandon
7
Juga, berbagai sistem operasi menangani kasus ini secara berbeda. Kotak Windows saya, misalnya, berjalan sangat jika CPU digunakan 100%. Di sisi lain, saya telah melihat server Linux berjalan pada 100% CPU selama beberapa hari berturut-turut dan itu baik-baik saja. (Meskipun kami merilis perbaikan beberapa hari kemudian.)
Brandon
17
Anda ingin melakukan pekerjaan secepat mungkin tanpa terlalu boros. Jika Anda menggunakan 100% CPU untuk melakukan perhitungan yang bermanfaat maka itu bagus. Jika Anda menggunakan 100% CPU di loop yang tidak berguna itu sia-sia.
nwp
10
Anda membayar semuanya. Gunakan semua itu.
Brian Hooper
4
Pertanyaan ini tampaknya di luar topik karena ini tentang elektronik dan bukan tentang pemrograman.

Jawaban:

59

Jika pendinginan tidak mencukupi, CPU mungkin terlalu panas. Tetapi mereka semua (yah, setidaknya semua CPU PC modern) memiliki berbagai mekanisme perlindungan termal yang akan mempercepat kecepatan clock atau, sebagai upaya terakhir, dimatikan.

Jadi ya, pada laptop yang berdebu, beban CPU 100% dapat menyebabkan masalah sementara, tetapi tidak ada yang akan rusak atau "menurun" (apa pun artinya).

Untuk masalah yang terikat CPU, beban CPU 100% adalah cara yang tepat.

Adapun respons aplikasi (UI), itu konsep yang terpisah dari pemanfaatan CPU. Sangat mungkin untuk memiliki aplikasi tidak responsif yang menggunakan CPU 1%, atau aplikasi responsif yang menggunakan CPU 100%. Responsif UI bermuara pada jumlah pekerjaan yang dilakukan di utas UI, dan prioritas utas UI dibandingkan utas lainnya.

Joonas Pulakka
sumber
3
dan OS bahkan dapat memberlakukan irisan dingin untuk core
ratchet freak
8
Saya pikir jawaban sebenarnya adalah bahwa sebagian besar proses tidak terikat CPU, tetapi sebaliknya I / O terikat, itu sebabnya kami hidup di dunia di mana 100% penggunaan CPU tidak normal, setidaknya untuk perhitungan "umum / generik".
Penemu angin
4
@ jendela saya akan mengatakan, untuk "perhitungan", mencapai 100% cukup standar, tetapi hanya selama "perhitungan" harus melakukan sesuatu dengan matematika :) misalnya memproses permintaan MySQL bukan perhitungan untuk saya;)
yo '
@tececz - Dalam arti saya menggunakannya perhitungan hanya berarti waktu CPU. Kami hanya bertengkar tentang terminologi di sini, bagi saya semua yang dilakukan CPU adalah perhitungan ("menghitung"). Sebagai ilmuwan data saya juga akan mengatakan bahwa sebagian besar matematika juga terikat I / O (di luar matematika paling sepele). Banyak waktu Anda di dunia matematika adalah menemukan cara untuk secara efisien mengompresi / mengalirkan data ke prosesor Anda untuk menjaga agar penggunaan CPU setinggi mungkin (sambil meminimalkan inefisiensi cache, tentu saja).
Penemu angin
4
Anekdot tentang "laptop berdebu": untuk percobaan tesis Master saya, saya telah menggunakan laptop yang berumur 4 tahun sebagai pelari. Pemanfaatan CPU 100% 24/7 selama sekitar 3 bulan . Setelah itu, kata laptop diturunkan ke peran server selama 4 tahun lagi sebelum akhirnya menyerah hantu (mungkin karena masalah grafis yang sudah rusak).
mikołak
15

Program Windows (winforms / WPF) harus selalu responsif. Dengan implementasi naif dari proses yang menggunakan sumber daya cpu 100%, itu terlalu mudah untuk membuat program Anda atau bahkan sistem Anda tampak lamban dan menggantung.

Dengan implementasi yang baik (misalnya: gunakan utas terpisah dengan prioritas lebih rendah) seharusnya tidak menjadi masalah.

Anda tidak perlu khawatir tentang kerusakan cpu Anda lebih cepat.

Pieter B
sumber
3
Tentu saja program yang melakukan perhitungan jangka panjang mungkin tidak boleh winforms / wpf aplikasi melainkan pekerjaan batch tanpa UI. Itu membuat mereka lebih sederhana karena mereka tidak perlu peduli memiliki utas UI responsif dan memungkinkan meluncurkannya melalui penjadwal tugas dan semacamnya. Jika UI diperlukan, saya masih akan merekomendasikan aplikasi launcher dalam proses yang benar-benar terpisah (yang dapat tetap responsif dengan mudah; cukup untuk menghindari pemblokiran menunggu pesan status dari pekerjaan batch).
Jan Hudec
15

Biasanya tidak ada yang salah dengan program yang menggunakan CPU 100% sementara itu sebenarnya melakukan pekerjaan yang bermanfaat dan tidak mengambil waktu dari hal yang lebih penting . Jika platform perangkat keras tertentu misalnya hanya mampu menggunakan 100% CPU terus menerus selama satu detik sebelum harus kembali ke 50% untuk menghindari overheating, umumnya lebih baik untuk aplikasi yang memiliki pekerjaan yang berguna untuk melakukanuntuk berlari secepat mungkin, dan biarkan CPU atau OS menangani pembatasan yang diperlukan, daripada aplikasi untuk menebak seberapa cepat itu "harus" berjalan. Jika aplikasi atau utas memiliki pekerjaan prioritas rendah untuk dilakukan yang akan berguna tetapi tidak selalu kritis, mungkin akan membantu bagi OS untuk membatasi penggunaan CPU tugas rendah prioritas hingga 50% sehingga jika CPU perlu melakukan sesuatu yang cepat akan siap untuk "berlari" sebentar, tetapi aplikasi tidak perlu khawatir tentang hal-hal seperti itu di luar meminta prioritas utas rendah.

Situasi terbesar di mana penggunaan 100% CPU adalah saat salah:

  • Aplikasi ini sibuk menunggu beberapa peristiwa yang tidak akan dipercepat oleh pemungutan suara yang persisten [dan mungkin benar-benar ditunda jika upaya yang dilakukan mengecek apakah tugas yang dilakukan menempati sumber daya CPU yang seharusnya dapat dihabiskan dengan melakukan tugas].

  • Aplikasi ini menggambar ulang tampilan terlalu sering. Definisi "terlalu sering" akan tergantung dalam beberapa ukuran pada sifat perangkat layar dan konten yang ditampilkan. Jika perangkat keras layar dapat menampilkan 120fps, mungkin ada kasus di mana animasi dapat ditampilkan pada 120fps tanpa menambahkan motion blur, tetapi tidak dapat ditampilkan dengan bersih pada frame rate yang lebih rendah tanpa menambahkannya. Jika rendering frame dengan motion blur akan lebih lama daripada rendering tanpanya, maka rendering pada 120fps pada perangkat keras yang mendukungnya sebenarnya tidak lebih mahal daripada rendering pada frame rate yang lebih lambat dengan motion blur. [Situasi sederhana: roda dengan 29 jari-jari, berputar pada satu revolusi per detik. Pada 120fps, roda akan tampak berputar dengan kecepatan dan arah yang tepat; pada 60fps,

Yang pertama jelas dikenali sebagai buruk. Yang kedua sedikit lebih halus. Jika seseorang menargetkan platform seluler, dalam beberapa kasus mungkin diinginkan untuk memungkinkan pengguna memilih frame rate animasi yang diinginkan, karena beberapa pengguna mungkin tidak khawatir tentang masa pakai baterai tetapi menginginkan animasi kualitas terbaik, sementara yang lain akan menerima kualitas yang lebih rendah, sementara yang lain akan menerima kualitas yang lebih rendah animasi dengan imbalan masa pakai baterai yang lebih baik. Daripada meminta aplikasi mencoba menebak di mana seharusnya trade-off, mungkin akan membantu untuk membiarkan pengguna menyesuaikannya.

supercat
sumber
10

"CPU modern murah dan akan menurun dengan cepat pada CPU 100%".

Saya tidak berpikir ada orang yang benar-benar membahas bagian "menurunkan" dari pertanyaan ini. IC akan menurun ketika suhu die melebihi batas pabrikan. IC biasanya dirancang untuk beroperasi hingga 125C, meskipun setiap peningkatan 10C mempersingkat masa pakai hingga 50%

Prosesor tidak selalu memiliki pengaturan termal. Kemudian beberapa AMD Durons mengalami masalah (diduga itu mungkin untuk menghancurkan satu jika dijalankan tanpa heatsink). Sekarang semua prosesor PC akan memiliki sensor suhu built-in yang mengumpan balik ke jam CPU, dan akan memperlambat jam untuk mencegah kerusakan. Jadi Anda mungkin menemukan bahwa program Anda menggunakan 100% CPU yang tersedia tetapi CPU hanya berjalan pada 75% dari kecepatan pengenalnya karena pendinginannya tidak memadai.

Dalam program pengguna bukan tempat yang tepat untuk mencoba mengelola konsumsi CPU. Umumnya program Anda harus bergantian antara melakukan hal-hal secepat mungkin dan menunggu, ditangguhkan, untuk input atau akses disk. Anda harus menghindari kesibukan dan spinlocking jika memungkinkan, tetapi sebagai rasa hormat kepada seluruh sistem.

Baik Windows dan Linux memiliki sistem CPU "govenor" yang akan melakukan kinerja dan manajemen termal. Karena ini dilakukan pada level OS, ia dapat menjelaskan konsumsi total sistem CPU. Merupakan tanggung jawab sistem operasi untuk mengelola perangkat keras dan mencegah program pengguna menyalahgunakannya. Ini adalah tanggung jawab pemilik perangkat keras untuk menjaga kipas tetap bersih dan berfungsi, dan pabrikan untuk menyesuaikan heatsink dan kipas yang memadai di tempat pertama.

Ada beberapa kasus di mana perangkat memiliki pendinginan yang tidak memadai, tetapi banjir pengembalian mengajarkan produsen untuk tidak melakukan itu.

pjc50
sumber
Video AMD Duron yang meledak itu kemungkinan palsu. Pernyataan Anda tentang pengaturan termal masih valid.
Sam
1
Hm, saya sudah mengeluarkannya karena saya bisa melihat cukup banyak klaim di google bahwa itu palsu.
pjc50
3
Dimungkinkan untuk melakukan overheat pada CPU Intel Core modern dengan menulis kode yang mendorong mesin SSE dan sengaja menonaktifkan pelambatan CPU di OS. Tampaknya produsen (bahkan Intel sendiri) mendesain persyaratan termal berdasarkan asumsi bahwa tidak normal (mungkin?) Untuk memaksa CPU untuk menghitung klaim 4 jepit per siklus clock sepanjang waktu. Ketika seseorang benar-benar berhasil menulis kode yang melakukannya, CPU-nya mulai kepanasan. Lihat: stackoverflow.com/questions/8389648/…
slebetman
^ "diduga itu mungkin untuk menghancurkan satu jika dijalankan tanpa heatsink" - Saya telah "secara pribadi mengkonfirmasi" adalah mungkin untuk menghancurkan K7 sebelumnya tanpa heatsink .. ; itu seperti, hampir 2 dekade yang lalu? !!
user2864740
3

Untuk berperan sebagai pendukung iblis: Di satu sisi, sebuah program yang tidak dapat mencapai utilisasi 100% dapat menyebabkan keausan yang lebih buruk: Kecuali jika diskors menunggu menunggu keystroke, kemungkinannya adalah diskors menunggu disk I / O sebagian besar waktu. Dan disk (biasanya masih) perangkat mekanis besar yang dikenakan keausan mekanis atau risiko guncangan / efek gyroscopic ketika mereka bergerak, belum lagi konsumsi daya.

Hagen von Eitzen
sumber
Dalam hal ini, ini hanyalah proses kompleks pada dataset besar (dalam memori), yang membutuhkan waktu beberapa menit. Tapi itu pasti poin bagus untuk pembaca lain.
Nick Udell
3

"..modern modern murah dan akan menurun dengan cepat pada CPU 100%".

Anda tidak perlu khawatir tentang "degradasi CPU" sama sekali. CPU modern tidak berkualitas kurang dari di masa lalu.

Hal ini sangat mahal (dan semakin mahal setiap beberapa tahun) untuk membuat CPU, beberapa miliaran untuk membangun fab baru yang tidak biasa (lihat link).

http://en.wikipedia.org/wiki/Semiconductor_fabrication_plant

Biaya produksi CPU paling banyak bergantung pada no. unit yang diproduksi. Ini adalah fakta terkenal di bidang ekonomi. Itulah alasan mereka bisa dijual (relatif) "murah". (Saya pikir, tidak perlu tautan di sini)

Saya dapat membuat daftar beberapa alasan mengapa saya akan mempertimbangkan CPU modern cenderung lebih berkualitas daripada di "masa lalu".

Tetapi hanya yang paling penting: Keuntungan dalam pengujian. Elektronik modern "dirancang untuk diuji". Apakah perangkat lunak atau perangkat keras, wawasan luas untuk menilai pengujian atas hampir semua hal lain, tidak terlalu lama. Untuk CPU, tes bahkan diambil untuk membentuk harga dan jenis frekuensi yang berbeda, misalnya CPU terbaik dijual dengan frekuensi tertinggi. Meskipun demikian, prosesor yang lebih murah sangat sering dapat beroperasi dengan frekuensi yang lebih tinggi daripada yang dijual - mereka lumpuh hanya karena alasan bahwa produsen ingin menjual beberapa prosesor "tingkat tinggi" dengan harga lebih tinggi.

(Di satu sisi, tentu saja ada lebih banyak kesalahan yang mungkin terjadi pada prosesor dengan lebih dari 1,5 miliar transistor seperti biasa saat ini daripada dengan beberapa ribu transistor dari prosesor tahun tujuh puluhan. Tetapi ini tidak bertentangan dengan jawaban saya IMO. Prosesor pada umumnya cenderung memiliki banyak kesalahan yang diketahui, setidaknya dalam mikrokode, tetapi ini tidak dikenakan di sini.)

Bahkan ada lebih banyak alasan untuk tidak khawatir tentang penurunan CPU untuk program Anda:

  • Alasan pertama adalah CPU modern mengurangi frekuensi atau throttle mereka, jika terlalu panas.

    Harus jelas bahwa jika Anda menggunakan CPU 100% 24/7 sepanjang tahun biasanya akan mati lebih awal dari CPU yang hanya digunakan setiap minggu satu jam. Tapi itu juga berlaku untuk mobil. Hanya dalam kasus seperti itu saya akan berpikir tentang pemanfaatan CPU dan potensi tidur sendiri.

  • Alasan kedua adalah sangat sulit untuk menulis sebuah program yang menggunakan 100% CPU dari OS, (misalnya di Windows). Selain itu, CPU modern (biasanya) memiliki setidaknya 2-4 core. Jadi algoritma tradisional yang cenderung menggunakan 100% dari CPU single core, sekarang hanya memiliki 50% pada CPU dual core (disederhanakan tetapi terlihat dalam skenario nyata).

  • Selain itu sistem operasi memiliki kontrol atas CPU dan bukan program Anda, jadi jika ada aplikasi lain dengan prioritas yang sama atau lebih tinggi (apa standarnya), program Anda hanya mendapatkan CPU sebanyak mungkin, tetapi aplikasi lain tidak akan kelaparan. (Tentu saja ini hanya teori yang disederhanakan, dan tentu saja multitasking Windows, Linux dan lainnya tidak sempurna, tetapi secara keseluruhan saya akan menganggap itu benar).

"Saya sebelumnya mendapat kesan bahwa penggunaan CPU 100% lebih disukai untuk operasi intensif atau lama .."

Ya, tetap dengan ini. Tapi misalnya, jika Anda menunggu & mengulang proses lain, dengan kata lain tidak melakukan apa-apa, tidak akan terlalu buruk jika Anda Thread. Tidur () beberapa milidetik dalam loop itu, memberikan waktu ekstra kepada orang lain. Sedangkan itu tidak perlu untuk OS multitasking yang baik, saya memecahkan beberapa masalah dengan ini misalnya untuk Windows 2000. (Itu TIDAK berarti tentu saja menggunakan Sleep () dalam perhitungan misalnya ..

Philm
sumber
3
Sementara jawaban ini benar hari ini, ada kekhawatiran untuk masa depan. Dulu "keadaan padat" berarti keandalan maksimal, tetapi sekarang kami memiliki flash MLC yang dalam beberapa kasus hanya diperingkat 1000 menghapus siklus per blok. Berapa lama sampai ukuran die yang menyusut menghasilkan fenomena serupa untuk CPU yang perlu dijalankan pada 100% secara konstan?
Michael
2
@Michael, CPU tidak bermutasi, dan mereka menulis ke memori yang mudah menguap — tetapi saya masih mengerti apa yang ingin Anda katakan.
Peter
3

Degradasi semacam itu secara teori dimungkinkan dan disebut " electromigration ". Elektromigrasi tergantung pada suhu, semakin cepat seiring naiknya suhu. Apakah ini merupakan masalah praktis untuk CPU modern masih diperdebatkan. Praktik desain VLSI modern mengkompensasi elektromigrasi dan chip lebih mungkin gagal karena alasan lain.

Karena itu, elektromigrasi terjadi bahkan pada beban dan suhu normal , tetapi cukup lambat bahwa chip yang dirancang dengan baik menjadi usang jauh sebelum gagal, atau gagal melalui mekanisme lain terlebih dahulu.

Laju elektromigrasi tergantung pada suhu chip, dengan masa pakai dua kali lipat untuk setiap (kira-kira) 10 ° C. Faktanya, ini adalah dasar dari sebuah tes yang disebut "HTOL" (masa operasi suhu tinggi), yang mengukur berapa lama untuk sebuah chip mati pada, katakanlah, 125 ° C. Chip yang berjalan pada 125 ° C akan gagal kira-kira 100 kali lebih cepat daripada chip yang berjalan pada 55 ° C, jadi jika dirancang untuk bertahan setidaknya 10 tahun pada 55 ° C, sebuah chip mungkin gagal dalam 1 bulan pada 125 ° C. Jika berjalan pada sesuatu yang lebih masuk akal seperti 85 ° C, chip seperti itu masih akan gagal setidaknya 5-10x lebih cepat daripada yang dirancang untuk itu.

Tentu saja, CPU biasanya dirancang dengan mempertimbangkan suhu yang lebih tinggi, sehingga biasanya dapat bertahan selama bertahun-tahun pada 85 ° C 24/7 operasi beban 100%. Jadi saya menyarankan agar Anda tidak khawatir tentang "aus" CPU, dan hanya khawatir tentang apakah beban 100% sesuai dari perspektif rekayasa perangkat lunak.

Roman Starkov
sumber
Menemukan kata itu mengarah ke pencarian dengan banyak hasil yang bacaan baik di jaringan SE ... banyak di antaranya di Electronics.SE dan SuperUser.
1

Jika Anda menjalankan kode pada klien, utilisasi CPU 100% berarti bahwa komputer klien pada waktu itu tidak dapat digunakan untuk hal lain selain tugas dengan prioritas lebih tinggi. Karena sebagian besar aplikasi biasanya berjalan dalam prioritas default, pengguna yang menggunakan komputer itu akan melihat komputer membeku dan tidak akan dapat melakukan hal lain di komputer mereka. Bahkan jika kita berbicara tentang ledakan singkat, pengguna yang mengerjakan sesuatu masih akan menyadarinya.

Seperti yang orang lain katakan, Anda cukup tertutup tentang pengaturannya, jadi saya tidak bisa mengatakan dengan pasti. Tapi, jika klien Anda adalah komputer desktop, jauhi utilisasi CPU 100%. Bukan karena degradasi CPU, tetapi karena itu bukan bentuk yang baik untuk mengganggu pengguna selama bekerja.

Vladimir Kocjancic
sumber
6
Windows bekerja dengan cara ini. Di Linux dan banyak sistem lainnya utas yang menunggu sesuatu (input pengguna) secara otomatis mendapatkan prioritas di atas utas menggunakan waktu yang dialokasikan, sehingga program interaktif tetap responsif bahkan ketika Anda tidak bermain dengan prioritas.
Jan Hudec
2
@ JanHudec Windows sebenarnya melakukan itu. superuser.com/questions/194223/…
NtscCobalt
@NtscCobalt: Ya. Yang tampaknya bukan Windows CE. Dan Windows memiliki masalah serius setiap kali proses pada disk berat, tapi itu jelas sesuatu yang berbeda (penanganan disk agak buruk pada Windows pada umumnya).
Jan Hudec
1

Jadi situasinya adalah ini: Anda memiliki beberapa kode yang berjalan katakanlah selama lima jam menggunakan 100% dari semua CPU, yang dioptimalkan sebanyak yang Anda bisa, pemilik mesin baik-baik saja dengan mesin tidak dapat digunakan selama lima jam, dan kolega Anda mengklaim akan lebih baik untuk menjalankan kode Anda dalam 6 jam menggunakan 83,33% dari semua CPU, karena menempatkan lebih sedikit keausan pada komputer.

Itu tergantung pada komputer yang Anda gunakan. Saya tahu bahwa produsen komputer menolak perbaikan garansi dalam waktu garansi pada komputer rumah murah yang digunakan dalam pengaturan ilmiah yang beroperasi 24/7. Mereka jelas ingin pelanggan membeli server yang lebih mahal atau komputer "bisnis". Apakah mereka berhasil, saya tidak tahu.

Setiap Mac yang saya miliki memiliki kode menjalankan hidupnya pada 100% penggunaan CPU selama berhari-hari. Dalam satu kasus saya harus mematikan layar, karena saya tidak memiliki pengisi daya asli untuk laptop, dan dengan 4 core dan hyper threading itu menggunakan daya lebih dari pengisi daya yang disediakan - sehingga baterai turun, dan ketika mencapai 5 persen komputer memperlambat kecepatan jam hingga baterai mencapai 10%! (Dengan layar dimatikan itu berlari dengan kecepatan penuh selama beberapa hari). Dalam hal apapun, efek buruk apa pun.

Jadi dengan komputer yang dirancang dengan baik, Anda benar. Dengan komputer murah yang didesain buruk, kolega Anda mungkin benar. Di sisi lain, Anda dapat mempertimbangkan biaya waktu tunggu Anda vs biaya membeli komputer pengganti.

gnasher729
sumber
0

Jika Anda bisa, jadikan kode Anda tugas dengan prioritas lebih rendah, dan pastikan untuk menjaga utas yang berat CPU terpisah dari GUI. Maka Anda mungkin memiliki utilisasi 100%, tetapi pengguna selalu dapat menjalankan tugas lain dan tetap responsif. Dengan sendirinya, CPU dirancang untuk tetap berjalan pada penggunaan 100% untuk sementara waktu, atau tidak akan dirilis. Kecuali jika pengguna akhir melakukan modifikasi serius dan berbahaya pada perangkat keras mereka, Anda tidak dapat merusak apa pun.

raptortech97
sumber