Mengapa tidak membuat satu inti CPU besar? [Tutup]

25

Saya tidak mengerti mengapa produsen CPU membuat chip multi-core. Penskalaan beberapa core sangat mengerikan, ini sangat spesifik untuk aplikasi, dan saya yakin Anda dapat menunjukkan program atau kode tertentu yang berjalan dengan baik pada banyak core, tetapi sebagian besar waktu penskalaan adalah sampah. Ini adalah pemborosan ruang cetakan silikon dan pemborosan energi.

Game, misalnya, hampir tidak pernah menggunakan lebih dari empat core. Simulasi sains dan teknik seperti Ansys atau Fluent dihargai dari berapa banyak core yang dimiliki PC, jadi Anda membayar lebih banyak karena Anda memiliki lebih banyak core, tetapi manfaat lebih banyak core menjadi sangat buruk melewati 16 core, namun Anda memiliki 64 core ini. workstation ... ini buang-buang uang dan energi. Lebih baik membeli pemanas 1500 W untuk musim dingin, jauh lebih murah.

Mengapa mereka tidak membuat CPU hanya dengan satu inti besar?

Saya pikir jika mereka membuat satu inti setara dengan CPU delapan inti, bahwa satu inti akan memiliki peningkatan IPC 800%, sehingga Anda akan mendapatkan kinerja penuh di semua program, bukan hanya yang dioptimalkan untuk banyak inti. Semakin banyak IPC meningkatkan kinerja di mana-mana, ini cara yang andal dan sederhana untuk meningkatkan kinerja. Multiple core meningkatkan kinerja hanya dalam sejumlah program terbatas, dan penskalaannya mengerikan dan tidak dapat diandalkan.

ilmuwan wav
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan . Setiap kesimpulan yang dicapai harus diedit kembali ke pertanyaan dan / atau jawaban apa pun.
Dave Tweed
Anda mungkin tertarik dengan artikel ini: gotw.ca/publications/concurrency-ddj.htm
lvella
"tetapi manfaat dari lebih banyak inti menjadi sangat buruk di masa lalu 16 inti" Anda jelas tidak tahu apa yang Anda bicarakan. Percayalah, saya telah bekerja pada proses yang berjalan pada beberapa puluh ribu CPU. Ada seluruh kelas masalah yang disebut "Parallelisable memalukan", di mana melempar lebih banyak inti pada masalah bekerja dengan sangat baik.
Aron

Jawaban:

93

Masalahnya terletak pada asumsi bahwa produsen CPU hanya dapat menambahkan lebih banyak transistor untuk membuat satu inti CPU lebih kuat tanpa konsekuensi.

Untuk membuat CPU melakukan lebih banyak, Anda harus merencanakan apa yang harus dilakukan dengan melakukan lebih banyak. Sebenarnya ada tiga opsi:

  1. Buat inti berjalan pada frekuensi clock yang lebih tinggi - Masalahnya adalah kita sudah mencapai batasan apa yang bisa kita lakukan.

    Penggunaan daya dan karenanya disipasi termal meningkat dengan frekuensi - jika Anda menggandakan frekuensi Anda secara nominal menggandakan disipasi daya. Jika Anda menambah tegangan, maka disipasi daya Anda akan naik dengan kuadrat tegangan.

    Interkoneksi dan transistor juga mengalami keterlambatan propagasi karena sifat dunia yang tidak ideal. Anda tidak dapat hanya meningkatkan jumlah transistor dan berharap dapat berjalan pada frekuensi jam yang sama.

    Kami juga dibatasi oleh perangkat keras eksternal - terutama RAM. Untuk membuat CPU lebih cepat, Anda harus meningkatkan bandwidth memori, dengan menjalankannya lebih cepat, atau menambah lebar bus data.


  1. Tambahkan instruksi yang lebih kompleks - Alih-alih berjalan lebih cepat, kita dapat menambahkan set instruksi yang lebih kaya - tugas umum seperti enkripsi dll. Dapat dikeraskan ke dalam silikon. Alih-alih mengambil banyak siklus jam untuk menghitung dalam perangkat lunak, kami malah memiliki akselerasi perangkat keras.

    Ini sudah dilakukan pada prosesor Complex Instruction Set (CISC). Lihat hal-hal seperti SSE2, SSE3. Satu inti CPU saat ini jauh lebih kuat daripada inti CPU bahkan dari 10 tahun yang lalu bahkan jika berjalan pada frekuensi clock yang sama.

    Masalahnya adalah, saat Anda menambahkan instruksi yang lebih rumit, Anda menambahkan lebih banyak kompleksitas dan membuat chip semakin besar. Sebagai akibat langsung , CPU menjadi lebih lambat - frekuensi clock yang dapat diterima turun karena penundaan propagasi meningkat.

    Instruksi kompleks ini juga tidak membantu Anda dengan tugas-tugas sederhana. Anda tidak dapat mengeraskan setiap kasus penggunaan yang mungkin, jadi sebagian besar perangkat lunak yang Anda jalankan tidak akan mendapat manfaat dari instruksi baru, dan pada kenyataannya akan dirugikan oleh penurunan laju jam yang dihasilkan.

    Anda juga dapat membuat lebar bus data lebih besar untuk memproses lebih banyak data sekaligus, namun sekali lagi ini membuat CPU lebih besar dan Anda menekan tradeoff antara throughput yang diperoleh melalui bus data yang lebih besar dan clock rate menurun. Jika Anda hanya memiliki data kecil (mis. Integer 32-bit), memiliki CPU 256-bit tidak terlalu membantu Anda.


  1. Jadikan CPU lebih paralel - Daripada mencoba melakukan satu hal lebih cepat, alih-alih lakukan banyak hal sekaligus. Jika tugas yang Anda lakukan cocok untuk beroperasi pada beberapa hal sekaligus, maka Anda ingin satu CPU yang dapat melakukan beberapa perhitungan per instruksi (Single Instruction Multiple Data (SIMD)), atau memiliki beberapa CPU yang masing-masing dapat melakukan satu perhitungan.

    Ini adalah salah satu pendorong utama untuk CPU multi-core. Jika Anda menjalankan banyak program, atau dapat membagi program tunggal Anda menjadi beberapa tugas, maka memiliki beberapa inti CPU memungkinkan Anda melakukan lebih banyak hal sekaligus.

    Karena masing-masing inti CPU adalah blok yang terpisah secara efektif (pembatasan cache dan antarmuka memori), masing-masing inti individu lebih kecil daripada inti monolitik tunggal yang setara. Karena inti lebih kompak, penundaan propagasi berkurang, dan Anda dapat menjalankan setiap inti lebih cepat.

    Seperti apakah suatu program tunggal dapat mengambil manfaat dari memiliki beberapa inti, itu sepenuhnya tergantung pada apa yang sedang dilakukan oleh program tersebut, dan bagaimana program itu ditulis.

Tom Carpenter
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan . Setiap kesimpulan yang dicapai harus diedit kembali ke pertanyaan dan / atau jawaban apa pun.
Dave Tweed
Salah satu poin yang diangkat dalam komentar yang masih belum diatasi adalah CPU dapat paralel dengan menjalankan beberapa instruksi per jam (Superscalar). Itu ortogonal untuk SIMD dan frekuensi; instructions per clock (IPC) adalah faktor ketiga dalam throughput aktual per waktu. Semua CPU modern untuk beban kerja penggunaan interaktif setidaknya 2-lebar.
Peter Cordes
1
Untuk jawaban yang lebih akurat baca sciencedirect.com/topics/computer-science/...
Tony Stewart Sunnyskyguy EE75
37

Selain jawaban lain, ada elemen lain: hasil chip . Sebuah prosesor modern memiliki beberapa miliar transistor di dalamnya, masing-masing dan setiap transistor harus bekerja dengan sempurna agar seluruh chip berfungsi dengan baik.

Dengan membuat prosesor multi-core, Anda dapat mempartisi grup transistor dengan bersih. Jika ada cacat di salah satu core, Anda dapat menonaktifkan core itu , dan menjual chip dengan harga yang dikurangi sesuai dengan jumlah core yang berfungsi. Demikian juga, Anda juga dapat merakit sistem dari komponen yang divalidasi seperti pada sistem SMP.

Untuk hampir setiap CPU yang Anda beli, ia mulai hidup menjadi model premium kelas atas untuk jajaran prosesor tersebut. Apa yang Anda hasilkan, tergantung pada bagian mana dari chip yang bekerja secara salah dan dinonaktifkan. Intel tidak membuat prosesor i3: semuanya i7 rusak, dengan semua fitur yang memisahkan lini produk dinonaktifkan karena gagal pengujian. Namun, porsi yang masih berfungsi masih bermanfaat dan bisa dijual jauh lebih murah. Yang lebih buruk menjadi pernak-pernik gantungan kunci.

Dan cacat tidak jarang terjadi. Menciptakan milyaran transistor dengan sempurna bukanlah tugas yang mudah. Jika Anda tidak memiliki kesempatan untuk secara selektif menggunakan bagian dari chip yang diberikan, harga hasilnya akan naik, sangat cepat.

Hanya dengan satu prosesor über, pembuatan semuanya atau tidak sama sekali, menghasilkan proses yang jauh lebih boros. Untuk beberapa perangkat, seperti sensor gambar untuk keperluan ilmiah atau militer, di mana Anda memerlukan sensor yang sangat besar dan semuanya harus bekerja, biaya perangkat tersebut sangat besar sehingga hanya anggaran tingkat negara bagian yang dapat membelinya.

Apa namanya
sumber
4
Jika / ketika hasil meningkat dan memproduksi lebih banyak chip yang berfungsi sepenuhnya daripada permintaan pasar, vendor biasanya mulai memadukan beberapa core / cache dan / atau membuangnya pada frekuensi yang lebih rendah, daripada menyesuaikan struktur harga untuk membuat chip akhir relatif lebih murah. Dengan GPU / kartu grafis, Anda dapat membuka unit shader yang dinonaktifkan pada beberapa kartu dengan peretasan firmware, untuk melihat apakah Anda beruntung dan mendapat kartu di mana mereka hanya dinonaktifkan untuk segmentasi pasar, bukan cacat sebenarnya.
Peter Cordes
4
Intel telah memproduksi die-core mati untuk beberapa chip mereka. Dengan semua SKU seluler ULV (tegangan ultralow) menjadi dual-core, tidak ada cukup quad-core yang rusak, dan area die yang lebih kecil (terutama dengan iGPU cut-down juga) memberikan lebih banyak chip dual-core yang bekerja lebih baik per wafer dari sekering mati quad-core. en.wikichip.org/wiki/intel/microarchitectures/… memiliki bidikan mati dari grafis dual-core + GT1 ukuran mati 131 mm² Sandybridge, vs. 149 mm² dual-core + GT2 graphics + 216 mm² quad + GT2. Masih ada ruang untuk cacat dalam cache, dll.
Peter Cordes
Dan (sebagian) cacat pada bagian unit FMA mungkin dapat ditangani dengan menggabungkannya dan menjualnya sebagai chip Celeron atau Pentium (tidak ada AVX, jadi hanya vektor 128-bit.) Bahkan chip Skylake atau Coffee Lake modern tidak memiliki AVX . Unit FMA SIMD merupakan fraksi inti yang layak (dan menjalankan banyak operasi SIMD selain matematika FP, termasuk integer mul dan integer shift), jadi saya tidak akan terkejut jika unit FMA 2x 256 bit dapat dipetakan ke 2x 128-bit menggunakan 2 potongan mana saja yang masih berfungsi. Dengan Skylake Xeon, bahkan ada SKU dengan pengurangan throughput AVX512 FMA (hanya 1 yang berfungsi FMA 512-bit)
Peter Cordes
@PeterCordes Jika hasil mendapatkan yang baik, maka vendor akan mengeluarkan tingkat kerapatan yang lebih tinggi dan / atau lebih cepat (dan karenanya tingkat cacat yang lebih tinggi) hingga tingkat cacat kembali ke tempat mereka dapat menonaktifkan inti dan / atau mengurangi waktu chip untuk dijual dengan diskon ..
Monty Harder
@MontyHarder: Itu memang benar, tetapi validasi membutuhkan biaya dan waktu, dan jalur produksi yang ada akan terus membuat desain yang ada untuk sementara waktu. Tapi ya, beberapa contoh Intel tentang apa yang Anda bicarakan adalah Haswell Refresh , dan berbagai penyempurnaan Skylake yang pada dasarnya tidak ada perubahan arsitektur dan perbaikan kecil pada proses 14nm mereka. (Terkadang dengan iGPU baru). misalnya Kaby Lake kemudian Coffee Lake dll. sebagai langkah "optimisasi" dalam irama tik-tok normal Intel.
Peter Cordes
26

Ketergantungan data

Cukup mudah untuk menambahkan lebih banyak instruksi per jam dengan membuat chip "lebih luas" - ini telah menjadi pendekatan "SIMD". Masalahnya adalah ini tidak membantu kebanyakan kasus penggunaan.

Secara kasar ada dua jenis beban kerja, independen dan dependen. Contoh beban kerja independen mungkin "diberi dua urutan angka A1, A2, A3 ... dan B1, B2, ... dll, menghitung (A1 + B1) dan (A2 + B2) dll." Beban kerja semacam ini terlihat dalam grafik komputer, pemrosesan audio, pembelajaran mesin, dan sebagainya. Cukup banyak ini telah diberikan kepada GPU, yang dirancang khusus untuk menanganinya.

Beban kerja dependen mungkin adalah "Diberikan A, tambahkan 5 ke atasnya dan cari di tabel. Ambil hasilnya dan tambahkan 16 di atasnya. Lihat di atas di tabel yang berbeda."

Keuntungan dari beban kerja independen adalah dapat dibagi menjadi banyak bagian yang berbeda, sehingga lebih banyak transistor yang membantu. Untuk beban kerja yang tergantung, ini sama sekali tidak membantu - lebih banyak transistor hanya bisa membuatnya lebih lambat . Jika Anda harus mendapatkan nilai dari memori, itu adalah bencana untuk kecepatan. Sebuah sinyal harus dikirim melintasi motherboard, bepergian dengan kecepatan sub-lampu, DRAM harus mengisi daya satu baris dan menunggu hasilnya, kemudian mengirimkannya kembali. Ini membutuhkan puluhan nanodetik. Kemudian, setelah melakukan perhitungan sederhana, Anda harus mengirim untuk yang berikutnya.

Manajemen daya

Core cadangan dimatikan sebagian besar waktu. Pada kenyataannya, pada cukup banyak prosesor, Anda tidak dapat menjalankan semua core sepanjang waktu tanpa hal yang memanas, sehingga sistem akan mematikannya atau menurunkannya untuk Anda.

Menulis ulang perangkat lunak adalah satu-satunya cara ke depan

Perangkat keras tidak dapat secara otomatis mengubah beban kerja dependen menjadi beban kerja independen. Juga tidak dapat perangkat lunak. Tetapi seorang programmer yang siap untuk mendesain ulang sistem mereka untuk mengambil keuntungan dari banyak core mungkin saja.

pjc50
sumber
2
Kutipan diperlukan untuk "tidak dapat menjalankan semua core pada saat yang sama". Kecuali Anda menganggap kecepatan clock single-core max turbo sebagai kecepatan clock "nyata" dari CPU. Dalam pengertian klasik (sebelum kita menabrak dinding daya dan kecepatan clock dibatasi oleh penundaan propagasi jalur kritis), ya itu benar, tetapi di dunia modern lebih masuk akal untuk melihat kecepatan clock baseline sebagai apa yang dapat dipertahankan dengan semua core aktif menjalankan beban kerja yang berat. Apa pun yang lebih tinggi dari itu adalah saus yang Anda dapat gunakan secara oportunis jika batas daya / termal memungkinkan. (mis. Turbo Intel).
Peter Cordes
1
Tetapi dalam hal kekuatan, bahkan clock max satu inti dibatasi oleh termal lebih dari penundaan propagasi (meskipun mungkin batas-batas tahap pipa dipilih sehingga Anda mendekati batas itu pada target max turbo). Dan tegangan juga variabel: daya yang lebih buruk tetapi penundaan gerbang yang lebih pendek. Jadi bagaimanapun, tidak masuk akal untuk mempertimbangkan turbo max single-core sebagai sesuatu yang Anda "harus" dapat menjalankan semua core, karena batas itu sudah berasal dari kekuasaan.
Peter Cordes
Konteks dari pertanyaan awal pasti bertanya tentang kecepatan maks single-core, dan untuk banyak tujuan praktis itu (dan cache-nya meleset) adalah faktor pembatas nyata untuk kecepatan yang dirasakan bagi pengguna.
pjc50
Ya, kita semua akan mengambil kinerja 8x single-thread alih-alih CPU 8-core jika kita bisa. (Dengan SMT untuk membiarkannya berjalan secara alami memisahkan beban kerja tanpa konteks-switch overhead. Lihat jawaban saya. :) Sebuah inti super lebar hipotetis mungkin akan dapat clock sendiri lebih cepat ketika beban kerja menyebabkan banyak kios, daripada menjaga semua transistor dalam unit SIMD FMA menyala dan beralih setiap jam. (Power gating dalam satu inti juga merupakan kunci untuk tidak meleleh pada jam tinggi; en.wikipedia.org/wiki/Dark_silicon ). Jadi memiliki satu inti lebar tidak akan membuat ini berbeda.
Peter Cordes
Meskipun Anda memiliki titik bahwa kinerja single-threaded yang kita lihat pada CPU saat ini lebih baik daripada jika mereka terbatas pada kecepatan clock yang dapat dipertahankan pada semua core secara bersamaan bahkan dengan beban kerja terburuk. yaitu Turbo adalah kunci, terutama untuk suku cadang TDP rendah seperti chip laptop ( Mengapa CPU saya tidak dapat mempertahankan kinerja puncak di HPC ): biasanya rasio besar antara baseline dan max turbo, tidak seperti chip desktop berdaya tinggi namun rendah-core-count , misalnya Skylake i7-6700k adalah basis 4GHz, turbo single-core 4.2GHz (tanpa overclocking; lebih tinggi dimungkinkan dengan TDP 95W).
Peter Cordes
20

Kembali ke masa lalu, prosesor tidak dapat berlari secepat itu. Akibatnya, jika Anda ingin melakukan lebih banyak pemrosesan maka Anda membutuhkan lebih banyak prosesor. Ini bisa dengan coprocessor matematika, atau bisa juga dengan lebih dari prosesor yang sama. Contoh terbaik dari hal ini adalah Inmos Transputer dari tahun 80-an, yang secara khusus dirancang untuk pemrosesan paralel besar-besaran dengan beberapa prosesor yang dihubungkan bersama. Seluruh konsep bergantung pada asumsi bahwa tidak ada cara yang lebih baik untuk meningkatkan daya pemrosesan daripada menambah prosesor.

Masalahnya, asumsi itu (sementara) salah. Anda juga bisa mendapatkan lebih banyak kekuatan pemrosesan dengan membuat satu prosesor melakukan lebih banyak perhitungan. Intel dan AMD menemukan cara untuk mendorong kecepatan clock semakin tinggi, dan seperti yang Anda katakan, jauh lebih mudah untuk menjaga semuanya pada satu prosesor. Hasilnya adalah bahwa sampai pertengahan 2000-an, prosesor single-core cepat dimiliki pasar. Inmos meninggal pada awal tahun 90-an, dan semua pengalaman mereka mati bersama mereka.

Masa-masa indah harus berakhir. Begitu kecepatan clock naik ke GHz, benar-benar tidak ada ruang untuk melangkah lebih jauh. Dan kembali kami pergi ke beberapa core lagi. Jika Anda benar-benar tidak bisa lebih cepat, lebih banyak inti adalah jawabannya. Seperti yang Anda katakan, tidak selalu mudah untuk menggunakan inti tersebut secara efektif. Kami jauh lebih baik hari ini, tetapi kami masih beberapa cara membuatnya semudah Transputer lakukan.

Tentu saja ada opsi lain untuk peningkatan juga - Anda bisa lebih efisien sebagai gantinya. SIMD dan set instruksi serupa menyelesaikan lebih banyak pemrosesan untuk jumlah kutu jam yang sama. DDR membuat data Anda masuk dan keluar dari prosesor lebih cepat. Itu semua membantu. Tetapi ketika datang ke pemrosesan, kita kembali ke 80-an dan beberapa core lagi.

Graham
sumber
Komentar bukan untuk diskusi panjang; percakapan ini telah dipindahkan ke obrolan . Setiap kesimpulan yang dicapai harus diedit kembali ke pertanyaan dan / atau jawaban apa pun.
Dave Tweed
20

Pertanyaan bagus, atau setidaknya satu dengan jawaban yang menarik. Bagian dari jawaban ini menggambarkan dunia di mana CPU dapat mengukur lebar secara efisien daripada dengan beberapa inti terpisah. Model lisensi / harga akan berbeda!

Sisanya menjelaskan mengapa mereka tidak bisa. Ringkasan:

  • Biaya skala inti ganda mendekati linier
  • Biaya untuk memperluas skala pipa superscalar 1 inti ~ secara kuadrat Hal ini dapat dilakukan dengan kekuatan yang cukup, sampai titik tertentu. Kinerja single-threaded sangat penting untuk penggunaan interaktif (masalah latensi end-to-end, bukan hanya throughput), sehingga CPU high-end big-core saat ini membayar harga itu. mis. Skylake (4-lebar), Ryzen (5 atau 6-lebar), dan A12 Apple (7-lebar untuk core besar, 3-lebar untuk core hemat energi kecil)
  • Pengembalian IPC yang serius dan berkurang hanya dari pelebaran pipa di atas lebar 3 atau 4, bahkan dengan eksekusi out-of-order untuk menemukan ILP . Branch miss dan cache missses sulit, dan masih menghentikan seluruh pipa.
  • Anda tidak menyebutkan frekuensi, hanya IPC, tetapi frekuensi penskalaan juga sulit. Frekuensi yang lebih tinggi membutuhkan tegangan yang lebih tinggi, sehingga skala daya dengan frekuensi potong dadu : ^1dari frekuensi secara langsung, dan ^2dari tegangan. (Timbangan energi tersimpan kapasitor dengan V ^ 2, dan sebagian besar daya dinamis di luar arus bocor adalah dari memompa muatan ke beban kapasitif gerbang + kabel FET.)

    Kinerja = frekuensi kali IPC. (Dalam arsitektur yang sama. SIMD yang lebih luas memungkinkan Anda menyelesaikan pekerjaan yang sama dengan instruksi yang lebih sedikit, dan beberapa ISA lebih padat daripada yang lain, misalnya MIPS sering membutuhkan lebih banyak instruksi untuk melakukan pekerjaan yang sama daripada x86 atau AArch64.)

Biaya berada di area mati (biaya produksi) dan / atau daya (yang secara tidak langsung membatasi frekuensi karena pendinginan sulit). Selain itu, daya dan kinerja per Watt yang lebih rendah adalah tujuan itu sendiri, terutama untuk seluler (baterai) dan server (kepadatan daya / biaya pendinginan / biaya listrik).

Sebelum multi-core per socket adalah suatu hal, Anda memang memiliki sistem multi-socket untuk kasus penggunaan kelas atas di mana Anda menginginkan lebih banyak throughput daripada yang dapat dicapai dengan satu CPU yang dapat diproduksi, jadi itu adalah satu-satunya sistem SMP. (Server, stasiun kerja kelas atas).

Jika satu inti dapat menskala seefisien yang Anda inginkan, kami akan memiliki sistem dengan 1 inti fisik per soket, dan SMT (mis. HyperThreading) untuk memungkinkannya bertindak sebagai beberapa inti logis. Desktop / laptop biasa hanya akan memiliki 1 inti fisik, dan kami tidak akan kesulitan untuk memaralelkan hal-hal yang tidak skala secara linear dengan lebih banyak core. misalnya make -j4untuk memanfaatkan server multi-socket, dan / atau untuk menyembunyikan latensi I / O pada desktop. (Atau mungkin kita masih akan mencoba untuk memparalelkan banyak jika lebar pipa dengan mudah diskalakan tetapi IPC tidak, jadi kami harus menggunakan lebih banyak benang SMT.) Kernel OS Anda masih perlu dijalankan di semua inti logis, kecuali cara CPU menyajikan SMT ke OS sangat berbeda, sehingga algoritma penjadwalan paralel dan penguncian masih akan diperlukan di sana.


Donald Knuth mengatakan dalam sebuah wawancara tahun 2008

Saya mungkin juga sedikit bercerita tentang ketidakbahagiaan pribadi saya dengan tren saat ini terhadap arsitektur multicore. Bagi saya, ini kurang lebih seperti para perancang perangkat keras kehabisan ide, dan mereka sedang berusaha menyalahkan kesalahan Hukum Moore di masa depan kepada para penulis perangkat lunak dengan memberi kami mesin yang bekerja lebih cepat hanya pada beberapa tolok ukur kunci!

Ya, jika kita dapat memiliki keajaiban single-core CPU dengan 8x throughput pada program nyata , kita mungkin masih akan menggunakannya. Dengan sistem dual socket hanya ketika itu layak membayar lebih banyak untuk throughput lebih (bukan kinerja single-threaded).

Banyak CPU mengurangi biaya pengalih-konteks ketika banyak program berjalan (dengan membiarkannya benar-benar berjalan secara paralel alih-alih beralih cepat di antaranya); multitasking pre-emptive mengganggu mesin out-of-order besar seperti CPU akan membutuhkan mungkin akan lebih menyakitkan daripada yang sekarang.

Secara fisik itu akan menjadi single core (untuk hierarki cache sederhana tanpa ada interkoneksi antar core) tetapi mendukung SMT (mis. Intel HyperThreading) sehingga perangkat lunak dapat menggunakannya sebagai 8 core logis yang secara dinamis bersaing untuk sumber daya throughput. Atau ketika hanya 1 utas yang berjalan / tidak terhenti, itu akan mendapat manfaat penuh.

Jadi, Anda akan menggunakan banyak utas saat itu sebenarnya lebih mudah / alami (mis. Proses terpisah berjalan bersamaan), atau untuk masalah yang mudah diparalelkan dengan rantai ketergantungan yang akan mencegah memaksimalkan IPC binatang ini.

Namun sayangnya itu adalah angan-angan Knuth bahwa CPU multi-core akan berhenti menjadi sesuatu pada saat ini.


Penskalaan kinerja satu utas

Saya pikir jika mereka membuat 1 core yang setara dengan CPU 8 core, bahwa satu core akan memiliki peningkatan IPC 800% sehingga Anda akan mendapatkan kinerja penuh di semua program, bukan hanya yang dioptimalkan untuk banyak core.

Ya itu benar. Jika mungkin untuk membangun CPU seperti itu sama sekali, itu akan sangat luar biasa. Tapi saya pikir itu benar - benar mustahil pada proses pembuatan semikonduktor yang sama (yaitu kualitas / efisiensi yang sama dari transistor). Ini tentu saja tidak mungkin dengan anggaran daya yang sama dan area mati sebagai CPU 8-core, meskipun Anda akan menghemat logika untuk merekatkan core bersama, dan tidak akan membutuhkan banyak ruang untuk cache pribadi per-core.

Bahkan jika Anda mengizinkan peningkatan frekuensi (karena kriteria sebenarnya adalah bekerja per detik, bukan bekerja per jam), membuat CPU yang 2x lebih cepat akan menjadi tantangan besar.

Jika mungkin di mana saja di dekat daya yang sama dan anggaran die-area (sehingga biaya produksi) untuk membangun CPU seperti itu, ya vendor CPU sudah akan membangun mereka seperti itu.

Lihat Mikroprosesor Modern, Panduan 90 Menit!

Secara khusus, Lebih Banyak Core atau Core Lebih Luas? bagian, untuk latar belakang yang diperlukan untuk memahami jawaban ini; itu mulai sederhana dengan cara kerja pipelined CPU, kemudian superscalar (beberapa instruksi per jam). Kemudian menjelaskan bagaimana kita menabrak dinding daya di sekitar era P4, yang mengarah ke akhir penskalaan frekuensi yang mudah, menyisakan sebagian besar hanya IPC dan menyelesaikan lebih banyak pekerjaan per instruksi (misalnya SIMD) sebagai jalur maju, bahkan dengan transistor yang lebih kecil.

Membuat saluran pipa lebih lebar (instruksi maksimal per jam) biasanya menimbang biaya dengan lebar kuadrat . Biaya tersebut diukur dalam area die dan / atau daya, untuk pengecekan dependensi paralel yang lebih luas (deteksi bahaya), dan penjadwal out-of-order yang lebih luas untuk menemukan instruksi siap untuk dijalankan. Dan lebih banyak port baca / tulis pada file register dan cache Anda jika Anda ingin menjalankan instruksi selain nop. Terutama jika Anda memiliki instruksi 3-input seperti FMA atau add-with-carry (2 register + flag).

Ada juga berkurangnya pengembalian IPC untuk membuat CPU lebih luas ; sebagian besar beban kerja telah membatasi skala kecil / jarak pendek ILP (Instruction-Level Parallelism) untuk dieksploitasi oleh CPU, sehingga membuat core lebih luas tidak meningkatkan IPC (instruksi per jam) jika IPC sudah dibatasi kurang dari lebar inti oleh rantai ketergantungan, kehilangan cabang, ketinggalan cache, atau warung lainnya. Tentu Anda akan mendapatkan speedup di beberapa loop terbuka dengan iterasi independen, tapi bukan itu yang dilakukan sebagian besar kode. Bandingkan / instruksi cabang membuat 20% dari campuran instruksi dalam kode "khas", IIRC. (Saya pikir saya sudah membaca angka dari 15 hingga 25% untuk berbagai set data.)

Juga, cache ketinggalan yang menghentikan semua instruksi yang bergantung (dan kemudian semuanya begitu kapasitas ROB tercapai) lebih mahal untuk CPU yang lebih luas. (Biaya peluang meninggalkan lebih banyak unit eksekusi; lebih banyak pekerjaan potensial yang tidak dilakukan.) Atau kehilangan cabang juga menyebabkan gelembung.

Untuk mendapatkan IPC 8x, kami membutuhkan setidaknya 8x peningkatan dalam akurasi prediksi cabang dan tingkat hit cache . Tetapi cache hit rate tidak dapat diukur dengan baik dengan kapasitas cache melewati titik tertentu untuk sebagian besar beban kerja. Dan HW prefetching cerdas, tetapi tidak bisa yang pintar. Dan pada 8x IPC, prediktor cabang perlu menghasilkan 8x lebih banyak prediksi per siklus serta membuatnya lebih akurat.


Teknik saat ini untuk membangun eksekusi CPU yang tidak sesuai pesanan hanya dapat menemukan ILP dari jarak dekat . Misalnya, ukuran ROB Skylake adalah 224 domain-leburan uops, penjadwal untuk u-non-eksekusi adalah 97 domain-tidak-terpakai. Lihat Memahami dampak lfence pada loop dengan dua rantai ketergantungan panjang, untuk meningkatkan panjang untuk kasus di mana ukuran penjadwal adalah faktor pembatas dalam mengekstraksi ILP dari 2 rantai instruksi yang panjang, jika terlalu panjang. Dan / atau lihat ini jawaban yang lebih umum dan pengantar ).

Jadi menemukan ILP antara dua loop panjang yang terpisah bukanlah sesuatu yang bisa kita lakukan dengan perangkat keras. Rekompilasi biner dinamis untuk fusi loop dapat dimungkinkan dalam beberapa kasus, tetapi sulit dan bukan sesuatu yang benar-benar dapat dilakukan CPU kecuali mereka menggunakan rute Transmeta Crusoe. (Lapisan emulasi x86 di atas ISA internal yang berbeda; dalam hal ini VLIW). Tetapi desain x86 modern standar dengan cache uop dan decoder yang kuat tidak mudah dikalahkan untuk sebagian besar kode.

Dan di luar x86, semua ISA masih digunakan relatif mudah untuk memecahkan kode, sehingga tidak ada motivasi untuk kompilasi dinamis selain optimasi jarak jauh. TL: DR: berharap untuk kompiler ajaib yang dapat mengekspos lebih banyak ILP ke perangkat keras tidak berfungsi untuk Itanium IA-64 , dan tidak mungkin bekerja untuk CPU super-lebar untuk setiap ISA yang ada dengan model serial eksekusi.


Jika Anda memang memiliki CPU super-lebar, Anda pasti ingin itu mendukung SMT sehingga Anda dapat membuatnya tetap bekerja dengan menjalankan beberapa utas rendah-ILP.

Karena Skylake saat ini lebar 4 uops (dan mencapai IPC nyata 2 hingga 3 uops per jam, atau bahkan lebih dekat dengan 4 dalam kode throughput tinggi), CPU 8x yang lebih lebar secara hipotetis akan berukuran 32-lebar!

Mampu mengukir itu kembali ke 8 atau 16 CPU logis yang secara dinamis berbagi sumber daya eksekusi akan fantastis: utas yang tidak macet mendapatkan semua bandwidth front-end dan throughput back-end.

Tetapi dengan 8 core yang terpisah, ketika sebuah thread berhenti, tidak ada lagi yang bisa membuat unit eksekusi diberi makan; utas lainnya tidak mendapat manfaat.

Eksekusi sering meledak-ledak: ia berhenti menunggu cache gagal dimuat, lalu begitu yang tiba banyak instruksi secara paralel dapat menggunakan hasil itu. Dengan CPU super-lebar, burst itu bisa lebih cepat, dan sebenarnya bisa membantu dengan SMT.


Tetapi kita tidak dapat memiliki CPU super lebar ajaib

Jadi untuk mendapatkan throughput kita malah harus mengekspos paralelisme ke perangkat keras dalam bentuk paralelisme tingkat-benang . Umumnya kompiler tidak pandai mengetahui kapan / bagaimana menggunakan utas, selain untuk kasus sederhana seperti loop yang sangat besar. (OpenMP, atau gcc -ftree-parallelize-loops). Masih dibutuhkan kepintaran manusia untuk mengolah kode agar dapat secara efisien menyelesaikan pekerjaan yang berguna secara paralel, karena komunikasi antar-thread mahal, dan begitu juga utas startup.

TLP adalah paralelisme berbutir kasar, tidak seperti ILP berbutir halus dalam satu utas eksekusi yang dapat dieksploitasi oleh HW.


CPU yang ditujukan untuk beban kerja interaktif (seperti Intel / AMD x86, dan core high-end Apple / ARM AArch64) pasti mendorong penurunan hasil penskalaan IPC, karena kinerja single-threaded masih sangat berharga ketika latensi penting, bukan hanya throughput untuk masalah paralel masif.

Mampu menjalankan 8 salinan game secara paralel pada 15fps masing-masing jauh lebih berharga daripada mampu menjalankan satu salinan pada 45fps. Vendor CPU mengetahui hal ini, dan itulah sebabnya CPU modern menggunakan eksekusi out-of-order meskipun biayanya besar dan mati. (Tetapi GPU tidak karena beban kerjanya paralel secara masif).

Perangkat keras banyak-inti Intel Xeon Phi (Knight's Landing / Knight's Mill) adalah titik setengah jalan yang menarik: eksekusi out-of-order yang sangat terbatas dan SMT untuk menjaga core 2-lebar yang diberi instruksi AVX512 SIMD untuk mengolah angka. Inti didasarkan pada arsitektur Silvermont berdaya rendah Intel. (Ex-of-order eksekutif tetapi dengan jendela menata ulang kecil, jauh lebih kecil dari keluarga inti Sandybridge. Dan pipa yang lebih sempit.)


BTW, semua ini ortogonal ke SIMD. Mengerjakan lebih banyak pekerjaan per instruksi selalu membantu, jika memungkinkan untuk masalah Anda.


Model harga

Model penentuan harga perangkat lunak didasarkan pada lanskap perangkat keras terkini.

Model lisensi per-inti menjadi lebih luas (dan relevan bahkan untuk desktop soket tunggal) dengan munculnya CPU multi-core. Sebelum itu, itu hanya relevan untuk server dan workstation besar.

Jika perangkat lunak tidak memerlukan banyak inti untuk berjalan dengan kecepatan tinggi, tidak akan ada cara untuk menjualnya lebih murah kepada orang-orang yang tidak mendapatkan banyak manfaat karena mereka menjalankannya pada CPU yang lebih lemah. Kecuali jika mungkin ekosistem perangkat lunak / perangkat keras mengembangkan kontrol pada "saluran SMT" yang memungkinkan Anda mengkonfigurasi lebar eksekusi maksimum untuk kode yang berjalan pada inti logis itu. (Sekali lagi membayangkan dunia di mana skala CPU dalam lebar pipa, bukan beberapa core terpisah.)

Peter Cordes
sumber
2
"startup benang mahal" - itu bukan fakta sulit; ini adalah artefak dari Sistem Operasi modern umum.
MSalters
1
@MSalters Dan memang, beberapa proyek penelitian telah mengeksplorasi betapa hebatnya jika harus menghentikan pendekatan ini. Sama dengan "kepintaran manusia untuk mengerjakan ulang kode" - ada cara penulisan kode yang secara alami lebih mudah diparalelkan, mereka belum begitu populer dalam beberapa dekade terakhir. Di mana mereka yang digunakan, biasanya Anda dapat melihat skala horisontal besar dengan biaya yang sangat rendah; pada kenyataannya, ke titik bahwa penskalaan horizontal mulai menjadi jauh lebih murah daripada vertikal dalam banyak aplikasi. Itu hanya berarti Anda tidak boleh memberikan pengembang pilihan - jika keadaan memaksanya, itu berfungsi dengan baik: D
Luaan
11

Biarkan saya menggambar analogi:

Jika Anda memiliki monyet mengetik di mesin tik, dan Anda ingin lebih banyak mengetik selesai, Anda bisa memberikan kopi monyet, mengetik pelajaran, dan mungkin membuat ancaman untuk membuatnya bekerja lebih cepat, tetapi ada titik di mana monyet akan mengetik di kapasitas maksimum.

Jadi, jika Anda ingin lebih banyak mengetik, Anda harus mendapatkan lebih banyak monyet.


Untuk memperluas analogi lebih lanjut, Anda memerlukan mesin tik terpisah untuk setiap monyet (mewakili bus data yang dibutuhkan masing-masing inti), Anda memerlukan cara untuk membawa pisang ke setiap monyet dan sesuatu untuk mengambil kotorannya (analog dengan distribusi daya dan panas disipasi) dan Anda perlu cara untuk memastikan bahwa monyet tidak semua mencoba untuk mengetikkan bagian yang sama di Twelfth Night (analog dengan membagi beban kerja di antara prosesor). Tetapi semua ini kurang berhasil untuk mendapatkan lebih banyak daripada mencoba untuk mendapatkan lebih banyak mengetik dari satu monyet.

EvilSnack
sumber
7

Anda menunjukkan bahwa banyak perangkat lunak tidak menggunakan lebih dari (x) core. Tetapi ini sepenuhnya merupakan batasan yang ditempatkan oleh perancang perangkat lunak itu. PC rumahan yang memiliki banyak inti masih baru (ish) dan mendesain perangkat lunak multi-ulir juga lebih sulit dengan API dan bahasa tradisional.

PC Anda juga tidak hanya menjalankan 1 program itu. Itu melakukan banyak hal lain yang dapat dimasukkan ke core yang kurang aktif sehingga perangkat lunak utama Anda tidak terganggu oleh mereka sebanyak itu.

Saat ini tidak mungkin untuk hanya meningkatkan kecepatan satu core untuk mencocokkan throughput 8 core. Lebih banyak kecepatan kemungkinan harus berasal dari arsitektur baru.

Karena lebih banyak core tersedia dan API dirancang dengan asumsi itu, programmer akan mulai menggunakan core lebih banyak. Upaya membuat desain multi-ulir lebih mudah dilakukan sedang berlangsung. Jika Anda mengajukan pertanyaan ini dalam beberapa tahun, Anda mungkin akan mengatakan "Game saya hanya menggunakan 32 core, jadi mengapa CPU saya memiliki 256?".

hekete
sumber
3
Perbedaan antara 1 vs beberapa core sangat besar dalam hal mendapatkan perangkat lunak untuk mengambil keuntungan. Sebagian besar algoritma dan program bersifat serial. misal Donald Knuth telah mengatakan bahwa CPU multi-core terlihat seperti perancang HW " berusaha untuk menyalahkan menyalahkan hukum Moore di masa depan kepada para penulis perangkat lunak dengan memberi kami mesin yang bekerja lebih cepat hanya pada beberapa tolok ukur utama! "
Peter Cordes
Sayangnya belum ada yang datang dengan cara untuk membuat single wide / fast core menjalankan program single-threaded di dekat secepat kita bisa mendapatkan kode paralel-efisien untuk dijalankan di beberapa core. Tapi untungnya perancang CPU menyadari bahwa kinerja single-threaded masih kritis dan membuat masing-masing inti individu lebih besar dan lebih kuat daripada jika mereka akan melakukan throughput murni pada masalah paralel. (Bandingkan Skylake (4-lebar) atau Ryzen (5-lebar) vs inti dari Xeon Phi (Knight's Landing / Knight's Mill berdasarkan Silvermont + AVX512) (eksekutif OoO 2-lebar dan terbatas)
Peter Cordes
2
Bagaimanapun ya, memiliki setidaknya 2 core sering membantu untuk OS multitasking, tetapi pre-emptive multi-tasking pada inti tunggal yang 4x atau 8x secepat CPU saat ini akan cukup bagus. Untuk banyak kasus penggunaan interaktif yang akan jauh lebih baik, jika memungkinkan untuk membangun / dengan anggaran daya yang sama. (Dual core memang membantu mengurangi biaya konteks-switch ketika beberapa tugas menginginkan waktu CPU.)
Peter Cordes
1
Semua benar, tetapi secara historis multi-core lebih mahal. Tidak ada banyak alasan untuk merancang algoritma paralel di luar aplikasi sains. Ada banyak ruang untuk paralelisasi, bahkan dalam algoritma yang membutuhkan sebagian besar eksekusi serial. Tapi IPC generasi saat ini tidak bagus dan mudah berantakan. Yang umumnya menghasilkan bug yang sangat sulit ditemukan dan diperbaiki. Tentu saja CPU 4x lebih cepat akan luar biasa (tetapi Anda masih menginginkan banyak core).
hekete
2
@PeterCordes Yah, sebagian besar algoritme dan program tidak berseri karena memang harus demikian, tetapi sebagian besar karena itulah yang selalu dilakukan (dengan taburan "itu trade-off yang bagus"). Kasus yang paling mengerikan adalah di mana Anda bisa menjalankan program yang sama empat kali pada empat beban kerja yang terpisah dan menjalankannya secara paralel tanpa masalah. Tapi itu menyentuh masalah lain - CPU tidak sering menjadi hambatan, dan biasanya cara mengatasinya adalah dengan menggunakan algoritma yang lebih baik, bukan lebih banyak CPU. Kadang-kadang itu membantu dengan kemacetan lain juga (memori, disk, jaringan ...).
Luaan
3

Alasan paling meyakinkan dari sudut pandang historis, adalah disipasi kekuasaan .

Setelah Pentium IV, Intel mencoba mengejar Tejas prosesor generasi berikutnya yang diberi nama kode yang seharusnya berjalan dalam rentang 4 GHz hingga 12 GHz. Masalahnya adalah bahwa berlari pada kecepatan itu menghasilkan terlalu banyak panas untuk bisa hidup.

Setelah Tejas dibatalkan, Intel memerlukan waktu 10 hingga 15 tahun sebelum akhirnya core mereka berjalan pada 4 GHz dengan tingkat panas yang dapat diterima.

Lihat Tejas dan Jayhawk .

Intel memiliki proyek lain yang paralel dengan Tejas yang melibatkan penggunaan beberapa inti. Proyek itu memiliki tingkat panas yang dapat diterima, jadi begitulah caranya. Itu memungkinkan mereka untuk meningkatkan kinerja sekarang daripada menunggu 10 tahun lagi untuk proses pembuatan 10 nm.

Dengan asumsi core tidak kekurangan sumber daya, maka untuk mendapatkan jumlah instruksi yang sama per detik dari satu core, bukan N core, Anda akan membutuhkan tingkat instruksi dari core tunggal menjadi N kali lebih cepat. Disipasi daya dinamis dari inti CPU berbanding lurus dengan frekuensi operasi. Itu juga sebanding dengan kuadrat dari tegangan operasi. Berjalan pada frekuensi yang lebih rendah memungkinkan penggunaan tegangan operasi yang lebih rendah. Menggunakan tegangan yang lebih rendah pada frekuensi yang lebih rendah berarti panas yang dihasilkan secara praktis turun bersama kubus frekuensi operasi.

Contoh ekstremnya adalah otak manusia, yang dapat melakukan operasi yang setara dengan 2 ^ 18 per detik hanya dengan menggunakan daya 20 W. Ini mencapai ini dengan menggunakan miliaran neuron yang berjalan secara paralel dengan hanya beberapa ratus Hz.

Juga perlu diingat bahwa biasanya ada ratusan atau ribuan utas yang berjalan sekaligus pada PC. Sistem operasi menangani alokasi waktu pada inti untuk setiap utas. Jadi, bahkan jika suatu program individu tidak mengambil keuntungan dari semua inti, itu masih menguntungkan karena program-program lain mengambil lebih sedikit waktu CPU-nya jika mereka berjalan pada inti lain.

Jika ada, pasar berkinerja tinggi bergerak ke pemrosesan yang lebih paralel dalam bentuk FPGA. Intel baru-baru ini membeli Altera (produsen FPGA terbesar kedua) dan sekarang menjual papan dengan akselerator perangkat keras FPGA. Perangkat lunak dapat memuat FPGA dengan gambar saat dijalankan menggunakan panggilan API. CPU kemudian memasukkan data ke dalam FPGA dan memungkinkannya melakukan sebagian besar pekerjaan. Jenis aplikasi biasanya encoding video, AI, rendering, pencarian basis data, dll.

pengguna4574
sumber
Juga perlu diingat bahwa biasanya ada ratusan atau ribuan utas yang berjalan sekaligus pada PC. Tidak, tidak berlari . Bahwa banyak utas ada di desktop modern, tetapi hampir semuanya tertidur menunggu I / O atau timer pada waktu tertentu. misalnya rata-rata beban (lebih dari menit terakhir) pada desktop Linux saya saat ini 0,19 tugas aktif siap untuk menggunakan waktu CPU pada saat tertentu. Jika saya menjalankan encode video, x264 akan memulai beberapa utas untuk OS untuk menjadwalkan pada beberapa core, tetapi hanya sekitar sebanyak yang saya miliki core logis.
Peter Cordes
Dan BTW, OP (karena alasan tertentu) menghilangkan frekuensi sepenuhnya, dan bertanya tentang penskalaan IPC (instruksi per siklus clock), bukan per detik. Apa yang Anda katakan itu benar, tetapi mereka mengusulkan untuk membuat CPU lebih luas , bukan clock lebih tinggi. Saya sudah membahasnya dalam jawaban saya, jadi jawaban Anda yang menjelaskan penskalaan daya dengan frekuensi adalah tambahan yang bagus, +1.
Peter Cordes
@PeterCordes Benar, saya tidak bermaksud menyiratkan bahwa semua utas mengeksekusi sekaligus, do tentu saja bergiliran. Terima kasih telah mengklarifikasi.
user4574
Yah tidak begitu banyak "bergiliran" karena mereka tidak siap untuk berlari sama sekali, sebagian besar waktu. Mereka sebagian besar semua tertidur, biasanya hanya bangun untuk perhitungan singkat misalnya setelah OS memberikan penekanan tombol atau jaringan membaca, atau membangunkan mereka karena penghitung waktu kedaluwarsa. Jarang lebih dari 2 orang yang bangun sekaligus, kecuali Anda benar-benar melakukan sesuatu yang intensif secara komputasi. Dan jika ya, Anda tidak memulai ratusan utas, Anda memulai sejumlah utas ~ = jumlah inti yang tersedia.
Peter Cordes
2

Hanya untuk melengkapi gambaran di mana semua ini terjadi ...

Neural Networks dan AI adalah topik yang sangat panas saat ini. Salah satu alasannya adalah bahwa seseorang dapat secara efisien menggunakan sejumlah besar core sederhana secara paralel dan karenanya mengekstrak mendekati kinerja komputasi maksimum. Persyaratan ini secara inheren paralel dan peta cukup mudah ke array prosesor tanpa banyak komunikasi yang dibutuhkan antara core. Inilah sebabnya mengapa GPU adalah teknologi goto pertama untuk akselerasi AI. Saat ini kami melihat chip dioptimalkan lebih baik daripada GPU video untuk NN yang datang ke pasar. Langkah selanjutnya, atau mungkin final, adalah membuat NN menggunakan teknologi analog seperti memristor.

Dan sebagai tambahan, dalam sesuatu seperti PC gaming ada jauh lebih banyak kinerja mentah dalam kartu grafis daripada multicore Intel atau AMD CPU

Dirk Bruere
sumber
2
Re "... secara inheren paralel secara masif" : Bahkan sejajar memalukan ?
Peter Mortensen
1

Pada dasarnya, kerugian CMOS secara eksponensial (^ 1,5) sebanding dengan frekuensi dan kinerja CPU paralel agak kurang dari linear sebanding dengan jumlah CPU.

Jadi rasio untuk penghitungan daya ke daya disipasi ditingkatkan untuk aplikasi multi-CPU pada laju jam yang berbeda ketika membandingkan kecepatan vs jumlah CPU untuk disipasi daya tetap.

Ini lebih kompleks dari ini, tetapi ini adalah dasar mengapa CPU paralel lebih baik bang per Watt dalam aplikasi dinamis. Akan selalu ada pengecualian saat dioptimalkan untuk satu skenario.

Bukan ukuran CPU yang lebih besar yang membuatnya lebih cepat untuk aplikasi PC khas Intel / AMD, melainkan ukuran yang diperkecil dari resolusi litograf dan kapasitansi gerbang yang lebih rendah yang mengurangi daya seiring dengan berkurangnya tingkat sub-ambang batas dan tegangan Core.

Peningkatannya tidak linier dan tidak berarti 8 core 4x lebih baik dari 2 tetapi tujuannya jika bertemu adalah untuk memiliki lebih banyak pemrosesan rentang dinamis dengan pelambatan pembuangan daya, kecepatan dan tegangan untuk meningkatkan kinerja dan efisiensi dan daya puncak sesuai permintaan tanpa kenaikan suhu yang berlebihan.

Untuk jawaban yang lebih ilmiah, baca https://www.sciencedirect.com/topics/computer-science/dynamic-power-consumption

Tony Stewart Sunnyskyguy EE75
sumber
-2

Multicores biasanya tidak multiscalar. Dan core multiscalar bukan multicores.

Ini akan menjadi semacam penemuan sempurna arsitektur multiscalar yang berjalan di beberapa megahertz, tetapi secara umum jembatannya tidak akan memungkinkan konsumen, tetapi mahal sehingga kecenderungannya adalah pemrograman multicore pada frekuensi yang lebih rendah daripada instruksi pendek pada kecepatan clock tinggi.

Beberapa inti instruksi lebih murah dan lebih mudah untuk diperintahkan, dan itu sebabnya itu ide yang buruk memiliki arsitektur multiscalar di beberapa gigahertz.

machtur
sumber
1
Apakah maksud Anda "superscalar", banyak instruksi per jam? Kebanyakan CPU multi-core adalah superscalar. misalnya Ryzen berukuran 5-lebar. Chip AArch64 kelas atas Apple berukuran lebar 6 atau 8. Ada banyak buah rendah untuk CPU 2-lebar untuk dieksploitasi dalam sebagian besar kode, jadi ada baiknya membuat setiap inti setidaknya 2-lebar sebelum penskalaan ke beberapa core yang masing-masing membutuhkan cache pribadi mereka sendiri, dan interkoneksi antar core ( misal kartu komputasi banyak-core Intel Xeon Phi memiliki banyak inti dua masalah). Sama untuk core smartphone: core kecil setidaknya 2-lebar. Masalah kinerja single-threaded!
Peter Cordes
1
Atau maksud Anda dl.acm.org/citation.cfm?id=224451 - sebuah makalah penelitian tentang apa yang mereka sebut core "Multiscalar" yang mencari ILP pada rentang yang lebih besar dalam rentang grafik kontrol-aliran dari program tingkat tinggi, menggunakan kombinasi HW dan SW. CPU mainstream yang kami gunakan di desktop dan smartphone tidak seperti ini, mereka hanya superscalar biasa dengan eksekusi out-of-order, menerapkan serial ISA yang berpura-pura menjalankan instruksi satu per satu.
Peter Cordes
Terima kasih. afaik, ide di balik lengkungan skalar adalah pengukuran panas di belakang set instruksi yang diketahui atau yang telah ditentukan (kasus AVX). <br/> Perhitungan arsitektur saat ini vs panas direnungkan tidak dapat diprediksi secara komputasi. ini meningkatkan multicores ketidakmungkinan bisa berjalan pada frekuensi besar karena kemampuan mereka untuk melakukan dalam ideal waktu / panas tidak dapat dihitung. itu saja yang saya tahu sejauh ini. Saya sedang menggali mesin vektor untuk tujuan memahami fisika "multiscalars". kasus ini xeon / phy mengikuti kurva termal yang ideal seperti CPU kuno lakukan. meningkatkan pengalaman pelanggan
machtur
Set instruksi SIMD seperti AVX adalah cara untuk mendapatkan lebih banyak pekerjaan melalui pipa tanpa harus membuat keseluruhan pipa lebih luas, hanya unit eksekusi. Misalnya, Skylake dapat menjalankan 3 vpaddd ymm0, ymm1, ymm2instruksi per jam, masing-masing melakukan 8 penambahan bilangan bulat 32-bit. Jadi 24 bilangan bulat ditambahkan per jam tetapi mesin eksekusi yang tidak sesuai "hanya" harus melacak 3 instruksi dalam penerbangan. Itu jauh lebih murah untuk membangun daripada CPU yang bisa menjalankan 24 add eax, edxinstruksi per jam. SIMD pada dasarnya ortogonal ke lebar pipa.
Peter Cordes
Skylake adalah contoh optimalisasi per siklus clock. varian yang banyak saya tidak ke mereka yang merupakan kasus yang menarik dari optimasi bus internal karena skylakes mengintegrasikan Xeon original offloading ke dalam pipa SIMD seperti itu. Saya berasumsi satu inti besar akan mengintegrasikan pembongkaran dan perhitungan dalam beberapa siklus seperti (misalnya) fenomena yang dilakukan untuk AVX. itu cara komputasi terintegrasi ke depan versus daya yang dibutuhkan untuk operasi blok internal. sebagai oposite ke beberapa instruksi pendek seperti di Gpu-like dengan beberapa "virtual" core mirip dengan penambahan ke Nehalem
machtur