Bagaimana Anda Kira Kelajuan Pemproses pada Pemproses Multi-teras?
Kemunculan pemproses pelbagai peringkat gred pengguna ekonomi menimbulkan persoalan untuk ramai pengguna: bagaimana anda secara berkesan mengira kelajuan sebenar sistem multi-teras? Adakah sistem 3Ghz 4-teras benar-benar 12Ghz? Bacalah semasa kami menyiasat.
Sesi Soalan & Jawapan hari ini datang kepada kami dengan hormat SuperUser-satu bahagian pembahagian Stack Exchange, kumpulan pemanduan komuniti laman web Q & A.
Soalan
Pembaca SuperUser NReilingh ingin tahu bagaimana kelajuan pemproses untuk sistem multi-teras sebenarnya dikira:
Adakah betul untuk mengatakan, sebagai contoh, bahawa pemproses yang mempunyai empat teras setiap berjalan pada 3GHz sebenarnya adalah pemproses berjalan pada 12GHz?
Saya pernah mendapat argumen "Mac vs PC" (yang dengan cara ini TIDAK menjadi tumpuan topik ini ... yang kembali di sekolah menengah) dengan seorang kenalan yang menegaskan bahawa Mac hanya diiklankan sebagai mesin 1Ghz kerana mereka berdua -processor G4s masing-masing berjalan pada 500MHz.
Pada masa itu, saya tahu ini adalah hogwash atas sebab-sebab yang saya fikir jelas kepada kebanyakan orang, tetapi saya hanya melihat komen di laman web ini dengan kesan "6 core x 0.2GHz = 1.2Ghz" dan itu membuat saya berfikir tentang sama ada ada jawapan yang sebenar untuk ini.
Oleh itu, ini adalah soalan teknikal falsafah / mendalam yang lebih atau kurang mengenai semantik pengiraan kelajuan jam. Saya melihat dua kemungkinan:
- Setiap inti sebenarnya melakukan pengiraan x sesaat, oleh itu jumlah pengiraan adalah x (teras).
- Kelajuan jam adalah bilangan hitung bilangan kitaran yang diproses oleh pemproses dalam ruang kedua, selagi semua teras berjalan pada kelajuan yang sama, kelajuan setiap kitaran jam tetap sama tidak berapa berapa teras yang ada . Dengan kata lain, Hz = (core1Hz + core2Hz + ...) / teras.
Jadi apakah cara yang sesuai untuk menunjukkan kelajuan jam keseluruhan dan, lebih penting lagi, adalah mungkin untuk menggunakan nomenklatur kelajuan tunggal pada sistem multi-teras?
Jawapan
Penyumbang SuperUser Mokubai membantu perkara yang jelas. Dia menulis:
Sebab utama mengapa pemproses quad-core 3GHz tidak pernah secepat teras tunggal 12GHz adalah dengan cara bagaimana tugas berjalan pada pemproses itu berfungsi, iaitu satu threaded atau multi-threaded. Undang-undang Amdahl adalah penting apabila mempertimbangkan jenis tugas yang anda jalankan.
Sekiranya anda mempunyai tugas yang bersifat linier dan harus dilakukan dengan tepat langkah demi langkah seperti (program yang sangat sederhana)
10: a = a + 1
20: goto 10
Kemudian tugas itu sangat bergantung pada hasil pas lalu dan tidak dapat menjalankan beberapa salinan itu sendiri tanpa merusak nilai
'a'
kerana setiap salinan akan mendapat nilai'a'
pada masa yang berlainan dan menuliskannya dengan cara yang berbeza. Ini mengehadkan tugas untuk satu thread dan dengan itu tugas itu hanya boleh dijalankan pada satu teras pada satu masa tertentu, jika ia dijalankan pada beberapa teras maka penyelarasan penyelewengan akan berlaku. Ini mengehadkannya kepada 1/2 kuasa cpu sistem dwi teras, atau 1/4 dalam sistem teras teras.Sekarang ambil tugas seperti:
10: a = a + 1
20: b = b + 1
30: c = c + 1
40: d = d + 1
50: goto 10
Semua baris ini adalah bebas dan boleh dibahagikan kepada 4 program berasingan seperti yang pertama dan dijalankan pada masa yang sama, masing-masing dapat menggunakan kuasa penuh salah satu teras tanpa sebarang masalah penyelarasan, di sinilah Amdahl's Law datang ke dalamnya.
Jadi, jika anda mempunyai satu aplikasi berulir yang melakukan pengiraan kuasa kasar, pemproses 12GHz tunggal akan menang ke bawah, jika anda boleh membuat tugas itu berpecah menjadi bahagian yang berasingan dan multi-threaded maka 4 core dapat mendekati, tetapi tidak cukup mencapai, prestasi yang sama, seperti undang-undang Amdahl.
Perkara utama yang sistem multi CPU memberi anda responsif. Pada mesin teras tunggal yang bekerja keras sistem boleh kelihatan lamban kerana kebanyakan masa boleh digunakan oleh satu tugas dan tugas-tugas lain hanya berjalan dalam pecah pendek di antara tugas yang lebih besar, sehingga sistem yang kelihatan lamban atau juddery . Pada sistem multi-teras tugas berat mendapat satu inti dan semua tugas lain bermain di teras lain, melakukan pekerjaan mereka dengan cepat dan cekap.
Perdebatan "6 teras x 0.2GHz = 1.2Ghz" adalah sampah dalam setiap keadaan kecuali di mana tugasnya selari dengan sempurna dan bebas. Terdapat banyak tugas yang sangat selari, tetapi mereka masih memerlukan beberapa bentuk synchronsation. Handbrake adalah trancoder video yang sangat baik menggunakan semua CPU yang tersedia tetapi ia memerlukan proses teras untuk menyimpan benang lain yang diisi dengan data dan mengumpulkan data yang mereka lakukan dengan.
- Setiap inti sebenarnya melakukan pengiraan x sesaat, oleh itu jumlah pengiraan adalah x (teras).
Setiap teras mampu melakukan pengiraan x sesaat, dengan mengambil kira beban kerja selari yang sesuai, pada program linear yang anda miliki adalah 1 teras.
- Kelajuan jam adalah bilangan hitung bilangan kitaran yang diproses oleh pemproses dalam ruang kedua, selagi semua teras berjalan pada kelajuan yang sama, kelajuan setiap kitaran jam tetap sama tidak berapa berapa teras yang ada . Dengan kata lain, Hz = (core1Hz + core2Hz + ...) / teras.
Saya fikir ia adalah kejahatan untuk berfikir bahawa 4 x 3GHz = 12GHz, yang diberikan matematik berfungsi, tetapi anda membandingkan epal dengan oren dan jumlahnya tidak betul, GHz tidak boleh semata-mata ditambah bersama untuk setiap keadaan. Saya akan menukarnya kepada 4 x 3GHz = 4 x 3GHz.
Mempunyai sesuatu untuk menambah penjelasannya? Bunyi dalam komen. Ingin membaca lebih banyak jawapan dari pengguna Stack Exchange yang berteknologi tinggi? Lihat thread perbincangan penuh di sini.