Mengapa kita memiliki CPU dengan semua inti pada kecepatan yang sama dan bukan kombinasi dari kecepatan yang berbeda?

79

Secara umum, jika Anda membeli komputer baru, Anda akan menentukan prosesor mana yang akan dibeli dengan berapa beban kerja yang diharapkan. Performa dalam gim cenderung ditentukan oleh kecepatan inti tunggal, sedangkan aplikasi seperti pengeditan video ditentukan oleh jumlah inti.

Dalam hal apa yang tersedia di pasaran - semua CPU tampaknya memiliki kecepatan yang kira-kira sama dengan perbedaan utama adalah lebih banyak utas atau lebih banyak inti.

Sebagai contoh:

  • Intel Core i5-7600K, frekuensi basis 3,80 GHz, 4 core, 4 thread
  • Intel Core i7-7700K, frekuensi basis 4,20 GHz, 4 core, 8 thread
  • AMD Ryzen 5 1600X, frekuensi dasar 3,60 GHz, 6 core, 12 thread
  • AMD Ryzen 7 1800X, frekuensi dasar 3,60 GHz, 8 core, 16 utas

Jadi mengapa kita melihat pola peningkatan core ini dengan semua core memiliki kecepatan clock yang sama?

Mengapa kita tidak memiliki varian dengan kecepatan clock yang berbeda? Misalnya, dua inti 'besar' dan banyak inti kecil.

Misalnya, alih-alih, katakanlah, empat core pada 4,0 GHz (yaitu 4x4 GHz ~ maksimum 16 GHz), bagaimana dengan CPU dengan dua core yang berjalan pada katakanlah 4,0 GHz dan katakanlah empat core berjalan pada 2 GHz (yaitu 2x4,0 GHz + 4x2.0 GHz ~ maksimum 16 GHz). Bukankah pilihan kedua sama baiknya pada beban kerja berulir tunggal, tetapi berpotensi lebih baik pada beban kerja berulir banyak?

Saya mengajukan pertanyaan ini sebagai poin umum - tidak secara khusus tentang CPU yang saya sebutkan di atas, atau tentang satu beban kerja spesifik. Saya hanya ingin tahu mengapa polanya seperti apa adanya.

Jamie
sumber
15
Ada banyak ponsel dengan core cepat dan lambat, dan pada hampir semua server multi-core modern, kecepatan CPU core tergantung pada beban, bahkan ada yang mematikan core saat tidak digunakan. Pada komputer tujuan umum di mana Anda tidak merancang untuk menghemat energi namun hanya memiliki dua jenis core (CPU dan GPU) hanya membuat platform lebih fleksibel.
eckes
5
Sebelum penjadwal thread dapat membuat pilihan cerdas tentang core mana yang akan digunakan, harus menentukan apakah suatu proses dapat mengambil keuntungan dari beberapa core. Melakukan hal itu dengan andal akan sangat bermasalah dan rawan kesalahan. Terutama ketika ini dapat berubah secara dinamis sesuai dengan kebutuhan aplikasi. Dalam banyak kasus, penjadwal harus membuat pilihan yang optimal ketika inti terbaik digunakan. Core identik membuat segalanya lebih sederhana, memberikan fleksibilitas maksimum, dan umumnya memiliki kinerja terbaik.
LMiller7
33
Kecepatan jam tidak bisa dikatakan aditif dengan cara yang Anda jelaskan. Memiliki empat core berjalan pada 4 Ghz tidak berarti Anda memiliki "total" 16 GHz, juga tidak berarti bahwa 16 Ghz ini dapat dipartisi menjadi 8 prosesor yang berjalan pada 2 Ghz atau 16 prosesor yang berjalan pada 1 GHz.
Bob Jarvis
16
Premis dari pertanyaan itu benar-benar salah. CPU modern sangat mampu menjalankan core pada kecepatan yang berbeda
phuclv

Jawaban:

85

Ini dikenal sebagai heterogen multiprocessing ( HMP ) dan secara luas diadopsi oleh perangkat seluler. Pada perangkat berbasis ARM yang menerapkan big.LITTLE , prosesor berisi inti dengan kinerja dan profil daya yang berbeda, misalnya beberapa core berjalan cepat tetapi menarik banyak daya (arsitektur lebih cepat dan / atau jam lebih tinggi) sementara yang lain hemat energi tetapi lambat ( arsitektur lebih lambat dan / atau jam lebih rendah). Ini berguna karena penggunaan daya cenderung meningkat secara tidak proporsional ketika Anda meningkatkan kinerja setelah Anda melewati titik tertentu. Idenya di sini adalah untuk mendapatkan kinerja ketika Anda membutuhkannya dan daya tahan baterai ketika Anda tidak.

Pada platform desktop, konsumsi daya jauh dari masalah sehingga ini tidak benar-benar diperlukan. Sebagian besar aplikasi mengharapkan setiap inti memiliki karakteristik kinerja yang serupa, dan proses penjadwalan untuk sistem HMP jauh lebih kompleks daripada penjadwalan untuk sistem SMP tradisional. (Windows 10 secara teknis memiliki dukungan untuk HMP, tetapi ini terutama ditujukan untuk perangkat seluler yang menggunakan ARM big.LITTLE.)

Juga, sebagian besar prosesor desktop dan laptop saat ini tidak secara termal atau elektrik terbatas pada titik di mana beberapa core perlu berjalan lebih cepat daripada yang lain bahkan untuk ledakan singkat. Kami pada dasarnya menabrak dinding pada seberapa cepat kami dapat membuat core individu , jadi mengganti beberapa core dengan yang lebih lambat tidak akan membiarkan core yang tersisa berjalan lebih cepat.

Walaupun ada beberapa prosesor desktop yang memiliki satu atau dua core yang mampu berjalan lebih cepat daripada yang lain, kemampuan ini saat ini terbatas pada prosesor Intel tertentu yang sangat canggih (seperti Turbo Boost Max Technology 3.0) dan hanya melibatkan sedikit peningkatan kinerja. untuk core yang dapat berjalan lebih cepat.


Meskipun tentu saja mungkin untuk merancang prosesor x86 tradisional dengan baik core besar, cepat dan core lebih kecil, lebih lambat untuk mengoptimalkan beban kerja yang sangat berulir, ini akan menambah kompleksitas yang cukup besar pada desain prosesor dan aplikasi tidak mungkin mendukungnya dengan baik.

Ambil prosesor hipotetis dengan dua inti Kaby Lake (Core generasi 7) dan delapan core Goldmont (Atom) yang lambat . Anda akan memiliki total 10 core, dan beban kerja berulir sangat tinggi yang dioptimalkan untuk prosesor jenis ini dapat melihat peningkatan kinerja dan efisiensi dibandingkan prosesor Kaby Lake quad-core yang normal . Namun, berbagai jenis core memiliki tingkat kinerja yang sangat berbeda, dan core lambat bahkan tidak mendukung beberapa instruksi yang didukung oleh core cepat, seperti AVX . (ARM menghindari masalah ini dengan mewajibkan inti besar dan kecil untuk mendukung instruksi yang sama.)

Sekali lagi, sebagian besar aplikasi multithreaded berbasis Windows mengasumsikan bahwa setiap core memiliki tingkat kinerja yang sama atau hampir sama dan dapat menjalankan instruksi yang sama, sehingga jenis asimetri ini cenderung menghasilkan kinerja yang kurang ideal, mungkin bahkan crash jika menggunakan instruksi yang tidak didukung oleh core lambat. Meskipun Intel dapat memodifikasi core lambat untuk menambahkan dukungan instruksi tingkat lanjut sehingga semua core dapat menjalankan semua instruksi, ini tidak akan menyelesaikan masalah dengan dukungan perangkat lunak untuk prosesor heterogen.

Pendekatan berbeda untuk desain aplikasi, lebih dekat dengan apa yang mungkin Anda pikirkan dalam pertanyaan Anda, akan menggunakan GPU untuk akselerasi bagian aplikasi yang sangat paralel. Ini dapat dilakukan dengan menggunakan API seperti OpenCL dan CUDA . Mengenai solusi satu-chip, AMD mempromosikan dukungan perangkat keras untuk akselerasi GPU di APU-nya, yang menggabungkan CPU tradisional dan GPU terintegrasi berkinerja tinggi ke dalam chip yang sama, seperti Arsitektur Sistem Heterogen , meskipun hal ini belum melihat banyak penyerapan industri di luar dari beberapa aplikasi khusus.

bwDraco
sumber
1
Windows sudah memiliki gagasan tentang 'Aplikasi', 'Proses Latar Belakang' dan 'Proses Windows'. Jadi ini tidak meluas ke tingkat perangkat keras?
Jamie
2
@Jamie Proses "latar belakang" mendapat irisan waktu yang lebih kecil dan lebih mungkin terganggu. Windows 10 memang, sampai batas tertentu, menjelaskan sistem HMP, meskipun belum banyak informasi tentang bagaimana.
Bob
Jadi saya pikir setelah edit @ bbwaco sudah cukup banyak menjawabnya untuk saya. Jika ada prosesor 'campuran', ia dapat dengan mudah mendukung set instruksi yang sama jika dibangun dengan cara itu, maka kita perlu semacam penjadwal untuk memilih inti yang tepat. Saya berpikir bahwa sebenarnya aplikasi yang mendapat manfaat dari pergi ke banyak core kecil mungkin akan mendapat manfaat lebih banyak dari pergi ke banyak dan banyak core yang sangat kecil. Jadi kami memiliki akselerasi GPU.
Jamie
3
Perhatikan bahwa case GPU tidak memperdagangkan 2 core besar untuk 10 core kecil dan lambat, melainkan setara (sangat kasar) dengan memperdagangkan 2 core besar untuk 1024 core kecil dan lambat. Paralel besar-besaran, bukan hanya sedikit lebih paralel.
Yakk
4
Intel mungkin bisa mendapatkan inti Goldmont untuk menjalankan instruksi AVX2 tanpa banyak silikon tambahan (secara perlahan, dengan mendekodekan ke pasangan 128b ops). Knight's Landing (Xeon Phi) memiliki core berbasis Silvermont dengan AVX512, jadi bukan tidak mungkin untuk memodifikasi Silvermont. Tetapi KNL menambahkan eksekusi out-of-order untuk instruksi vektor, sementara Silver / Goldmont normal hanya melakukan OOO untuk integer, jadi mereka mungkin ingin mendesainnya lebih dekat ke Goldmont daripada KNL. Pokoknya, set insn bukan masalah nyata. Ini dukungan OS dan manfaat kecil yang merupakan hambatan nyata untuk menghabiskan area mati pada core berdaya rendah.
Peter Cordes
68

Yang Anda tanyakan adalah mengapa sistem saat ini menggunakan Symmetric multiprocessing daripada Asymmetric multiprocessing .

Multiprosesor asimetris digunakan di masa lalu, ketika komputer sangat besar dan ditempatkan di beberapa unit.

CPU modern digunakan sebagai satu unit, dalam satu die, di mana jauh lebih mudah untuk tidak mencampur CPU dari jenis yang berbeda, karena mereka semua berbagi bus dan RAM yang sama.

Ada juga kendala jam yang mengatur siklus CPU dan akses RAM. Ini akan menjadi mustahil ketika mencampur CPU dengan kecepatan yang berbeda. Komputer eksperimental tanpa jam memang ada dan bahkan cukup cepat, tetapi kompleksitas perangkat keras modern memaksakan arsitektur yang lebih sederhana.

Sebagai contoh, core Sandy Bridge dan Ivy Bridge tidak dapat berjalan pada kecepatan yang berbeda pada saat yang sama karena L3 cache bus berjalan pada kecepatan clock yang sama dengan core, sehingga untuk mencegah masalah sinkronisasi, mereka semua harus menjalankan dengan kecepatan tersebut. atau diparkir / dimatikan (tautan: Intel Sandy Bridge Architecture Exposed ). (Juga diverifikasi dalam komentar di bawah untuk Skylake.)

[EDIT] Beberapa orang salah mengira jawaban saya berarti mengatakan bahwa mencampur CPU tidak mungkin. Untuk keuntungannya saya nyatakan: Pencampuran CPU yang berbeda bukan di luar teknologi saat ini, tetapi tidak dilakukan - "mengapa tidak" adalah pertanyaannya. Sebagaimana dijawab di atas, ini akan secara teknis rumit, oleh karena itu lebih mahal dan terlalu sedikit atau tidak ada keuntungan finansial, sehingga tidak menarik bagi produsen.

Berikut jawaban atas beberapa komentar di bawah ini:

Turbo boost mengubah kecepatan CPU sehingga dapat diubah

Turbo boost dilakukan dengan mempercepat jam dan mengubah beberapa pengganda, yang persis seperti yang dilakukan orang saat melakukan overclocking, kecuali perangkat keras melakukannya untuk kita. Jam dibagi antara core pada CPU yang sama, jadi ini mempercepat secara seragam seluruh CPU dan semua core-nya.

Beberapa ponsel memiliki lebih dari satu CPU dengan kecepatan berbeda

Ponsel tersebut biasanya memiliki firmware khusus dan tumpukan perangkat lunak yang terkait dengan masing-masing CPU, lebih seperti dua CPU yang terpisah (atau seperti CPU dan GPU), dan mereka tidak memiliki satu tampilan memori sistem. Kompleksitas ini sulit diprogram dan karena itu multiprosesor Asimetris ditinggalkan di ranah seluler, karena ini memerlukan pengembangan perangkat lunak tingkat dekat dengan perangkat keras, yang dijauhi oleh OS desktop tujuan umum. Ini adalah alasan bahwa konfigurasi seperti itu tidak ditemukan di PC (kecuali untuk CPU / GPU jika kita cukup meregangkan definisi).

Server saya dengan 2x Xeon E5-2670 v3 (12 core dengan HT) saat ini memiliki core pada 1,3 GHz, 1,5 GHz, 1,6 GHz, 2,2 GHz, 2,2 GHz, 2,7 GHz, 2,8 GHz, 2,9 GHz, dan banyak kecepatan lainnya.

Inti aktif atau tidak aktif. Semua core yang aktif pada saat yang sama dijalankan pada frekuensi yang sama. Apa yang Anda lihat hanyalah artefak dari waktu atau rata-rata. Saya sendiri juga mencatat bahwa Windows tidak memarkir inti untuk waktu yang lama, tetapi secara terpisah memarkir / melepas semua inti jauh lebih cepat daripada refresh rate Monitor Sumber Daya, tapi saya tidak tahu alasan perilaku ini yang mungkin ada di belakang komentar di atas.

Prosesor Intel Haswell memiliki regulator tegangan terintegrasi yang memungkinkan voltase dan frekuensi individu untuk setiap inti

Regulator tegangan individual berbeda dari kecepatan clock. Tidak semua core identik - beberapa lebih cepat. Core yang lebih cepat diberikan daya yang sedikit lebih rendah, menciptakan ruang kepala untuk meningkatkan daya yang diberikan pada core yang lebih lemah. Regulator tegangan inti akan diatur serendah mungkin untuk mempertahankan kecepatan clock saat ini. Unit Kontrol Daya pada CPU mengatur voltase dan akan mengesampingkan permintaan OS jika perlu untuk core yang berbeda dalam kualitas. Ringkasan: Regulator individu untuk membuat semua core beroperasi secara ekonomis pada kecepatan clock yang sama, bukan untuk mengatur kecepatan core individu

harrymc
sumber
3
Ah. lebih banyak mshorter dan to the point. +1
Hennes
6
@harrymc ada blok sinkronisasi yang mengaturnya dengan sangat baik; DRAM berjalan lebih lambat dari kecepatan inti, dan Anda dapat memiliki core Intel yang berjalan pada kecepatan yang berbeda secara dinamis pada chip yang sama.
pjc50
10
Prosesor seri Intel Core berjalan pada kecepatan yang berbeda pada die yang sama setiap saat.
Nick T
9
Satu-satunya keberadaan arsitektur big.LITTLE dan peningkatan jam core-indepenendent membuktikan Anda salah. Multiprocessing heterogen adalah arus utama. Hal dapat dilakukan, hal ini dilakukan dalam ponsel, tapi untuk beberapa alasan tidak di desktop.
Agent_L
9
@ Agg_L: Alasannya adalah kompleksitas. CPU desktop sudah cukup mahal. Jadi saya ulangi: Semuanya mungkin, tetapi pertanyaan sebenarnya adalah mengapa itu tidak dilakukan, bukan apakah itu bisa dilakukan. Jangan serang saya seolah-olah saya telah mengklaim ini tidak mungkin - yang saya katakan adalah itu terlalu rumit dan mahal dan terlalu sedikit untuk menarik minat produsen.
harrymc
46

Mengapa kita tidak memiliki varian dengan kecepatan clock yang berbeda? yaitu. 2 inti 'besar' dan banyak inti kecil.

Mungkin saja ponsel di saku Anda memiliki pengaturan yang tepat - ARM big.LITTLE bekerja persis seperti yang Anda gambarkan. Di sana bahkan bukan hanya perbedaan kecepatan clock, mereka bisa menjadi tipe inti yang sama sekali berbeda - biasanya, yang clocked lebih lambat bahkan "bodoh" (tidak ada eksekusi out-of-order dan optimasi CPU lainnya).

Ini ide yang bagus pada dasarnya untuk menghemat baterai, tetapi memiliki kekurangannya sendiri; pembukuan untuk memindahkan barang-barang antara CPU yang berbeda lebih rumit, komunikasi dengan periferal lainnya lebih rumit dan, yang paling penting, untuk menggunakan core seperti itu secara efektif penjadwal tugas harus sangat cerdas (dan sering kali untuk "menebak dengan benar") .

Pengaturan yang ideal adalah menjalankan tugas latar belakang non-waktu-kritis atau tugas interaktif yang relatif kecil pada inti "kecil" dan membangunkan yang "besar" hanya untuk perhitungan besar dan panjang (di mana waktu ekstra yang dihabiskan untuk inti kecil berakhir) makan lebih banyak baterai) atau untuk tugas interaktif berukuran sedang, di mana pengguna merasakan kelesuan pada core kecil.

Namun, penjadwal memiliki informasi terbatas tentang jenis pekerjaan yang mungkin dijalankan setiap tugas, dan harus menggunakan beberapa heuristik (atau informasi eksternal, seperti memaksa beberapa topeng afinitas pada tugas yang diberikan) untuk memutuskan di mana menjadwalkannya. Jika ini salah, Anda mungkin menghabiskan banyak waktu / tenaga untuk menjalankan tugas pada inti yang lambat, dan memberikan pengalaman pengguna yang buruk, atau menggunakan inti "besar" untuk tugas-tugas prioritas rendah, dan dengan demikian membuang tenaga / mencuri mereka dari tugas yang akan membutuhkan mereka.

Juga, pada sistem multiprosesor asimetris biasanya lebih mahal untuk melakukan migrasi tugas ke inti yang berbeda dari pada sistem SMP, sehingga penjadwal umumnya harus membuat perkiraan awal yang baik alih-alih mencoba berjalan pada inti bebas acak dan bergerak sekitar nanti.


Pilihan Intel di sini adalah memiliki jumlah core cerdas dan cepat yang lebih rendah, tetapi dengan penskalaan frekuensi yang sangat agresif. Ketika CPU menjadi sibuk dengan cepat naik ke kecepatan clock maksimum, melakukan pekerjaan tercepat yang dapat dan kemudian turunkan untuk kembali ke mode penggunaan daya terendah. Ini tidak menempatkan beban khusus pada penjadwal, dan menghindari skenario buruk yang dijelaskan di atas. Tentu saja, bahkan ketika dalam mode clock rendah, core ini adalah yang "pintar", jadi mereka mungkin akan mengkonsumsi lebih dari core "bodoh" jam rendah yang besar.

Matteo Italia
sumber
1
Heuristik harus cukup sederhana. Setiap sakelar tugas yang tidak disengaja (penggunaan kutu waktu penuh) merupakan indikasi bahwa cpu lambat tidak sesuai untuk tugas tersebut. Pemanfaatan yang sangat rendah dan semua sakelar tugas sukarela merupakan indikasi bahwa tugas tersebut dapat dipindahkan ke cpu lambat.
R ..
3
masalah lain adalah bahwa 4 core 2GHz bodoh dapat mengambil ukuran die lebih banyak dari 2 core 4GHz pintar, atau mereka mungkin lebih kecil dan mengambil daya jauh lebih sedikit dari core 4 GHz tetapi menjalankan juga jauh lebih lambat
phuclv
2
@R.: Sesuai prinsip saya setuju dengan Anda, tetapi bahkan memungkinkan beberapa dukungan penjadwal dasar untuk ini saya melihat inti berdesak-desakan pada papan ARM yang saya gunakan, jadi pasti ada sesuatu yang lain untuk itu. Selain itu, sebagian besar perangkat lunak multithreaded "biasa" ditulis dengan pertimbangan SMP, sehingga tidak biasa untuk melihat kumpulan utas sebesar jumlah total inti, dengan pekerjaan yang terseret pada inti yang lambat.
Matteo Italia
1
@Ramhound: Bagian 120W 10-core memiliki anggaran daya 12W per core (kecuali dalam mode turbo single-core). Inilah sebabnya mengapa jam single-core tertinggi ditemukan di bagian quad-core, di mana misalnya Intel i7-6700k memiliki anggaran daya sebesar 91W untuk 4 core: 22,75W per core ditopang dengan semua core aktif (pada 4,0GHz bahkan dengan AVX2 + FMA beban kerja seperti Prime95). Ini juga mengapa ruang kepala Turbo single-core hanya 0,2GHz ekstra, vs Broadwell E5-2699v4 22-core dengan basis 2.2GHz @ 145W, turbo 3.6GHz.
Peter Cordes
@Ramhound: menambahkan jawaban yang memperluas ini. Xeon banyak-inti tampaknya persis seperti yang dicari OP: beroperasi sebagai banyak core berdaya rendah, atau menghabiskan banyak daya untuk menjalankan satu-thread dengan cepat jika memungkinkan (turbo).
Peter Cordes
14

Performa dalam gim cenderung ditentukan oleh kecepatan inti tunggal,

Di masa lalu (game era DOS): Benar.
Hari-hari ini, itu tidak lagi benar. Banyak game modern yang di-threaded dan mendapat manfaat dari banyak core. Beberapa game sudah cukup senang dengan 4 core dan jumlah itu tampaknya meningkat seiring waktu.

sedangkan aplikasi seperti video editing ditentukan oleh jumlah core.

Agak benar.

Jumlah inti * kali kecepatan efisiensi inti *.
Jika Anda membandingkan satu inti identik dengan satu set inti identik, maka Anda sebagian besar benar.

Dalam hal apa yang tersedia di pasaran - semua CPU tampaknya memiliki kecepatan yang kira-kira sama dengan perbedaan utama adalah lebih banyak utas atau lebih banyak inti. Sebagai contoh:

Intel Core i5 7600k, Base Freq 3,80 GHz, 4 Core Intel Core i7 7700k, Base Freq 4,20 GHz, 4 Core, 8 Thread AMD Ryzen 1600x, Base Freq 3,60 GHz, 6 Core, 12 Thread AMD Ryzen 1800x, Base Freq 3,60 GHz, 8 Cores, 16 Thread

Membandingkan arsitektur yang berbeda itu berbahaya, tapi ...

Jadi mengapa kita melihat pola peningkatan core ini dengan semua core memiliki kecepatan clock yang sama?

Sebagian karena kami berlari ke penghalang. Meningkatkan kecepatan clock lebih jauh berarti lebih banyak daya yang dibutuhkan dan lebih banyak panas yang dihasilkan. Lebih banyak panas berarti lebih banyak daya yang dibutuhkan. Kami sudah mencoba seperti itu, hasilnya adalah pentium yang mengerikan 4. Panas dan haus kekuasaan. Sulit didinginkan. Dan bahkan tidak lebih cepat daripada Pentium-M yang dirancang dengan cerdas (A P4 pada 3.0GHz kira-kira sama cepatnya dengan P-mob di 1.7GHz).

Sejak itu, kami sebagian besar menyerah pada mendorong kecepatan clock dan sebaliknya kami membangun solusi yang lebih cerdas. Bagian dari itu adalah untuk menggunakan beberapa core lebih dari kecepatan clock mentah.

Misalnya satu inti 4GHz mungkin menarik daya sebanyak dan menghasilkan panas sebanyak tiga inti 2GHz. Jika perangkat lunak Anda dapat menggunakan banyak core, itu akan jauh lebih cepat.

Tidak semua perangkat lunak bisa melakukan itu, tetapi perangkat lunak modern biasanya bisa.

Yang sebagian menjawab mengapa kami memiliki chip dengan banyak core, dan mengapa kami menjual chip dengan jumlah core yang berbeda.

Mengenai kecepatan jam, saya pikir saya bisa mengidentifikasi tiga poin:

  • CPU berdaya rendah masuk akal untuk beberapa kasus di mana kecepatan mentah tidak diperlukan. Misalnya Pengontrol domain, pengaturan NAS, ... Untuk ini, kami memiliki frekuensi CPU yang lebih rendah. Terkadang bahkan dengan lebih banyak core (mis. 8x CPU kecepatan rendah masuk akal untuk server web).
  • Selebihnya, kita biasanya berada di dekat frekuensi maksimum yang bisa kita lakukan tanpa desain kita yang terlalu panas. (katakanlah 3 hingga 4GHz dengan desain saat ini).
  • Dan di atas itu, kami melakukan binning. Tidak semua CPU dihasilkan secara merata. Beberapa skor CPU buruk atau skor buruk di bagian chip mereka, bagian-bagian tersebut dinonaktifkan dan dijual sebagai produk yang berbeda.

Contoh klasik dari ini adalah chip AMD 4 inti. Jika satu inti rusak, maka dinonaktifkan dan dijual sebagai chip 3 inti. Ketika permintaan untuk 3 core ini tinggi, bahkan beberapa core 4 dijual sebagai versi 3 core, dan dengan peretasan perangkat lunak yang tepat, Anda dapat mengaktifkan kembali core ke-4.

Dan ini tidak hanya dilakukan dengan jumlah core, tetapi juga mempengaruhi kecepatan. Beberapa chip berjalan lebih panas daripada yang lain. Terlalu panas dan menjualnya sebagai CPU kecepatan rendah (di mana frekuensi yang lebih rendah juga berarti lebih sedikit panas yang dihasilkan).

Dan kemudian ada produksi dan pemasaran dan itu mengacaukannya lebih jauh.

Mengapa kita tidak memiliki varian dengan kecepatan clock yang berbeda? yaitu. 2 inti 'besar' dan banyak inti kecil.

Kami lakukan. Di tempat-tempat yang masuk akal (misalnya ponsel), kita sering memiliki SoC dengan CPU inti lambat (daya rendah), dan beberapa core lebih cepat. Namun, pada PC desktop biasa, ini tidak dilakukan. Itu akan membuat pengaturan jauh lebih kompleks, lebih mahal, dan tidak ada baterai yang terkuras.

Hennes
sumber
1
Seperti yang saya tunjukkan - "Saya mengajukan pertanyaan ini sebagai poin umum - tidak secara khusus tentang CPU yang saya sebutkan di atas", dan ada alasan saya memberikan dua contoh dari setiap arsitektur. Jika kita memperlakukan dua skenario sebagai 1. semua core besar, dan 2. dua besar & dua kecil - maka saya pikir semua poin yang Anda sebutkan berlaku untuk kedua kasus - yaitu. kecepatan inti tunggal max teoretis, binning chip, downclocking saat tidak digunakan.
Jamie
Satu inti kecepatan maks tidak terlalu menarik ketika tidak dipilih sekalipun. Penjadwal perlu diperbarui untuk benar-benar memilih inti berkecepatan tinggi.
Hennes
10

Mengapa kita tidak memiliki varian dengan kecepatan clock yang berbeda? Misalnya, dua inti 'besar' dan banyak inti kecil.

Kecuali jika kami sangat khawatir tentang konsumsi daya, tidak masuk akal untuk menerima semua biaya yang terkait dengan inti tambahan dan tidak mendapatkan sebanyak mungkin kinerja dari inti itu. Kecepatan clock maksimum ditentukan sebagian besar oleh proses fabrikasi, dan seluruh chip dibuat oleh proses yang sama. Jadi apa untungnya membuat beberapa core lebih lambat dari proses fabrikasi yang didukung?

Kami sudah memiliki inti yang dapat memperlambat untuk menghemat daya. Apa gunanya membatasi kinerja puncak mereka?

David Schwartz
sumber
2
Inilah yang saya pikirkan. Mengapa dengan sengaja menggunakan beberapa komponen inferior ketika semuanya bisa menjadi elit? +1.
MPW
1
@ MPW Pilihannya bukan antara membuat inti besar dan kemudian mensterilkannya, itu adalah antara semua besar vs beberapa besar dan banyak inti kecil. Karena Anda memiliki dua skenario yang bersaing - kinerja utas tunggal dan kinerja multi utas - mengapa tidak memaksimalkan keduanya? Apakah kita tahu bahwa Anda tidak dapat membuat chip dengan beberapa inti kecil dan besar?
Jamie
@ Jamie Anda dapat membuat chip dengan beberapa inti kecil dan besar. Tetapi core yang lebih kecil tidak akan berjalan pada kecepatan clock yang lebih rendah.
David Schwartz
Mereka akan melakukannya jika mereka dirancang seperti itu ... Pertanyaannya adalah mengapa mereka tidak dirancang seperti itu dari awal, tidak mengambil proses fabrikasi yang ada dan mensterilkannya.
Jamie
@ Jamie aku tidak mengerti apa yang kamu katakan. Seluruh CPU harus dibuat dengan proses fabrikasi yang sama, dan kecepatan clock maksimum sebagian besar merupakan karakteristik dari proses fabrikasi. Core yang memerlukan kecepatan clock lebih rendah pada tingkat fabrikasi yang sama umumnya akan lebih kompleks dan membutuhkan lebih banyak ruang, jika tidak, mengapa mereka membutuhkan kecepatan clock yang lebih rendah?
David Schwartz
9

Mengapa kita tidak memiliki varian dengan kecepatan clock yang berbeda? Misalnya, dua inti 'besar' dan banyak inti kecil.

Kecepatan clock nominal tidak terlalu berarti bagi kebanyakan prosesor yang lebih besar saat ini karena mereka semua memiliki kemampuan untuk mencatat waktu naik dan turun. Anda bertanya apakah mereka dapat clock core yang berbeda naik dan turun secara mandiri.

Saya agak kaget dengan banyak jawaban lain. Prosesor modern dapat dan melakukan ini. Anda dapat menguji ini dengan, misalnya, membuka CPU-Z pada smartphone - Google Pixel saya mampu menjalankan berbagai core dengan kecepatan yang berbeda:

Secara nominal adalah 2,15 Ghz, tetapi dua core berada di 1,593 Ghz dan dua berada di 1,132 Ghz.

Faktanya, sejak 2009 CPU Intel arus utama telah memiliki logika untuk mendorong masing-masing core lebih tinggi saat melakukan underclocking core lainnya, memungkinkan kinerja single core yang lebih baik sambil tetap dalam anggaran TDP: http://www.anandtech.com/show/2832/4

Prosesor Intel yang lebih baru dengan "Favoured Core" (istilah pemasaran Intel) memiliki masing-masing inti yang dicirikan di pabrik, dengan core tercepat yang mampu meningkatkan ekstra tinggi: http://www.anandtech.com/show/11550/the-intel -skylakex-review-core-i9-7900x-i7-7820x-dan-i7-7800x teruji / 7

Chip Bulldozer AMD memiliki versi primitif: http://www.anandtech.com/show/4955/the-bulldozer-review-amd-fx8150-tested/4

Chip Ryzen baru AMD mungkin juga memiliki ini, meskipun tidak secara eksplisit dinyatakan di sini: http://www.anandtech.com/show/11170/the-amd-zen-and-ryzen-7-review-a-deep-dive -pada-1800x-1700x-dan-1700/11

Grant Wu
sumber
Anda menjawab pertanyaan yang berbeda. Pertanyaannya adalah tentang banyak core besar vs beberapa core besar dan banyak core kecil - manfaat dari dua skenario. Dalam kedua situasi ini, Anda dapat naik dan turun tergantung pada permintaan, atau meningkatkan inti.
Jamie
3
Bukan begitu saya membaca pertanyaan. Pertanyaannya tidak menyebutkan inti arsitektur yang berbeda, meskipun menggunakan kata-kata "besar" dan "kecil". Ini berfokus secara eksklusif pada kecepatan clock.
Grant Wu
8

Pada sistem modern Anda sering melakukan memiliki semua core berjalan pada kecepatan yang berbeda. Pencatatan inti yang tidak banyak digunakan mengurangi penggunaan daya dan keluaran termal, yang bagus, dan fitur-fitur seperti "turbo boost" membuat satu atau dua core berjalan lebih cepat secara signifikan selama core lainnya menganggur, dan karenanya penggunaan daya dan output panas dari seluruh paket tidak terlalu tinggi. Dalam kasus chip dengan fitur seperti itu, kecepatan yang Anda lihat dalam daftar adalah kecepatan tertinggi yang bisa Anda dapatkan dengan semua core sekaligus. Dan mengapa semua core memiliki kecepatan maksimum yang sama? Yah, mereka semua dari desain yang identik, pada chip fisik yang sama, diletakkan dengan proses semikonduktor yang sama, jadi mengapa mereka harus berbeda?

Alasan semua inti identik adalah karena hal itu membuatnya lebih mudah untuk utas yang berjalan pada satu inti pada satu titik untuk mulai berjalan pada inti yang berbeda pada titik lain. Seperti disebutkan di tempat lain, ada chip yang umum digunakan yang tidak mengikuti prinsip inti identik ini, yaitu CPU "big.LITTLE" ARM. Meskipun dalam pikiran saya perbedaan paling penting antara inti "besar" dan "kecil" bukanlah kecepatan jam (inti "besar" cenderung lebih menarik, lebih luas, inti lebih spekulatif yang mendapatkan lebih banyak instruksi per jam dengan biaya lebih tinggi). penggunaan daya, sementara inti "kecil" lebih dekat ke akar masalah tunggal, berurutan, daya rendah), karena mereka

Dan semakin jauh ke ranah komputasi heterogen, itu juga menjadi umum untuk melihat "CPU" dan "GPU" core diintegrasikan ke dalam chip yang sama. Ini memiliki desain yang sangat berbeda, menjalankan set instruksi yang berbeda, ditangani secara berbeda, dan umumnya akan memiliki clock yang berbeda juga.

hobbs
sumber
7

Kinerja single-thread yang cepat dan throughput multi-thread yang sangat tinggi adalah persis apa yang Anda dapatkan dengan CPU seperti Intel Xeon E5-2699v4 .

Ini adalah Broadwell 22-inti. Kecepatan clock berkelanjutan adalah 2.2GHz dengan semua core aktif (mis. Pengkodean video), tetapi single-core max turbo adalah 3.6GHz.

Jadi saat menjalankan tugas paralel, ia menggunakan anggaran daya 145W sebagai 22 6.6W core. Tetapi saat menjalankan tugas dengan hanya beberapa utas, anggaran daya yang sama memungkinkan beberapa core turbo hingga 3.6GHz. ( Memori inti-tunggal dan bandwidth L3-cache lebih rendah dalam Xeon besar berarti mungkin tidak berjalan secepat quad-core desktop pada 3.6GHz. Namun, satu inti dalam desktop Intel CPU dapat menggunakan lebih banyak dari bandwidth memori total.)

Kecepatan clock terukur 2.2GHz adalah rendah karena batas termal. Semakin banyak core yang dimiliki CPU, semakin lambat mereka harus berjalan ketika semuanya aktif. Efek ini tidak terlalu besar pada CPU inti 4 dan 8 yang Anda sebutkan dalam pertanyaan, karena 8 tidak banyak core, dan mereka memiliki anggaran daya yang sangat tinggi. Bahkan CPU desktop yang antusias secara nyata menunjukkan efek ini: Intel Skylake-X i9-7900X adalah bagian 10c20t dengan basis 3.3GHz, max turbo 4.5GHz . Itu jauh lebih single-core turbo headroom daripada i7-6700k (4.0GHz berkelanjutan / 4.2GHz turbo tanpa overclocking).

Penskalaan frekuensi / tegangan (DVFS) memungkinkan inti yang sama beroperasi pada berbagai kurva kinerja / efisiensi. Lihat juga presentasi IDF2015 ini tentang manajemen daya Skylake , dengan banyak detail menarik tentang apa yang dapat dilakukan CPU secara efisien, dan menukar kinerja vs efisiensi baik secara statis pada waktu desain, dan saat bepergian dengan DVFS.

Di ujung lain dari spektrum, CPU Intel Core-M memiliki frekuensi berkelanjutan yang sangat rendah, seperti 1.2GHz di 4.5W , tetapi dapat turbo hingga 2.9GHz. Dengan beberapa core aktif, mereka akan menjalankan core mereka pada kecepatan clock yang lebih efisien, seperti halnya Xeon raksasa.

Anda tidak perlu arsitektur gaya yang besar dan heterogen untuk mendapatkan sebagian besar manfaatnya. Core kecil di ARM big.LITTLE adalah core berurutan jelek yang tidak baik untuk pekerjaan komputasi. Intinya hanya menjalankan UI dengan daya sangat rendah. Banyak dari mereka tidak akan bagus untuk encoding video atau angka serius lainnya. ( @ Lưu Vĩnh Phúc menemukan beberapa diskusi tentang mengapa x86 tidak memiliki besar . SEDIKIT . Pada dasarnya, menghabiskan silikon tambahan pada inti yang sangat lambat dengan daya ekstra-lambat tidak akan sebanding dengan penggunaan desktop / laptop biasa.)


sedangkan aplikasi seperti video editing ditentukan oleh jumlah core. [Bukankah 2x 4.0 GHz + 4x 2.0 GHz lebih baik di beban kerja multi-threaded daripada 4x 4GHz?]

Ini adalah kesalahpahaman kunci Anda. Anda tampaknya berpikir bahwa jumlah kutu total jam yang sama per detik lebih berguna jika tersebar di lebih banyak core. Itu tidak pernah terjadi. Itu lebih seperti

cores * perf_per_core * (scaling efficiency)^cores

( perf_per_corebukan hal yang sama dengan kecepatan clock, karena Pentium4 3GHz akan mendapatkan jauh lebih sedikit pekerjaan per siklus clock daripada Skylake 3GHz.)

Lebih penting lagi, sangat jarang bahwa efisiensinya 1.0. Beberapa tugas paralel yang memalukan melakukan skala hampir linier (misalnya mengkompilasi beberapa file sumber). Tetapi encoding video tidak seperti itu. Untuk x264, penskalaan sangat bagus hingga beberapa core, tetapi menjadi lebih buruk dengan lebih banyak core. misalnya pergi dari 1 ke 2 core akan hampir dua kali lipat kecepatan, tetapi pergi dari 32 ke 64 core akan membantu jauh lebih sedikit untuk encode 1080p khas. Titik di mana kecepatan tinggi tergantung pada pengaturan. ( -preset veryslowmelakukan lebih banyak analisis pada setiap frame, dan dapat membuat core lebih sibuk daripada -preset fast).

Dengan banyak inti yang sangat lambat, bagian-bagian tunggal dari x264 akan menjadi hambatan. (mis. penyandian bitstream CABAC akhir. Ini setara dengan h.264 untuk gzip, dan tidak paralel). Memiliki beberapa inti cepat akan menyelesaikannya, jika OS tahu cara menjadwalkannya (atau jika x264 menyematkan utas yang sesuai untuk core cepat).

x265 dapat memanfaatkan lebih banyak core daripada x264, karena memiliki lebih banyak analisis untuk dilakukan, dan desain WPP h.265 memungkinkan lebih banyak encode dan decode paralelisme. Tetapi bahkan untuk 1080p, Anda kehabisan paralelisme untuk mengeksploitasi di beberapa titik.


Jika Anda memiliki beberapa video untuk disandikan, lakukan beberapa video dalam skala paralel dengan baik, kecuali untuk persaingan untuk sumber daya bersama seperti kapasitas cache dan bandwidth L3, dan bandwidth memori. Semakin sedikit core yang lebih cepat bisa mendapatkan manfaat lebih dari jumlah cache L3 yang sama, karena mereka tidak perlu bekerja pada begitu banyak bagian masalah yang berbeda sekaligus.

Peter Cordes
sumber
4

Meskipun dimungkinkan untuk merancang komputer yang memiliki bagian yang berbeda yang berjalan pada kecepatan independen yang berbeda, arbitrase sumber daya sering kali mengharuskan untuk dengan cepat memutuskan permintaan mana yang harus diservis terlebih dahulu, yang pada gilirannya mengharuskan mengetahui apakah ada permintaan lain yang mungkin telah masuk cukup cepat untuk memenangkan prioritas . Memutuskan hal-hal seperti itu, sebagian besar waktu , cukup sederhana. Sesuatu seperti sirkuit "kuis buzzer" dapat diimplementasikan dengan sedikitnya dua transistor. Masalahnya adalah membuat keputusan cepat yang andaljelas tidak sulit. Satu-satunya cara praktis untuk melakukan itu dalam banyak kasus adalah dengan menggunakan keputusan yang disebut "sinkronisasi", yang dapat menghindari ambiguitas tetapi menimbulkan penundaan dua siklus. Seseorang dapat merancang pengontrol caching yang dapat melakukan arbitrase dengan andal di antara dua sistem dengan jam terpisah jika ada yang mau mentolerir penundaan dua siklus pada setiap operasi untuk menentukan siapa yang memenangkan arbitrase. Pendekatan seperti itu akan kurang bermanfaat, namun, jika seseorang ingin cache untuk segera menanggapi permintaan tanpa adanya pertentangan, karena bahkan permintaan yang tidak terbantahkan masih akan memiliki penundaan dua siklus.

Menjalankan segala sesuatu dari jam umum menghindari perlunya sinkronisasi, yang pada gilirannya menghindari penundaan komunikasi dua siklus setiap kali diperlukan untuk meneruskan informasi atau mengontrol sinyal antara domain jam.

supercat
sumber
4

Komputer desktop sudah melakukan ini.

Mereka memiliki (satu set) CPU, dengan 1-72 utas aktif sekaligus, dan (satu set) GPU, dengan 16-7168 unit komputasi.

Grafik adalah contoh dari tugas yang kami temukan bekerja paralel besar untuk menjadi efisien. GPU dioptimalkan untuk melakukan jenis operasi yang ingin kita lakukan grafik (tetapi tidak terbatas pada itu).

Ini adalah komputer dengan beberapa core besar, dan banyak core kecil.

Secara umum, perdagangan satu inti di X FLOPS dengan tiga core di X / 2 FLOPS tidak layak; tetapi berdagang satu inti di X FLOPS dengan seratus core di X / 5 FLOPS sangat berharga.

Saat memprogram untuk ini, Anda menghasilkan kode yang sangat berbeda untuk CPU dan untuk GPU. Banyak pekerjaan yang dilakukan untuk membagi beban kerja, sehingga GPU mendapatkan tugas yang paling baik dilakukan pada GPU, dan CPU mendapatkan tugas yang paling baik dilakukan pada CPU.

Ini bisa dibilang jauh lebih mudah untuk menulis kode untuk CPU, karena kode paralel besar-besaran lebih sulit untuk diperbaiki. Jadi hanya ketika hasilnya besar, itu layak diperdagangkan kinerja single-core untuk situasi multi-core. GPU memberikan hasil besar jika digunakan dengan benar.

Sekarang, perangkat seluler melakukan ini karena alasan yang berbeda. Mereka memiliki core berdaya rendah yang secara signifikan lebih lambat, tetapi menggunakan daya yang lebih sedikit secara signifikan per unit komputer juga. Ini memungkinkan mereka memperpanjang usia baterai lebih lama ketika tidak melakukan tugas-tugas intensif CPU. Di sini kita memiliki jenis "hadiah besar" yang berbeda; bukan kinerja, tetapi efisiensi daya. Masih membutuhkan banyak pekerjaan pada bagian OS dan mungkin penulis aplikasi untuk membuatnya berfungsi dengan benar; hanya hadiah besar yang membuatnya sepadan.

Yakk
sumber
-1

Alasan sistem umum memiliki inti pada kecepatan yang sama adalah masalah matematika yang sederhana. Input dan output timing (dengan optimisasi) berdasarkan pada satu set konstanta (yang dapat diskalakan = dapat digandakan oleh sejumlah unit).

Dan seseorang di sini mengatakan perangkat seluler memiliki multi-CPU dengan kecepatan berbeda. Itu tidak benar. Ini bukan unit pemrosesan pusat jika bukan unit pemrosesan pusat; tidak peduli apa kata produsen itu atau tidak. dalam hal ini [bukan cpu] itu hanya "paket dukungan".

Sistem Hypersoft
sumber
-10

Saya tidak berpikir OP memahami elektronik dasar. Semua komputer membutuhkan satu hal agar berfungsi - sebuah jam. Siklus jam yang dihasilkan oleh jam internal adalah metronom untuk pergerakan semua data. Untuk mencapai sinkronisasi, semua operasi harus dikaitkan dengan jam yang sama. Ini berlaku untuk eksekusi data internal pada komputer yang terisolasi maupun seluruh jaringan.

Jika Anda ingin mengisolasi inti pada CPU dengan menjalankannya pada frekuensi yang berbeda, Anda tentu bisa merancang platform semacam itu. Meskipun, itu akan membutuhkan rekayasa solusi motherboard yang mengikat masing-masing inti individu dengan subset fitur motherboard yang terisolasi. Anda akan dibiarkan dengan 4 komputer individual alih-alih komputer quad-core.

Atau, seperti yang ditunjukkan orang lain, Anda dapat menambahkan kode ke kernel Anda yang menyesuaikan frekuensi inti secara individual. Ini akan menyebabkan hit pada kinerja. Anda dapat memiliki kecepatan atau efisiensi daya - tetapi Anda tidak dapat memiliki keduanya.

RyRoUK
sumber
1
Saya tidak, maka pertanyaan saya. Membandingkan Intel i5 7600 dengan i5 7600k, kita melihat bahwa jam dasar 100mhz untuk keduanya dan perbedaannya adalah rasio inti. Jadi Anda bisa memiliki dua core dengan clock dasar yang sama 100mhz tetapi dengan rasio inti yang berbeda - apakah skenario ini melanggar persyaratan sinkronisasi?
Jamie
4
Ya, ini terlalu menyederhanakan terlalu banyak; tidak sepenuhnya benar bahwa semua operasi harus dikaitkan dengan jam yang sama , ada banyak domain jam dan sangat mungkin untuk menjalankan core yang berbeda dengan kecepatan yang sama. Jam bus tidak sama dengan jam internal, dll.
pjc50
11
Chip modern sudah memiliki beberapa domain jam (bahkan RTC dari mikrokontroler yang murah & bodoh biasanya berjalan pada domain 32.7kHz terpisah). Anda hanya perlu melakukan sinkronisasi antara domain jam. Bahkan dengan jam biasa Anda bisa membaginya dengan 2, 4, 8 dan seterusnya.
Michael
1
Semua benar. Tetapi masih mengurangi efisiensi operasi. Dan itu selalu merupakan tujuan dalam hal kinerja. Itulah poin saya. Tentu, Anda bisa melakukannya. Tetapi Anda akan terpukul pada kinerja.
RyRoUK
"Mengurangi kinerja" - dibandingkan dengan apa? Anda mengasumsikan keadaan dasar di mana Anda memiliki n prosesor yang berjalan dengan jam yang sama. Tidak harus demikian. Prosesor X + prosesor Y adalah solusi yang lebih kuat / fleksibel daripada prosesor X saja, tidak peduli apa tepatnya prosesor Y.
hmijail