Pemproses berbilang teras: prinsip operasi. Hyper-Threading: "two-in-one" daripada Intel, atau Keupayaan Tersembunyi Xeon

Kami menulis bahawa menggunakan sistem Xeon pemproses tunggal tidak masuk akal, kerana pada harga yang lebih tinggi prestasinya akan sama dengan Pentium 4 dengan frekuensi yang sama. Sekarang, selepas kajian yang lebih teliti, sedikit pindaan mungkin perlu dibuat pada kenyataan ini. Teknologi Hyper-Threading dilaksanakan dalam Intel Xeon dengan teras Prestonia, ia benar-benar berfungsi dan memberikan kesan yang sangat ketara. Walaupun banyak persoalan timbul apabila menggunakannya...

Anda memberi produktiviti

"Lebih pantas, malah lebih pantas..." Perlumbaan untuk prestasi telah berlangsung selama bertahun-tahun, dan kadangkala sukar untuk mengatakan komponen komputer mana yang memecut lebih pantas. Untuk mencapai matlamat ini, semakin banyak kaedah baru dicipta, dan lebih jauh, lebih banyak tenaga kerja yang berkelayakan dan otak berkualiti tinggi dilaburkan dalam proses seperti runtuhan salji ini.

Peningkatan berterusan dalam prestasi sememangnya perlu. Oleh sekurang-kurangnya, ini adalah perniagaan yang menguntungkan, dan akan sentiasa ada cara yang indah untuk menggalakkan pengguna membuat peningkatan lain daripada "CPU berprestasi tinggi" semalam kepada "lebih hebat..." esok. Contohnya, pengecaman pertuturan serentak dan terjemahan serentak ke dalam bahasa lain - bukankah ini impian semua orang? Atau permainan yang luar biasa realistik dengan kualiti hampir "pawagam" (sepenuhnya menyerap perhatian dan kadang-kadang membawa kepada perubahan serius dalam jiwa) - bukankah ini keinginan ramai pemain, muda dan tua?

Tetapi dalam kes ini, mari kita ambil aspek pemasaran daripada persamaan dan fokus pada aspek teknikal. Selain itu, tidak semuanya begitu suram: terdapat tugas mendesak (aplikasi pelayan, pengiraan saintifik, pemodelan, dll.), Di mana segala-galanya lebih prestasi tinggi, khususnya unit pemprosesan pusat, sangat diperlukan.

Jadi, apakah cara untuk meningkatkan prestasi mereka?

Tingkatkan kelajuan jam. Ia adalah mungkin untuk "menipis" lagi proses teknologi dan meningkatkan kekerapan. Tetapi, seperti yang anda tahu, ini tidak mudah dan penuh dengan pelbagai masalah. kesan sampingan seperti masalah dengan pelesapan haba.

Meningkatkan sumber CPU- contohnya, meningkatkan volum cache, menambah blok baharu (Unit Pelaksanaan). Semua ini memerlukan peningkatan dalam bilangan transistor, pemproses yang lebih kompleks, peningkatan dalam kawasan cip, dan, akibatnya, kos.

Di samping itu, dua kaedah sebelumnya, sebagai peraturan, tidak memberikan peningkatan linear dalam produktiviti. Ini terkenal dalam Pentium 4: ralat dalam ramalan cawangan dan gangguan menyebabkan saluran paip yang panjang ditetapkan semula, yang sangat mempengaruhi prestasi keseluruhan.

Pemprosesan berbilang. Memasang berbilang CPU dan mengagihkan kerja antara mereka selalunya agak berkesan. Tetapi pendekatan ini tidak begitu murah - setiap pemproses tambahan meningkatkan kos sistem, dan papan induk dwi jauh lebih mahal daripada yang biasa (apatah lagi papan yang menyokong empat atau lebih CPU). Selain itu, tidak semua aplikasi mendapat manfaat daripada berbilang pemprosesan dalam prestasi yang cukup untuk mewajarkan kos.

Sebagai tambahan kepada pemproses berbilang "tulen", terdapat beberapa pilihan "perantaraan" yang boleh mempercepatkan pelaksanaan aplikasi:

Pemprosesan Berbilang Cip (CMP)- dua teras pemproses terletak secara fizikal pada satu cip, menggunakan cache biasa atau berasingan. Sememangnya, saiz kristal ternyata agak besar, dan ini tidak boleh tidak menjejaskan kos. Ambil perhatian bahawa beberapa CPU "dwi" ini juga boleh beroperasi dalam sistem berbilang pemproses.

Berbilang Benang Masa. Pemproses bertukar antara benang program pada selang masa tetap. Kos overhed kadangkala agak ketara, terutamanya jika proses sedang menunggu.

Hidupkan Berbilang Acara. Menukar tugas apabila jeda yang lama berlaku, seperti cache terlepas, nombor besar yang tipikal untuk aplikasi pelayan. Dalam kes ini, proses menunggu untuk memuatkan data daripada memori yang agak perlahan ke dalam cache digantung, membebaskan sumber CPU untuk proses lain. Walau bagaimanapun, Switch-on-Event Multithreading, seperti Time-Slice Multithreading, tidak selalu mencapai penggunaan optimum sumber pemproses, khususnya disebabkan ralat dalam ramalan cawangan, kebergantungan arahan, dsb.

Multithreading Serentak. Dalam kes ini, utas program dilaksanakan pada satu pemproses "secara serentak", iaitu, tanpa bertukar antara mereka. Sumber CPU diedarkan secara dinamik, mengikut prinsip "jika anda tidak menggunakannya, berikan kepada orang lain." Pendekatan inilah yang membentuk asas teknologi Intel Hyper-Threading, yang kini kami pertimbangkan.

Bagaimana Hyper-Threading Berfungsi

Seperti yang anda ketahui, "paradigma pengkomputeran" semasa melibatkan pengkomputeran berbilang benang. Ini terpakai bukan sahaja untuk pelayan, di mana konsep sedemikian wujud pada mulanya, tetapi juga untuk stesen kerja dan sistem desktop. Benang boleh dimiliki oleh aplikasi yang sama atau berbeza, tetapi hampir selalu terdapat lebih daripada satu utas aktif (untuk mengesahkan ini, cuma buka Pengurus Tugas dalam Windows 2000/XP dan hidupkan paparan bilangan utas). Walau bagaimanapun, pemproses biasa hanya boleh melaksanakan satu daripada utas pada satu masa dan terpaksa sentiasa bertukar antara mereka.

Buat pertama kalinya, teknologi Hyper-Threading dilaksanakan dalam pemproses Intel Xeon MP (Foster MP), yang mana ia telah diuji. Mari kita ingat bahawa MP Xeon, yang dibentangkan secara rasmi di IDF Spring 2002, menggunakan teras yang berkaitan dengan Pentium 4 Willamette, mengandungi 256 KB L2 cache dan 512 KB/1 MB L3 cache dan menyokong operasi dalam konfigurasi 4-pemproses. Sokongan Hyper-Threading juga tersedia dalam pemproses stesen kerja - Intel Xeon (teras Prestonia, cache L2 512 KB), yang memasuki pasaran agak awal daripada MP Xeon. Pembaca kami sudah biasa dengan konfigurasi dwi-pemproses pada Intel Xeon, jadi kami akan melihat keupayaan Hyper-Threading menggunakan CPU ini sebagai contoh - secara teori dan praktikal. Walau apa pun, Xeon "mudah" adalah perkara yang lebih biasa dan mudah dihadam daripada MP Xeon dalam sistem 4-pemproses...

Prinsip operasi Hyper-Threading adalah berdasarkan fakta bahawa pada bila-bila masa hanya sebahagian daripada sumber pemproses digunakan semasa melaksanakan kod program. Sumber yang tidak digunakan juga boleh dimuatkan dengan kerja - contohnya, aplikasi lain (atau utas lain aplikasi yang sama) boleh digunakan untuk pelaksanaan selari. Dalam satu pemproses Intel Xeon fizikal, dua pemproses logik (LP - Pemproses Logik) dibentuk, yang berkongsi sumber pengkomputeran CPU. Sistem pengendalian dan aplikasi "melihat" tepat dua CPU dan boleh mengagihkan kerja di antara mereka, seperti dalam kes sistem dwi-pemproses yang lengkap.

Salah satu matlamat untuk melaksanakan Hyper-Threading adalah untuk membolehkannya berjalan pada kelajuan yang sama seperti pada CPU biasa apabila terdapat hanya satu utas aktif. Untuk melakukan ini, pemproses mempunyai dua mod operasi utama: Tugas Tunggal (ST) dan Berbilang Tugas (MT). Dalam mod ST, hanya satu pemproses logik yang aktif dan mempunyai penggunaan sumber yang tersedia yang tidak berbelah bahagi (mod ST0 dan ST1); LP lain dihentikan dengan arahan HALT. Apabila utas program kedua muncul, pemproses logik tidak aktif diaktifkan (melalui gangguan) dan CPU fizikal dimasukkan ke dalam mod MT. Menghentikan LP yang tidak digunakan dengan arahan HALT diberikan kepada sistem pengendalian, yang akhirnya bertanggungjawab untuk pelaksanaan pantas yang sama bagi satu utas seperti dalam kes tanpa Hyper-Threading.

Bagi setiap dua LP, apa yang dipanggil Architecture State (AS) disimpan, yang merangkumi keadaan daftar pelbagai jenis - tujuan umum, kawalan, APIC dan perkhidmatan. Setiap LP mempunyai APIC sendiri (pengawal gangguan) dan satu set daftar, untuk operasi yang betul yang konsep Daftar Alias ​​​​Jadual (RAT) diperkenalkan, yang menjejaki surat-menyurat antara lapan daftar IA-32 tujuan umum dan 128 daftar CPU fizikal (satu RAT untuk setiap LP ).

Apabila menjalankan dua utas, dua set Penunjuk Arahan Seterusnya yang sepadan disokong. Kebanyakan arahan diambil daripada Trace Cache (TC), di mana ia disimpan dalam bentuk yang dinyahkod, dan kedua-dua LP aktif mengakses TC secara berselang-seli, setiap jam lain. Pada masa yang sama, apabila hanya satu LP yang aktif, ia mendapat akses eksklusif kepada TC tanpa putaran jam. Akses kepada Microcode ROM berlaku dengan cara yang sama. Blok ITLB (Penimbal Pandang Kesisi Terjemahan Arahan), yang digunakan apabila arahan yang diperlukan tiada dalam cache arahan, diduplikasi dan setiap satu menghantar arahan untuk urutannya sendiri. Blok penyahkod arahan IA-32 Penyahkod Arahan dikongsi dan, sekiranya arahan diperlukan untuk dinyahkodkan untuk kedua-dua utas, ia menyediakannya satu demi satu (sekali lagi, setiap jam lain). Blok Uop Queue dan Allocator dibahagikan kepada dua, memperuntukkan separuh elemen kepada setiap LP. Penjadual, bernombor 5, memproses baris gilir perintah yang dinyahkod (Uops) walaupun milik LP0/LP1 dan arahan langsung untuk dilaksanakan oleh Unit Pelaksanaan yang diperlukan - bergantung pada kesediaan untuk melaksanakan yang pertama dan ketersediaan yang kedua. Cache semua peringkat (L1/L2 untuk Xeon, serta L3 untuk Xeon MP) dikongsi sepenuhnya antara dua LP, walau bagaimanapun, untuk memastikan integriti data, entri dalam DTLB (Penimbal Pandang Aside Terjemahan Data) dilengkapi dengan deskriptor dalam bentuk ID pemproses logik.

Oleh itu, arahan daripada kedua-dua CPU logik boleh dilaksanakan secara serentak pada sumber satu pemproses fizikal, yang dibahagikan kepada empat kelas:

  • pendua;
  • Dikongsi Sepenuhnya;
  • dengan deskriptor elemen (Entry Tagged);
  • dipisahkan secara dinamik (Dipartitioned) bergantung pada mod pengendalian ST0/ST1 atau MT.

Walau bagaimanapun, kebanyakan aplikasi yang menerima pecutan pada sistem berbilang pemproses juga boleh dipercepatkan pada CPU dengan Hyper-Threading didayakan tanpa sebarang pengubahsuaian. Tetapi terdapat juga masalah: sebagai contoh, jika satu proses berada dalam gelung menunggu, ia boleh mengambil semua sumber CPU fizikal, mengganggu kerja LP kedua. Oleh itu, prestasi apabila menggunakan Hyper-Threading kadangkala boleh menurun (sehingga 20%). Untuk mengelakkan ini, Intel mengesyorkan menggunakan arahan PAUSE (diperkenalkan dalam IA-32 bermula dengan Pentium 4) dan bukannya gelung tunggu kosong. Kerja yang agak serius juga sedang dilakukan pada pengoptimuman kod automatik dan separa automatik semasa penyusunan - contohnya, siri penyusun Intel OpenMP C++/Fortran Compiler () telah mencapai kemajuan yang ketara dalam hal ini.

Satu lagi matlamat pelaksanaan pertama Hyper-Threading, menurut Intel, adalah untuk meminimumkan peningkatan bilangan transistor, kawasan cip dan penggunaan kuasa sambil mencapai peningkatan yang ketara dalam prestasi. Bahagian pertama komitmen ini telah pun dipenuhi: penambahan sokongan Hyper-Threading kepada MP Xeon/Xeon meningkatkan kawasan die dan penggunaan kuasa kurang daripada 5%. Kami masih perlu menyemak apa yang berlaku dengan bahagian kedua (prestasi).

Bahagian praktikal

Atas sebab yang jelas, kami tidak menguji sistem pelayan 4-pemproses pada MP Xeon dengan Hyper-Threading didayakan. Pertama, ia agak intensif buruh. Dan kedua, walaupun kita membuat keputusan mengenai pencapaian seperti itu, masih mustahil untuk mendapatkan peralatan mahal ini sekarang, kurang daripada sebulan selepas pengumuman rasmi. Oleh itu, telah diputuskan untuk menghadkan diri kita kepada sistem yang sama dengan dua Intel Xeon 2.2 GHz di mana ujian pertama pemproses ini dijalankan (lihat pautan pada permulaan artikel). Sistem ini berdasarkan papan induk Supermicro P4DC6+ ( Set cip Intel i860), mengandungi 512 MB memori RDRAM, kad video pada cip GeForce3 (64 MB DDR, pemacu Detonator 21.85), cakera keras Western Digital WD300BB dan 6X DVD-ROM; Windows 2000 Professional SP2 digunakan sebagai OS.

Sebagai permulaan, beberapa tanggapan umum. Apabila memasang satu Xeon dengan teras Prestonia, pada permulaan sistem BIOS memaparkan mesej tentang kehadiran dua CPU; jika dua pemproses dipasang, pengguna melihat mesej tentang empat CPU. Sistem pengendalian biasanya mengiktiraf "kedua-dua pemproses", tetapi hanya jika dua syarat dipenuhi.

Pertama, dalam Persediaan CMOS yang terakhir Versi BIOS Papan Supermicro P4DCxx kini mempunyai pilihan Dayakan Hyper-Threading, tanpanya OS akan mengenali pemproses fizikal sahaja. Kedua, keupayaan ACPI digunakan untuk memaklumkan OS tentang kehadiran pemproses logik tambahan. Oleh itu, untuk mendayakan Hyper-Threading, pilihan ACPI mesti didayakan dalam Persediaan CMOS, dan HAL (Lapisan Abstraksi Perkakasan) dengan sokongan ACPI juga mesti dipasang untuk OS itu sendiri. Nasib baik, dalam Windows 2000, menukar HAL daripada Standard PC (atau MPS Uni-/Multiprocessor PC) kepada ACPI Uni-/Multiprocessor PC adalah mudah - menggantikan "pemacu komputer" dalam pengurus peranti. Pada masa yang sama, untuk Windows XP sahaja dengan cara yang sah bertukar kepada ACPI HAL bermakna memasang semula sistem di atas pemasangan sedia ada.

Tetapi kini semua persediaan telah dibuat, dan Windows 2000 Pro kami sudah yakin bahawa ia berjalan pada sistem dwi-pemproses (walaupun sebenarnya hanya terdapat satu pemproses yang dipasang). Kini, secara tradisinya, tiba masanya untuk memutuskan matlamat ujian. Jadi kami mahu:

  • Menilai kesan Hyper-Threading terhadap prestasi aplikasi pelbagai kelas.
  • Bandingkan kesan ini dengan kesan memasang pemproses kedua.
  • Semak bagaimana sumber "adil" diperuntukkan kepada pemproses logik aktif apabila LP kedua melahu.

Untuk menilai prestasi, kami mengambil satu set aplikasi yang sudah biasa kepada pembaca, digunakan dalam menguji sistem stesen kerja. Mari kita mulakan dari akhir dan semak "kesamaan" CPU logik. Ia sangat mudah: mula-mula kami menjalankan ujian pada satu pemproses dengan Hyper-Threading dilumpuhkan, dan kemudian kami mengulangi proses tersebut dengan Hyper-Threading didayakan dan menggunakan hanya satu daripada dua CPU logik (menggunakan Pengurus Tugas). Oleh kerana dalam kes ini kami hanya berminat dengan nilai relatif, keputusan semua ujian dibawa ke bentuk "lebih besar adalah lebih baik" dan dinormalisasi (penunjuk sistem pemproses tunggal tanpa Hyper-Threading diambil sebagai satu).

Seperti yang anda lihat, janji Intel dipenuhi di sini: dengan hanya satu utas aktif, prestasi setiap dua LP adalah betul-betul sama dengan prestasi CPU fizikal tanpa Hyper-Threading. LP yang tidak aktif (dan kedua-dua LP0 dan LP1) sememangnya digantung, dan sumber yang dikongsi, sejauh yang boleh dinilai daripada keputusan yang diperolehi, dipindahkan sepenuhnya untuk digunakan kepada LP aktif.

Oleh itu, kami membuat kesimpulan pertama: dua pemproses logik sebenarnya sama, dan membolehkan Hyper-Threading "tidak mengganggu" kerja satu utas (yang dengan sendirinya tidak buruk). Sekarang mari kita lihat sama ada kemasukan ini "membantu", dan jika ya, di mana dan bagaimana?

Penyampaian. Keputusan empat ujian dalam pakej pemodelan 3D Studio 3D MAX 4.26, Lightwave 7b dan A|W Maya 4.0.1 digabungkan menjadi satu rajah kerana persamaannya.

Dalam keempat-empat kes (untuk Lightwave - dua adegan berbeza), beban CPU dengan kehadiran satu pemproses dengan Hyper-Threading dimatikan hampir selalu dikekalkan pada 100%. Walau bagaimanapun, apabila Hyper-Threading didayakan, pengiraan adegan dipercepatkan (akibatnya kami turut bergurau tentang beban CPU lebih daripada 100%). Dalam tiga ujian, peningkatan prestasi daripada Hyper-Threading sebanyak 14-18% dapat dilihat - dalam satu pihak, tidak banyak berbanding dengan CPU kedua, tetapi sebaliknya, agak baik, memandangkan sifat "percuma" kesan ini . Dalam salah satu daripada dua ujian dengan Lightwave, peningkatan prestasi hampir sifar (nampaknya, ini disebabkan oleh spesifikasi aplikasi ini, yang penuh dengan perkara pelik). Tetapi tiada keputusan negatif di mana-mana, dan peningkatan ketara dalam tiga kes lain adalah menggalakkan. Dan ini walaupun proses pemaparan selari melakukan kerja yang serupa dan mungkin tidak boleh menggunakan sumber CPU fizikal secara serentak dengan cara terbaik.

Pengekodan Photoshop dan MP3. Codec GOGO-no-coda 2.39c adalah salah satu daripada beberapa yang menyokong SMP, dan ia mempunyai peningkatan prestasi yang ketara sebanyak 34% disebabkan oleh dwi pemproses. Pada masa yang sama, kesan Hyper-Threading dalam kes ini adalah sifar (kami tidak menganggap perbezaan 3% ketara). Tetapi dalam ujian dengan Photoshop 6.0.1 (skrip yang terdiri daripada satu set besar arahan dan penapis), kelembapan kelihatan apabila Hyper-Threading didayakan, walaupun CPU fizikal kedua menambah prestasi 12% dalam kes ini. Ini, sebenarnya, kes pertama apabila Hyper-Threading menyebabkan penurunan prestasi...

OpenGL profesional. Telah lama diketahui bahawa SPEC ViewPerf dan banyak aplikasi OpenGL lain sering menjadi perlahan pada sistem SMP.

OpenGL dan pemproses dwi: mengapa mereka bukan rakan

Banyak kali dalam artikel kami, kami telah menarik perhatian pembaca kepada fakta bahawa platform dwi-pemproses sangat jarang menunjukkan sebarang kelebihan ketara berbanding platform pemproses tunggal apabila melakukan ujian OpenGL profesional. Lebih-lebih lagi, selalunya terdapat kes apabila memasang pemproses kedua, sebaliknya, memburukkan prestasi sistem apabila memaparkan adegan tiga dimensi yang dinamik.

Sememangnya, bukan kami sahaja yang menyedari keanehan ini. Sesetengah penguji hanya mengelak fakta ini secara senyap - contohnya, membentangkan hasil perbandingan daripada ujian SPEC ViewPerf hanya untuk konfigurasi dwi-pemproses, sekali gus mengelakkan penjelasan tentang "mengapa sistem dwi-pemproses lebih perlahan?" Yang lain membuat semua jenis andaian hebat tentang koheren cache, keperluan untuk mengekalkannya, overhed yang timbul daripada ini, dsb. Dan atas sebab tertentu, tiada siapa yang terkejut bahawa, sebagai contoh, pemproses atas sebab tertentu tidak sabar untuk memantau koheren khususnya dalam pemaparan OpenGL bertingkap (dalam intipati "pengiraan", ia tidak jauh berbeza daripada tugas pengiraan lain).

Malah, penjelasan itu, pada pendapat kami, adalah lebih mudah. Seperti yang anda ketahui, aplikasi boleh berjalan pada dua pemproses lebih cepat daripada satu jika:

  • terdapat lebih daripada dua atau lebih urutan program secara serentak;
  • utas ini tidak mengganggu pelaksanaan satu sama lain - contohnya, mereka tidak bersaing untuk mendapatkan sumber yang dikongsi seperti storan luaran atau antara muka rangkaian.

Sekarang mari kita lihat secara ringkas rupa pemaparan OpenGL apabila dilakukan oleh dua urutan. Jika aplikasi, "melihat" dua pemproses, mencipta dua utas pemaparan OpenGL, maka bagi setiap satu daripadanya, mengikut peraturan OpenGL, konteks glnya sendiri dicipta. Sehubungan itu, setiap urutan menghasilkan konteks glnya sendiri. Tetapi masalahnya ialah untuk tetingkap di mana imej dipaparkan, hanya satu konteks gl boleh menjadi terkini pada bila-bila masa. Sehubungan itu, utas dalam kes ini hanya "satu demi satu" memaparkan imej yang dijana dalam tetingkap, secara bergilir-gilir menjadikan konteksnya sebagai konteks semasa. Tidak perlu dikatakan, "interleaving konteks" semacam ini boleh menjadi sangat mahal dari segi overhed?

Juga, sebagai contoh, kami akan menunjukkan graf penggunaan dua CPU dalam beberapa aplikasi yang memaparkan adegan OpenGL. Semua pengukuran telah dilakukan pada platform dengan konfigurasi berikut:

  • satu atau dua Intel Xeon 2.2 GHz (Hyper-Threading dilumpuhkan);
  • Memori RDRAM 512 MB;
  • Papan induk Supermicro P4DC6+;
  • Kad video ASUS V8200 Deluxe (NVidia GeForce3, 64 MB DDR SDRAM, pemacu Detonator 21.85);
  • Windows 2000 Professional SP2;
  • mod video 1280x1024x32 bpp, 85 Hz, Vsync dilumpuhkan.

Biru dan merah menunjukkan graf beban CPU 0 dan CPU 1, masing-masing. Garisan di tengah ialah graf Penggunaan CPU terakhir. Tiga graf sepadan dengan dua adegan daripada 3D Studio MAX 4.26 dan sebahagian daripada ujian SPEC ViewPerf (AWadvs-04).


Penggunaan CPU: animasi Studio 3D MAX 4.26 - Anibal (dengan manipulator).maks


Penggunaan CPU: Studio 3D Animasi MAX 4.26 - Rabbit.max


Penggunaan CPU: SPEC ViewPerf 6.1.2 - AWadvs-04

Gambar yang sama diulang dalam banyak aplikasi lain yang menggunakan OpenGL. Kedua-dua pemproses tidak mengganggu sama sekali, dan Penggunaan CPU keseluruhan berada pada tahap 50-60%. Pada masa yang sama, untuk sistem pemproses tunggal dalam semua kes ini, Penggunaan CPU dengan yakin kekal pada 100%.

Oleh itu, tidak menghairankan bahawa banyak aplikasi OpenGL tidak memecut sangat pada sistem dwi. Nah, hakikat bahawa mereka kadang-kadang melambatkan, pada pendapat kami, penjelasan yang sepenuhnya logik.

Kita boleh menyatakan bahawa dengan dua CPU logik penurunan prestasi adalah lebih ketara, yang boleh difahami: dua pemproses logik mengganggu satu sama lain dengan cara yang sama seperti dua pemproses fizikal. Tetapi prestasi keseluruhan mereka, secara semula jadi, ternyata lebih rendah, jadi apabila Hyper-Threading didayakan, ia berkurangan lebih daripada sekadar dua CPU fizikal sedang berjalan. Hasilnya boleh diramal dan kesimpulannya mudah: Hyper-Threading, seperti SMP "sebenar", adalah kontraindikasi untuk OpenGL.

aplikasi CAD. Kesimpulan sebelumnya disahkan oleh keputusan dua ujian CAD - SPECapc untuk SolidEdge V10 dan SPECapc untuk SolidWorks. Prestasi grafik ujian Hyper-Threading ini adalah serupa (walaupun sistem SMP untuk SolidEdge V10 mendapat markah lebih tinggi sedikit). Tetapi keputusan ujian CPU_Score yang memuatkan pemproses membuat anda berfikir: peningkatan 5-10% daripada SMP dan kelembapan 14-19% daripada Hyper-Threading.

Tetapi pada penghujung hari, Intel dengan jujur ​​mengakui bahawa Hyper-Threading boleh menyebabkan kemerosotan prestasi dalam beberapa kes - contohnya, apabila menggunakan gelung tunggu kosong. Kami hanya boleh menganggap bahawa ini adalah sebabnya (kajian terperinci tentang kod SolidEdge dan SolidWorks berada di luar skop artikel ini). Lagipun, semua orang tahu konservatisme pembangun aplikasi CAD, yang lebih suka kebolehpercayaan yang terbukti dan tidak tergesa-gesa untuk menulis semula kod dengan mengambil kira trend baharu dalam pengaturcaraan.

Merumuskan, atau "Perhatian, soalan yang betul"

Hyper-Threading berfungsi, tidak ada keraguan tentangnya. Sudah tentu, teknologi ini tidak universal: terdapat aplikasi yang mengalami Hyper-Threading, dan jika teknologi ini meluas, adalah wajar untuk mengubah suainya. Tetapi bukankah perkara yang sama berlaku pada zaman dahulu dengan MMX dan SSE dan terus berlaku dengan SSE2?..

Walau bagaimanapun, ini menimbulkan persoalan tentang kebolehgunaan teknologi ini kepada realiti kita. Kami akan segera membuang pilihan sistem pemproses tunggal pada Xeon dengan Hyper-Threading (atau membenarkannya hanya sebagai pilihan sementara, sementara menunggu pembelian pemproses kedua): walaupun peningkatan 30% dalam prestasi tidak mewajarkan harga dalam apa-apa cara - maka adalah lebih baik untuk membeli Pentium biasa 4. Bilangan CPU yang tinggal adalah dari dua dan ke atas.

Sekarang mari kita bayangkan bahawa kita membeli sistem Xeon dwi-pemproses (katakan, dengan Windows 2000/XP Professional). Dua CPU dipasang, Hyper-Threading didayakan, BIOS menemui sebanyak empat pemproses logik, kini kami akan berlepas... Berhenti. Tetapi berapa banyak pemproses yang akan dilihat oleh sistem pengendalian kita? Betul, dua. Hanya dua, kerana ia tidak direka untuk lebih. Ini akan menjadi dua pemproses fizikal, iaitu semuanya akan berfungsi sama seperti dengan Hyper-Threading dilumpuhkan - tidak lebih perlahan (dua CPU logik "tambahan" hanya akan berhenti), tetapi tidak juga lebih pantas (ditandai ujian tambahan, kami tidak membentangkan keputusan kerana ia benar-benar jelas). Hmmm, tidak begitu menyenangkan...

Apa yang tinggal? Nah, bukankah kita patut memasang Pelayan Lanjutan atau Pelayan .NET pada stesen kerja kita? Tidak, sistem akan memasang, mengenali keempat-empat pemproses logik dan akan berfungsi. Tetapi OS pelayan kelihatan agak pelik pada stesen kerja, secara sederhana (belum lagi aspek kewangan). Satu-satunya kes yang munasabah ialah apabila sistem Xeon dwi-pemproses kami akan bertindak sebagai pelayan (sekurang-kurangnya beberapa pemasang telah, tanpa teragak-agak, telah mula menghasilkan pelayan pada pemproses Xeon stesen kerja). Tetapi untuk stesen kerja dwi dengan OS yang sepadan, kebolehgunaan Hyper-Threading masih menjadi persoalan. Intel kini aktif menyokong pelesenan OS berdasarkan bilangan CPU fizikal, bukannya yang logik. Perbincangan masih berterusan, dan, secara amnya, banyak bergantung pada sama ada kita akan melihat OS stesen kerja dengan sokongan untuk empat pemproses.

Nah, dengan pelayan semuanya ternyata agak mudah. Sebagai contoh, Windows 2000 Advanced Server yang dipasang pada sistem Xeon dwi-pemproses dengan Hyper-Threading didayakan akan "melihat" empat pemproses logik dan akan berjalan dengan lancar padanya. Untuk menilai perkara yang boleh dilakukan oleh Hyper-Threading dalam sistem pelayan, kami membentangkan hasil daripada Makmal Perisian Mikropemproses Intel untuk sistem Xeon MP dwi-pemproses dan beberapa aplikasi pelayan Microsoft.

Peningkatan prestasi sebanyak 20-30% untuk pelayan dua pemproses "secara percuma" adalah lebih daripada menggoda (terutamanya berbanding dengan membeli sistem 4 pemproses "sebenar").

Jadi ternyata begitu masa ini Kebolehgunaan praktikal Hyper-Threading hanya boleh dilakukan dalam pelayan. Isu dengan stesen kerja bergantung pada keputusan mengenai pelesenan OS. Walaupun satu lagi aplikasi Hyper-Threading agak mungkin - jika pemproses desktop juga menerima sokongan untuk teknologi ini. Sebagai contoh (mari bayangkan) mengapa sistem dengan Pentium 4 dengan Sokongan Hyper-Threading, di mana Windows 2000/XP Professional dengan sokongan SMP dipasang?.. Walau bagaimanapun, tidak ada yang luar biasa tentang perkara ini: pembangun Intel yang bersemangat menjanjikan pengenalan meluas Hyper-Threading - daripada pelayan ke desktop dan sistem mudah alih.

Pemproses komputer pertama dengan berbilang teras muncul di pasaran pengguna pada pertengahan 2000-an, tetapi ramai pengguna masih tidak begitu memahami apa itu pemproses berbilang teras dan cara memahami ciri-cirinya.

Format video artikel "Kebenaran keseluruhan tentang pemproses berbilang teras"

Penjelasan ringkas tentang soalan "apa itu pemproses"

Mikropemproses adalah salah satu peranti utama dalam komputer. Nama rasmi kering ini sering dipendekkan kepada "pemproses" sahaja). Pemproses adalah litar mikro dengan keluasan yang setanding dengan kotak mancis. Jika anda suka, pemproses adalah seperti enjin dalam kereta. Bahagian yang paling penting, tetapi bukan satu-satunya. Kereta itu juga mempunyai roda, badan, dan pemain dengan lampu depan. Tetapi pemproses (seperti enjin kereta) yang menentukan kuasa "mesin".

Ramai orang memanggil pemproses sebagai unit sistem - "kotak" di dalamnya terdapat semua komponen PC, tetapi ini pada asasnya salah. Unit sistem ialah bekas komputer bersama semua bahagian komponennya - cakera keras, RAM dan banyak butiran lain.

Fungsi Pemproses - Kira. Tidak kira yang mana sebenarnya. Hakikatnya ialah semua kerja komputer adalah berdasarkan pengiraan aritmetik semata-mata. Penambahan, pendaraban, penolakan dan algebra lain - semua ini dilakukan oleh litar mikro yang dipanggil "pemproses". Dan hasil pengiraan sedemikian dipaparkan pada skrin dalam bentuk permainan, fail Word, atau hanya desktop.

Bahagian utama komputer yang melakukan pengiraan ialah apa itu pemproses.

Apakah itu teras pemproses dan berbilang teras

Dari awal abad pemproses, litar mikro ini adalah teras tunggal. Intinya, sebenarnya, pemproses itu sendiri. Bahagian utama dan utamanya. Pemproses juga mempunyai bahagian lain - katakan, "kaki"-sentuhan, "pendawaian elektrik" mikroskopik - tetapi ia adalah blok yang bertanggungjawab untuk pengiraan yang dipanggil teras pemproses. Apabila pemproses menjadi sangat kecil, jurutera memutuskan untuk menggabungkan beberapa teras dalam satu "kes" pemproses.

Jika anda membayangkan pemproses sebagai apartmen, maka terasnya adalah bilik besar di apartmen sedemikian. Pangsapuri satu bilik ialah satu teras pemproses (dewan bilik yang besar), dapur, bilik mandi, koridor... Pangsapuri dua bilik adalah seperti dua teras pemproses bersama-sama bilik lain. Terdapat pangsapuri tiga, empat, dan juga 12 bilik. Begitu juga dengan pemproses: di dalam satu kristal "pangsapuri" boleh terdapat beberapa teras "bilik".

Berbilang teras- Ini ialah pembahagian satu pemproses kepada beberapa blok berfungsi yang serupa. Bilangan blok ialah bilangan teras dalam satu pemproses.

Jenis pemproses berbilang teras

Terdapat salah tanggapan: "lebih banyak teras yang dimiliki oleh pemproses, lebih baik." Beginilah cara pemasar, yang dibayar untuk mencipta salah tanggapan seperti ini, cuba membentangkan perkara itu. Tugas mereka adalah untuk menjual pemproses murah, lebih-lebih lagi, pada harga yang lebih tinggi dan dalam kuantiti yang banyak. Tetapi sebenarnya, bilangan teras adalah jauh dari ciri utama pemproses.

Mari kita kembali ke analogi pemproses dan pangsapuri. Pangsapuri dua bilik lebih mahal, lebih selesa dan lebih berprestij daripada pangsapuri satu bilik. Tetapi hanya jika pangsapuri ini terletak di kawasan yang sama, dilengkapi dengan cara yang sama, dan pengubahsuaian mereka adalah serupa. Terdapat pemproses quad-core (atau 6-core) yang lemah yang jauh lebih lemah daripada pemproses dwi-teras. Tetapi sukar untuk mempercayainya: sudah tentu, ia adalah sihir bilangan yang besar 4 atau 6 melawan "beberapa" dua. Walau bagaimanapun, inilah yang berlaku sangat, sangat kerap. Ia kelihatan seperti pangsapuri empat bilik yang sama, tetapi dalam keadaan hancur, tanpa pengubahsuaian, di kawasan terpencil sepenuhnya - dan juga pada harga pangsapuri dua bilik yang mewah di tengah-tengah.

Berapa banyak teras yang terdapat di dalam pemproses?

Untuk komputer peribadi dan komputer riba, pemproses teras tunggal tidak dihasilkan dengan betul selama beberapa tahun, dan sangat jarang ditemui untuk dijual. Bilangan teras bermula dari dua. Empat teras - sebagai peraturan, ini adalah pemproses yang lebih mahal, tetapi ada pulangan daripada mereka. Terdapat juga pemproses 6 teras, yang sangat mahal dan kurang berguna dari segi praktikal. Beberapa tugas boleh mencapai peningkatan prestasi pada kristal besar ini.

Terdapat percubaan oleh AMD untuk mencipta pemproses 3 teras, tetapi ini sudah berlaku pada masa lalu. Ia ternyata agak baik, tetapi masa mereka telah berlalu.

By the way, syarikat AMD juga menghasilkan pemproses berbilang teras, tetapi, sebagai peraturan, mereka jauh lebih lemah daripada pesaing dari Intel. Benar, harga mereka jauh lebih rendah. Anda hanya perlu tahu bahawa 4 teras daripada AMD hampir selalu menjadi lebih lemah daripada 4 teras yang sama daripada Intel.

Sekarang anda tahu bahawa pemproses datang dengan 1, 2, 3, 4, 6 dan 12 teras. Pemproses teras tunggal dan 12 teras sangat jarang berlaku. Pemproses tiga teras sudah ketinggalan zaman. Pemproses enam teras sama ada sangat mahal (Intel) atau tidak begitu kuat (AMD) sehingga anda membayar lebih untuk nombor tersebut. Teras 2 dan 4 ialah peranti yang paling biasa dan praktikal, daripada yang paling lemah kepada yang paling berkuasa.

Kekerapan pemproses berbilang teras

Salah satu ciri pemproses komputer- kekerapan mereka. Megahertz yang sama (dan lebih kerap gigahertz). Kekerapan adalah ciri penting, tetapi jauh dari satu-satunya. Ya, mungkin bukan yang paling penting. Sebagai contoh, pemproses dwi-teras 2-gigahertz ialah tawaran yang lebih berkuasa daripada saudara teras tunggal 3-gigahertznya.

Adalah salah sama sekali untuk menganggap bahawa kekerapan pemproses adalah sama dengan kekerapan terasnya didarab dengan bilangan teras. Ringkasnya, pemproses 2-teras dengan frekuensi teras 2 GHz mempunyai jumlah kekerapan dalam keadaan tidak sama dengan 4 gigahertz! Malah konsep "frekuensi biasa" tidak wujud. Dalam kes ini, Kekerapan CPU sama tepat 2 GHz. Tiada pendaraban, penambahan atau operasi lain.

Dan sekali lagi kami akan "mengubah" pemproses menjadi pangsapuri. Jika ketinggian siling di setiap bilik ialah 3 meter, maka jumlah ketinggian apartmen akan tetap sama - tiga meter yang sama, dan bukan satu sentimeter lebih tinggi. Tidak kira berapa banyak bilik yang terdapat dalam apartmen sedemikian, ketinggian bilik ini tidak berubah. Juga kelajuan jam teras pemproses. Ia tidak bertambah dan tidak berganda.

Berbilang teras maya, atau Hyper-Threading

Terdapat juga teras pemproses maya. Teknologi Hyper-Threading dalam pemproses Intel menjadikan komputer "berfikir" bahawa sebenarnya terdapat 4 teras di dalam pemproses dwi-teras. Sangat serupa dengan bagaimana satu-satunya HDD dibahagikan kepada beberapa logik- pemacu tempatan C, D, E dan sebagainya.

hiperThreading adalah teknologi yang sangat berguna untuk beberapa tugas.. Kadang-kadang ia berlaku bahawa teras pemproses hanya separuh digunakan, dan baki transistor dalam komposisinya terbiar. Jurutera menghasilkan cara untuk menjadikan "pemalas" ini juga berfungsi, dengan membahagikan setiap teras pemproses fizikal kepada dua bahagian "maya". Seolah-olah sebuah bilik yang agak besar dibahagi dua oleh partition.

Adakah ini masuk akal praktikal? helah dengan teras maya ? Selalunya - ya, walaupun semuanya bergantung pada tugas tertentu. Nampaknya terdapat lebih banyak bilik (dan yang paling penting, ia digunakan dengan lebih rasional), tetapi kawasan bilik tidak berubah. Di pejabat, sekatan sedemikian sangat berguna, dan di beberapa pangsapuri kediaman juga. Dalam kes lain, tidak ada gunanya membahagikan bilik (membahagikan teras pemproses kepada dua yang maya).

Perhatikan bahawa yang paling mahal dan pemproses yang berkuasa kelasterasi7 wajib dilengkapihiperPengisian benang. Mereka mempunyai 4 teras fizikal dan 8 teras maya. Ternyata 8 utas pengiraan berfungsi serentak pada satu pemproses. Pemproses kelas Intel yang lebih murah tetapi juga berkuasa terasi5 mengandungi empat teras, tetapi Hyper Threading tidak berfungsi di sana. Ternyata Core i5 berfungsi dengan 4 urutan pengiraan.

Pemproses terasi3- "purata" biasa, baik dari segi harga dan prestasi. Mereka mempunyai dua teras dan tiada petunjuk Hyper-Threading. Secara keseluruhannya ternyata begitu terasi3 hanya dua utas pengiraan. Perkara yang sama berlaku untuk kristal bajet terus terang Pentium danCeleron. Dua teras, tiada hyper-threading = dua utas.

Adakah komputer memerlukan banyak teras? Berapa banyak teras yang diperlukan oleh pemproses?

Semua pemproses moden cukup berkuasa untuk tugas biasa. Melayari Internet, surat-menyurat di rangkaian sosial dan melalui e-mel, tugas pejabat Word-PowerPoint-Excel: Atom lemah, bajet Celeron dan Pentium sesuai untuk kerja ini, apatah lagi Core i3 yang lebih berkuasa. Dua teras adalah lebih daripada cukup untuk kerja biasa. Pemproses dengan jumlah yang besar teras tidak akan membawa peningkatan yang ketara dalam kelajuan.

Untuk permainan, anda harus memberi perhatian kepada pemprosesterasi3 ataui5. Sebaliknya, prestasi permainan akan bergantung bukan pada pemproses, tetapi pada kad video. Jarang sekali permainan memerlukan kuasa penuh Core i7. Oleh itu, dipercayai bahawa permainan memerlukan tidak lebih daripada empat teras pemproses, dan lebih kerap dua teras adalah sesuai.

Untuk kerja serius seperti istimewa program kejuruteraan, pengekodan video dan tugasan intensif sumber lain Peralatan yang benar-benar produktif diperlukan. Selalunya, bukan sahaja fizikal, tetapi juga teras pemproses maya digunakan di sini. Lebih banyak benang pengkomputeran, lebih baik. Dan tidak kira berapa kos pemproses sedemikian: untuk profesional, harganya tidak begitu penting.

Adakah terdapat sebarang faedah kepada pemproses berbilang teras?

Sudah Tentu Ya. Pada masa yang sama, komputer terlibat dalam beberapa tugas - sekurang-kurangnya menjalankan Windows (dengan cara ini, ini adalah beratus-ratus tugas yang berbeza) dan, pada masa yang sama, memainkan filem. Bermain muzik dan melayari Internet. Kerja penyunting teks dan muzik yang disertakan. Dua teras pemproses - dan ini, sebenarnya, dua pemproses - akan mengatasi tugas yang berbeza lebih cepat daripada satu. Dua teras akan menjadikan ini lebih pantas. Empat lebih cepat daripada dua.

Pada tahun-tahun pertama kewujudan teknologi berbilang teras, tidak semua program dapat berfungsi walaupun dengan dua teras pemproses. Menjelang 2014, sebahagian besar aplikasi memahami dan boleh memanfaatkan berbilang teras. Kelajuan pemprosesan tugas pada pemproses dwi-teras jarang sekali ganda, tetapi hampir selalu terdapat peningkatan prestasi.

Oleh itu, mitos yang berakar umbi bahawa program tidak boleh menggunakan berbilang teras adalah maklumat lapuk. Suatu ketika dahulu keadaan ini memang berlaku, hari ini keadaan telah bertambah baik secara mendadak. Faedah berbilang teras tidak dapat dinafikan, itu fakta.

Apabila pemproses mempunyai lebih sedikit teras, ia lebih baik

Anda tidak sepatutnya membeli pemproses menggunakan formula yang salah "lebih banyak teras, lebih baik." Ini adalah salah. Pertama, pemproses 4, 6 dan 8 teras jauh lebih mahal daripada rakan sejawatan dwi teras mereka. Peningkatan harga yang ketara tidak selalu wajar dari sudut prestasi. Sebagai contoh, jika pemproses 8-teras ternyata hanya 10% lebih pantas daripada CPU dengan teras yang lebih sedikit, tetapi 2 kali lebih mahal, maka ia akan menjadi sukar untuk mewajarkan pembelian sedemikian.

Kedua, lebih banyak teras pemproses mempunyai, lebih rakus ia dari segi penggunaan tenaga. Tidak ada gunanya membeli komputer riba yang jauh lebih mahal dengan Core i7 4-teras (8-benang) jika komputer riba hanya akan mengendalikan pemprosesan fail teks, melayari Internet dan sebagainya. Tidak akan ada perbezaan dengan teras dwi (4 utas) Core i5, dan Core i3 klasik dengan hanya dua utas pengkomputeran tidak akan kalah dengan "rakan sekerja" yang lebih terkemuka. Dan dari bateri seperti ini komputer riba yang berkuasa akan berfungsi lebih kurang daripada Core i3 yang menjimatkan dan tidak menuntut.

Pemproses berbilang teras dalam telefon mudah alih dan tablet

Fesyen untuk berbilang teras pengkomputeran dalam satu pemproses juga digunakan pada peranti mudah alih. Telefon pintar dan tablet dengan sejumlah besar teras hampir tidak pernah menggunakan keupayaan penuh mikropemproses mereka. Komputer mudah alih dwi-teras kadangkala sebenarnya berfungsi lebih pantas sedikit, tetapi 4, dan lebih-lebih lagi 8 teras adalah terlalu berlebihan. Bateri digunakan secara tidak betul, dan peranti pengkomputeran yang berkuasa hanya terbiar. Kesimpulan - pemproses berbilang teras dalam telefon, telefon pintar dan tablet hanyalah satu penghormatan kepada pemasaran, dan bukan keperluan mendesak. Komputer adalah peranti yang lebih menuntut daripada telefon. Mereka benar-benar memerlukan dua teras pemproses. Empat tidak akan sakit. 6 dan 8 - lebihan dalam tugas biasa dan juga dalam permainan.

Bagaimana untuk memilih pemproses berbilang teras dan tidak membuat kesilapan?

Bahagian praktikal artikel hari ini adalah relevan untuk 2014. Tidak mungkin apa-apa akan berubah dengan ketara pada tahun-tahun akan datang. Kami hanya akan bercakap tentang pemproses yang dikeluarkan oleh Intel. Ya, AMD menawarkan penyelesaian yang baik, tetapi ia kurang popular dan lebih sukar untuk difahami.

Ambil perhatian bahawa jadual adalah berdasarkan pemproses dari 2012-2014. Sampel lama mempunyai ciri yang berbeza. Kami juga tidak menyebut pilihan CPU yang jarang berlaku, contohnya, Celeron teras tunggal (ada hari ini, tetapi ini adalah pilihan atipikal yang hampir tidak diwakili di pasaran). Anda tidak seharusnya memilih pemproses semata-mata mengikut bilangan teras di dalamnya - terdapat yang lain, lebih banyak lagi ciri-ciri penting. Jadual hanya akan memudahkan untuk memilih pemproses berbilang teras, tetapi model tertentu (dan terdapat berpuluh-puluh daripada mereka dalam setiap kelas) harus dibeli hanya selepas membiasakan diri dengan teliti dengan parameter mereka: kekerapan, pelesapan haba, penjanaan, cache saiz dan ciri-ciri lain.

CPU Bilangan Teras Benang pengiraan Aplikasi Biasa
Atom 1-2 1-4 Komputer dan netbook berkuasa rendah. Matlamat pemproses Atom adalah untuk meminimumkan penggunaan kuasa. Produktiviti mereka adalah minimum.
Celeron 2 2 Pemproses termurah untuk desktop dan komputer riba. Prestasinya mencukupi untuk tugasan pejabat, tetapi ini bukan CPU permainan sama sekali.
Pentium 2 2 Pemproses Intel adalah sama murah dan berprestasi rendah seperti Celeron. Pilihan yang sangat baik untuk komputer pejabat. Pentium dilengkapi dengan cache yang lebih besar sedikit, dan, kadangkala, prestasi meningkat sedikit berbanding Celeron
Teras i3 2 4 Dua teras yang cukup kuat, setiap satunya dibahagikan kepada dua "pemproses" maya (Hyper-Threading). Ini adalah CPU yang cukup berkuasa pada harga yang tidak terlalu tinggi. Pilihan yang baik untuk komputer rumah atau pejabat berkuasa tanpa tuntutan khusus terhadap prestasi.
Teras i5 4 4 Pemproses Core i5 4-teras sepenuhnya agak mahal. Prestasi mereka kurang hanya dalam tugas yang paling mencabar.
Teras i7 4-6 8-12 Pemproses Intel yang paling berkuasa, tetapi sangat mahal. Sebagai peraturan, mereka jarang lebih pantas daripada Core i5, dan hanya dalam beberapa program. Tiada alternatif kepada mereka.

Ringkasan ringkas artikel "Kebenaran keseluruhan tentang pemproses berbilang teras." Daripada nota

  • teras CPU- miliknya komponen. Sebenarnya, pemproses bebas di dalam kes itu. Pemproses dwi-teras - dua pemproses di dalam satu.
  • Berbilang teras setanding dengan bilangan bilik di dalam apartmen. Pangsapuri dua bilik adalah lebih baik daripada pangsapuri satu bilik, tetapi hanya dengan ciri-ciri lain yang sama (lokasi pangsapuri, keadaan, kawasan, ketinggian siling).
  • Kenyataan bahawa lebih banyak teras pemproses mempunyai, lebih baik iamuslihat pemasaran, peraturan yang salah sama sekali. Lagipun, sebuah apartmen dipilih bukan sahaja oleh bilangan bilik, tetapi juga oleh lokasi, pengubahsuaian dan parameter lain. Perkara yang sama berlaku untuk berbilang teras di dalam pemproses.
  • wujud "maya" berbilang teras— Teknologi Hyper-Threading. Terima kasih kepada teknologi ini, setiap teras "fizikal" dibahagikan kepada dua teras "maya". Ternyata pemproses 2 teras dengan Hyper-Threading hanya mempunyai dua teras sebenar, tetapi pemproses ini memproses 4 utas pengiraan secara serentak. Ini adalah ciri yang sangat berguna, tetapi pemproses 4-benang tidak boleh dianggap sebagai pemproses empat teras.
  • Untuk pemproses desktop Intel: Celeron - 2 teras dan 2 utas. Pentium - 2 teras, 2 benang. Teras i3 - 2 teras, 4 utas. Teras i5 - 4 teras, 4 utas. Teras i7 - 4 teras, 8 utas. Komputer riba (mudah alih) CPU Intel mempunyai bilangan teras/benang yang berbeza.
  • Untuk komputer mudah alih Kecekapan tenaga (dalam amalan, hayat bateri) selalunya lebih penting daripada bilangan teras.
  • Tutorial

Dalam artikel ini saya akan cuba menerangkan terminologi yang digunakan untuk menerangkan sistem yang mampu melaksanakan beberapa program secara selari, iaitu multi-core, multi-processor, multi-threaded. Jenis yang berbeza keselarian dalam CPU IA-32 muncul masa yang berbeza dan dalam susunan yang agak tidak konsisten. Agak mudah untuk keliru dalam semua ini, terutamanya memandangkan sistem pengendalian berhati-hati menyembunyikan butiran daripada program aplikasi yang kurang canggih.

Tujuan artikel adalah untuk menunjukkan bahawa dengan semua kepelbagaian kemungkinan konfigurasi berbilang pemproses, berbilang teras dan sistem berbilang benang untuk program yang dijalankan pada mereka, peluang dicipta untuk kedua-dua abstraksi (mengabaikan perbezaan) dan mengambil kira spesifik (keupayaan untuk mengetahui konfigurasi secara pemrograman).

Amaran tentang tanda ®, ™ dalam artikel

Komen saya menerangkan sebab pekerja syarikat harus menggunakan notis hak cipta dalam komunikasi awam. Dalam artikel ini saya terpaksa menggunakannya dengan kerap.

CPU

Sudah tentu, istilah tertua, paling kerap digunakan dan kontroversi ialah "pemproses".

DALAM dunia moden pemproses ialah apa yang kita beli dalam kotak Runcit yang cantik atau pakej OEM yang tidak begitu bagus. Entiti yang tidak boleh dibahagikan dimasukkan ke dalam soket pada papan induk. Walaupun tidak ada penyambung dan ia tidak boleh ditanggalkan, iaitu, jika ia dipateri dengan ketat, ia adalah satu cip.

Sistem mudah alih (telefon, tablet, komputer riba) dan kebanyakan desktop mempunyai satu pemproses. Stesen kerja dan pelayan kadangkala mempunyai dua atau lebih pemproses pada satu papan induk.

Menyokong berbilang CPU dalam satu sistem memerlukan banyak perubahan reka bentuk. Sekurang-kurangnya, adalah perlu untuk menyediakannya sambungan fizikal(menyediakan berbilang soket pada papan induk), menyelesaikan isu pengenalan pemproses (lihat kemudian dalam artikel ini, serta nota saya sebelum ini), penyelarasan akses memori dan penghantaran gangguan (pengawal gangguan mesti dapat menghalakan gangguan kepada berbilang pemproses) dan, sudah tentu, sokongan daripada sistem pengendalian. Malangnya, saya tidak dapat mencari sebutan dokumentari tentang penciptaan sistem berbilang pemproses pertama pada pemproses Intel, tetapi Wikipedia mendakwa bahawa Sistem Komputer Sequent membekalkannya pada tahun 1987, menggunakan pemproses Intel 80386. Sokongan untuk berbilang cip dalam satu sistem semakin meluas , bermula dengan Intel® Pentium.

Sekiranya terdapat beberapa pemproses, maka setiap daripada mereka mempunyai penyambung sendiri di papan. Setiap daripada mereka mempunyai salinan bebas lengkap semua sumber, seperti daftar, peranti pelaksanaan, cache. Mereka berkongsi memori yang sama - RAM. Memori boleh disambungkan kepada mereka dalam pelbagai cara dan bukan remeh, tetapi ini adalah cerita yang berasingan di luar skop artikel ini. Perkara penting ialah dalam apa jua keadaan, ilusi memori kongsi homogen yang boleh diakses daripada semua pemproses yang termasuk dalam sistem harus dicipta untuk program boleh laku.


Bersedia untuk berlepas! Papan Desktop Intel® D5400XS

teras

Dari segi sejarah, berbilang teras dalam Intel IA-32 muncul lebih lewat daripada Intel® HyperThreading, tetapi dalam hierarki logik ia datang seterusnya.

Nampaknya jika sistem mempunyai lebih banyak pemproses, maka prestasinya lebih tinggi (pada tugas yang boleh menggunakan semua sumber). Walau bagaimanapun, jika kos komunikasi antara mereka terlalu tinggi, maka semua keuntungan daripada keselarian dibunuh oleh kelewatan yang lama untuk pemindahan data biasa. Inilah yang diperhatikan dalam sistem berbilang pemproses - secara fizikal dan logik mereka sangat jauh antara satu sama lain. Untuk komunikasi berkesan Dalam keadaan sedemikian, adalah perlu untuk menghasilkan bas khusus, seperti Intel® QuickPath Interconnect. Penggunaan tenaga, saiz dan harga penyelesaian akhir, tentu saja, tidak dikurangkan oleh semua ini. Penyepaduan tinggi komponen harus datang untuk menyelamatkan - litar yang melaksanakan bahagian program selari, anda perlu menyeretnya lebih dekat antara satu sama lain, sebaik-baiknya pada satu kristal. Dalam erti kata lain, satu pemproses harus mengatur beberapa teras, sama antara satu sama lain dalam segala hal, tetapi bekerja secara bebas.

Pemproses IA-32 berbilang teras pertama daripada Intel telah diperkenalkan pada tahun 2005. Sejak itu, purata bilangan teras dalam pelayan, desktop, dan kini platform mudah alih telah terus berkembang.

Tidak seperti dua pemproses teras tunggal pada sistem yang sama berkongsi memori sahaja, dua teras juga boleh berkongsi cache dan sumber berkaitan memori lain. Selalunya, cache tahap pertama kekal peribadi (setiap teras mempunyai terasnya sendiri), manakala tahap kedua dan ketiga boleh sama ada dikongsi atau berasingan. Organisasi sistem ini membolehkan anda mengurangkan kelewatan penghantaran data antara teras bersebelahan, terutamanya jika mereka sedang menjalankan tugas biasa.


Mikrograf pemproses Intel empat teras dengan nama kod Nehalem. Nukleus individu diserlahkan, cache kongsi tahap ketiga, serta pautan QPI kepada pemproses lain dan pengawal memori biasa.

Hyperthread

Sehingga kira-kira 2002, satu-satunya cara untuk mendapatkan sistem IA-32 yang mampu menjalankan dua atau lebih program secara selari adalah dengan menggunakan sistem multipemproses. Intel® Pentium® 4 serta barisan Xeon yang diberi nama kod Foster (Netburst) diperkenalkan Teknologi baru- hyperthreads atau hyperthreads, - Intel® HyperThreading (selepas ini HT).

Tidak ada yang baru di bawah matahari. HT ialah kes istimewa apa dalam literatur dipanggil multithreading serentak (SMT). Tidak seperti teras "sebenar", yang merupakan salinan lengkap dan bebas, dalam kes HT, hanya sebahagian daripada nod dalaman, yang bertanggungjawab terutamanya untuk menyimpan keadaan seni bina - daftar, diduplikasi dalam satu pemproses. Nod eksekutif yang bertanggungjawab untuk mengatur dan memproses data kekal tunggal, dan pada bila-bila masa digunakan oleh paling banyak satu daripada benang. Seperti teras, hyperthread berkongsi cache, tetapi dari tahap mana bergantung pada sistem tertentu.

Saya tidak akan cuba menerangkan semua kebaikan dan keburukan reka bentuk SMT secara umum dan reka bentuk HT khususnya. Pembaca yang berminat mungkin mendapati agak perbincangan terperinci teknologi dalam banyak sumber, dan, sudah tentu, di Wikipedia. Walau bagaimanapun, saya akan perhatikan perkara penting berikut, yang menerangkan sekatan semasa ke atas bilangan hyperthread dalam produk sebenar.

Sekatan benang
Dalam kes apakah kehadiran berbilang teras "tidak adil" dalam bentuk HT wajar? Jika satu utas aplikasi tidak dapat memuatkan semua nod pelaksanaan di dalam kernel, maka mereka boleh "dipinjamkan" ke utas lain. Ini adalah tipikal untuk aplikasi yang mempunyai kesesakan bukan dalam pengiraan, tetapi dalam akses data, iaitu, sering menjana cache miss dan perlu menunggu data dihantar dari memori. Pada masa ini, teras tanpa HT akan dipaksa untuk melahu. Kehadiran HT membolehkan anda menukar nod pelaksana bebas dengan cepat kepada keadaan seni bina yang lain (kerana ia diduakan) dan melaksanakan arahannya. Ini adalah kes khas teknik yang dipanggil kependaman bersembunyi, apabila satu operasi yang lama, semasa itu sumber yang berguna terbiar, bertopengkan oleh pelaksanaan selari tugas lain. Jika aplikasi sudah mempunyai tahap penggunaan sumber kernel yang tinggi, kehadiran hyperthreads tidak akan membenarkan pecutan - kernel "jujur" diperlukan di sini.

Senario biasa untuk aplikasi desktop dan pelayan yang direka bentuk untuk seni bina mesin tujuan umum mempunyai potensi untuk keselarian dilaksanakan menggunakan HT. Walau bagaimanapun, potensi ini cepat digunakan. Mungkin atas sebab ini, pada hampir semua pemproses IA-32 bilangan hyperthread perkakasan tidak melebihi dua. Dalam senario biasa, keuntungan daripada menggunakan tiga atau lebih hyperthread adalah kecil, tetapi kerugian dalam saiz cetakan, penggunaan kuasa dan kosnya adalah ketara.

Situasi berbeza diperhatikan dalam tugas biasa yang dilakukan pada pemecut video. Oleh itu, seni bina ini dicirikan oleh penggunaan teknologi SMT dengan bilangan benang yang lebih besar. Oleh kerana pemproses bersama Intel® Xeon Phi (diperkenalkan pada 2010) secara ideologi dan genealogi agak hampir dengan kad video, mereka mungkin mempunyai empat hyperthreading pada setiap teras - konfigurasi unik untuk IA-32.

Pemproses logik

Daripada tiga "peringkat" selari (pemproses, teras, hyperthreads) yang diterangkan, sesetengah atau malah semua mungkin tiada dalam sistem tertentu. Ini dipengaruhi Tetapan BIOS(berbilang teras dan berbilang benang dilumpuhkan secara berasingan), ciri seni bina mikro (contohnya, HT tidak hadir dalam Intel® Core™ Duo, tetapi dikembalikan dengan keluaran Nehalem) dan peristiwa sistem (pelayan berbilang pemproses boleh mematikan pemproses yang gagal jika kerosakan dikesan dan terus "terbang" pada yang selebihnya). Bagaimanakah zoo berbilang peringkat konkurensi ini boleh dilihat oleh sistem pengendalian dan, akhirnya, kepada aplikasi aplikasi?

Selanjutnya, untuk kemudahan, kami menyatakan bilangan pemproses, teras dan benang dalam sistem tertentu sebanyak tiga ( x, y, z), Di mana x ialah bilangan pemproses, y- bilangan teras dalam setiap pemproses, dan z- bilangan hyperthread dalam setiap teras. Mulai sekarang saya akan memanggil mereka bertiga topologi- istilah mapan yang mempunyai sedikit kaitan dengan cabang matematik. Kerja hlm = xyz mentakrifkan bilangan entiti yang dipanggil pemproses logik sistem. Ia mentakrifkan jumlah bilangan konteks bebas proses aplikasi pada sistem memori yang dikongsi, yang dilaksanakan secara selari, yang terpaksa diambil kira oleh sistem pengendalian. Saya katakan "terpaksa" kerana ia tidak dapat mengawal perintah pelaksanaan dua proses pada pemproses logik yang berbeza. Ini juga terpakai kepada hyperthread: walaupun ia dijalankan "berurutan" pada teras yang sama, susunan khusus ditentukan oleh perkakasan dan tidak boleh diperhatikan atau dikawal oleh program.

Selalunya, sistem pengendalian menyembunyikan daripada aplikasi akhir ciri-ciri topologi fizikal sistem di mana ia dijalankan. Sebagai contoh, tiga topologi berikut: (2, 1, 1), (1, 2, 1) dan (1, 1, 2) - OS akan mewakili dua pemproses logik, walaupun yang pertama mempunyai dua pemproses, kedua - dua teras, dan yang ketiga - hanya dua benang.


Pengurus Tugas Windows menunjukkan 8 pemproses logik; tetapi berapa banyak ia dalam pemproses, teras dan hyperthread?


Bahagian atas Linux menunjukkan 4 pemproses logik.

Ini agak mudah untuk pencipta aplikasi permohonan- mereka tidak perlu berurusan dengan ciri peralatan yang selalunya tidak penting bagi mereka.

Takrif perisian topologi

Sudah tentu, mengabstraksikan topologi ke dalam satu bilangan pemproses logik dalam beberapa kes mewujudkan alasan yang mencukupi untuk kekeliruan dan salah faham (dalam pertikaian Internet yang hangat). Aplikasi pengkomputeran yang ingin memerah prestasi maksimum daripada perkakasan memerlukan kawalan terperinci ke atas tempat benang mereka akan diletakkan: lebih dekat antara satu sama lain pada hyperthread bersebelahan atau, sebaliknya, lebih jauh pada pemproses yang berbeza. Kelajuan komunikasi antara pemproses logik dalam teras atau pemproses yang sama jauh lebih tinggi daripada kelajuan pemindahan data antara pemproses. Kemungkinan heterogeniti dalam organisasi memori kerja juga merumitkan gambar.

Maklumat tentang topologi sistem secara keseluruhan, serta kedudukan setiap pemproses logik dalam IA-32, tersedia menggunakan arahan CPUID. Sejak kemunculan sistem berbilang pemproses yang pertama, skema pengenalan pemproses logik telah diperluaskan beberapa kali. Sehingga kini, bahagiannya terkandung dalam helaian 1, 4 dan 11 CPUID. Helaian yang mana untuk dilihat boleh ditentukan daripada carta alir berikut yang diambil daripada artikel:

Saya tidak akan membosankan anda dengan semua butiran di sini. bahagian individu algoritma ini. Jika ada minat, bahagian seterusnya artikel ini boleh dikhaskan untuk ini. Saya akan merujuk pembaca yang berminat, yang meneliti isu ini dengan seberapa terperinci yang mungkin. Di sini saya akan menerangkan secara ringkas apa itu APIC dan bagaimana ia berkaitan dengan topologi. Seterusnya, pertimbangkan untuk bekerja dengan helaian 0xB (sebelas dalam perpuluhan), yang dihidupkan pada masa ini ialah perkataan terakhir dalam "pembinaan apico".

ID APIC
APIC setempat (pengawal gangguan boleh atur cara lanjutan) ialah peranti (kini sebahagian daripada pemproses) yang bertanggungjawab untuk mengendalikan gangguan yang datang kepada pemproses logik tertentu. Setiap pemproses logik mempunyai APIC sendiri. Dan setiap daripada mereka dalam sistem mesti mempunyai nilai ID APIC yang unik. Nombor ini digunakan oleh pengawal sampukan untuk menangani semasa menghantar mesej, dan oleh orang lain (contohnya, sistem pengendalian) untuk mengenal pasti pemproses logik. Spesifikasi untuk pengawal gangguan ini telah berkembang daripada Cip Intel 8259 PIC melalui Dwi PIC, APIC dan xAPIC kepada x2APIC.

Pada masa ini, lebar nombor yang disimpan dalam ID APIC telah mencapai 32 bit penuh, walaupun pada masa lalu ia terhad kepada 16, dan lebih awal - hanya 8 bit. Hari ini, tinggalan zaman dahulu bertaburan di seluruh CPUID, tetapi CPUID.0xB.EDX mengembalikan semua 32 bit ID APIC. Pada setiap pemproses logik yang melaksanakan arahan CPUID secara bebas, nilai yang berbeza akan dikembalikan.

Menjelaskan hubungan kekeluargaan
Nilai APIC ID itu sendiri tidak memberitahu anda apa-apa tentang topologi. Untuk mengetahui dua pemproses logik yang terletak di dalam satu pemproses fizikal (iaitu, ia adalah hyperthreads "bersaudara"), yang mana dua berada di dalam pemproses yang sama, dan yang mana pemproses yang sama sekali berbeza, anda perlu membandingkan nilai APIC ID mereka. Bergantung pada tahap hubungan, beberapa bit mereka akan bertepatan. Maklumat ini terkandung dalam subsenarai CPUID.0xB, yang dikodkan dalam ECX. Masing-masing menerangkan keadaan medan bit salah satu tahap topologi dalam EAX (lebih tepat lagi, bilangan bit yang perlu dianjakkan ke kanan dalam ID APIC untuk mengalih keluar tahap topologi yang lebih rendah), serta jenis tahap ini - hyperthread, teras atau pemproses - dalam ECX.

Pemproses logik yang terletak di dalam teras yang sama akan mempunyai semua bit ID APIC yang sama, kecuali yang dimiliki oleh medan SMT. Untuk pemproses logik yang terletak dalam pemproses yang sama, semua bit kecuali medan Teras dan SMT. Memandangkan bilangan subsheet untuk CPUID.0xB boleh berkembang, skim ini akan membolehkan kami menyokong penerangan topologi dengan bilangan tahap yang lebih besar, jika keperluan timbul pada masa hadapan. Selain itu, adalah mungkin untuk memperkenalkan tahap pertengahan antara yang sedia ada.

Akibat penting daripada organisasi skim ini ialah mungkin terdapat "lubang" dalam set semua ID APIC semua pemproses logik dalam sistem, i.e. mereka tidak akan pergi secara berurutan. Sebagai contoh, dalam pemproses berbilang teras dengan HT dimatikan, semua ID APIC mungkin menjadi genap, kerana bit paling tidak ketara yang bertanggungjawab untuk pengekodan nombor hyperthread akan sentiasa menjadi sifar.

Saya perhatikan bahawa CPUID.0xB bukanlah satu-satunya sumber maklumat tentang pemproses logik yang tersedia untuk sistem pengendalian. Senarai semua pemproses yang tersedia untuknya, bersama-sama dengan nilai APIC ID mereka, dikodkan dalam jadual MADT ACPI.

Sistem pengendalian dan topologi

Sistem pengendalian menyediakan maklumat tentang topologi pemproses logik kepada aplikasi menggunakan antara muka mereka sendiri.

Di Linux, maklumat topologi terkandung dalam pseudofile /proc/cpuinfo serta output arahan dmidecode. Dalam contoh di bawah, saya menapis kandungan cpuinfo pada beberapa sistem quad-core tanpa HT, meninggalkan hanya entri yang berkaitan dengan topologi:

Teks tersembunyi

ggg@shadowbox:~$ cat /proc/cpuinfo |grep "pemproses\|fizikal\ id\|adik-beradik\|teras\|teras\|apicid" pemproses: 0 id fizikal: 0 adik-beradik: 4 id teras: 0 teras cpu: 2 apicid: 0 apicid awal: 0 pemproses: 1 id fizikal: 0 adik beradik: 4 id teras: 0 teras cpu: 2 apicid: 1 apicid awal: 1 pemproses: 2 id fizikal: 0 adik beradik: 4 id teras: 1 teras cpu: 2 apicid: 2 apicid awal: 2 pemproses: 3 id fizikal: 0 adik beradik: 4 id teras: 1 teras cpu: 2 apicid: 3 apicid awal: 3

Pada FreeBSD, topologi dilaporkan melalui mekanisme sysctl dalam pembolehubah kern.sched.topology_spec sebagai XML:

Teks tersembunyi

pengguna@hos:~$ sysctl kern.sched.topology_spec kern.sched.topology_spec: 0, 1, 2, 3, 4, 5, 6, 7 0, 1, 2, 3, 4, 5, 6, 7 0, 1 kumpulan THREADkumpulan SMT 2, 3 kumpulan THREADkumpulan SMT 4, 5 kumpulan THREADkumpulan SMT 6, 7 kumpulan THREADkumpulan SMT

Dalam MS Windows 8, maklumat topologi boleh dilihat dalam Pengurus Tugas.

Pemproses berbilang teras ialah pemproses pusat yang mengandungi lebih daripada dua teras pengkomputeran. Teras sedemikian boleh didapati sama ada dalam satu kes atau pada satu cip pemproses.

Apakah pemproses berbilang teras?

Selalunya, pemproses berbilang teras bermaksud pemproses pusat di mana beberapa teras pengkomputeran disepadukan ke dalam satu cip (iaitu, ia terletak pada cip silikon tunggal).

Biasanya, kelajuan jam dalam pemproses berbilang teras sengaja lebih rendah. Ini dilakukan untuk mengurangkan penggunaan kuasa sambil mengekalkan prestasi pemproses yang diperlukan. Setiap teras adalah mikropemproses sepenuhnya, yang dicirikan oleh ciri-ciri semua pemproses moden- ia menggunakan cache berbilang peringkat, menyokong pelaksanaan kod luar pesanan dan arahan vektor.

Hyper-threading

Teras dalam pemproses berbilang teras boleh menyokong teknologi SMT, yang membolehkan anda melaksanakan berbilang benang pengiraan dan mencipta beberapa pemproses logik berdasarkan setiap teras. Pada pemproses yang dihasilkan oleh Intel, teknologi ini dipanggil "Hyper-threading". Terima kasih kepadanya, anda boleh menggandakan bilangan pemproses logik berbanding bilangan cip fizikal. Dalam mikropemproses yang menyokong teknologi ini, setiap pemproses fizikal mampu mengekalkan keadaan dua benang secara serentak. Untuk sistem pengendalian, ini akan kelihatan seperti mempunyai dua pemproses logik. Jika terdapat jeda dalam kerja salah seorang daripada mereka (contohnya, ia sedang menunggu data diterima daripada ingatan), pemproses logik yang lain mula melaksanakan utasnya sendiri.

Jenis pemproses berbilang teras

Pemproses berbilang teras dibahagikan kepada beberapa jenis. Mereka mungkin atau mungkin tidak menyokong penggunaan cache yang dikongsi. Komunikasi antara teras dilaksanakan berdasarkan prinsip menggunakan bas kongsi, rangkaian pada pautan titik ke titik, rangkaian dengan suis atau menggunakan cache kongsi.

Prinsip operasi

Kebanyakan pemproses berbilang teras moden berfungsi mengikut skema berikut. Jika aplikasi yang sedang berjalan menyokong multithreading, ia boleh memaksa pemproses untuk melaksanakan berbilang tugas pada masa yang sama. Contohnya, jika komputer anda menggunakan pemproses 4 teras dengan kekerapan jam 1.8 GHz, program ini boleh "memuatkan" semua empat teras dengan berfungsi serentak, manakala jumlah kekerapan pemproses ialah 7.2 GHz. Jika beberapa program berjalan serentak, setiap satu daripadanya boleh menggunakan sebahagian daripada teras pemproses, yang juga membawa kepada peningkatan dalam prestasi komputer.

Banyak sistem pengendalian menyokong multithreading, jadi menggunakan pemproses berbilang teras boleh mempercepatkan komputer anda walaupun dalam aplikasi yang tidak menyokong multithreading. Jika kami menganggap operasi hanya satu aplikasi, maka penggunaan pemproses berbilang teras akan dibenarkan hanya jika aplikasi ini dioptimumkan untuk multithreading. Jika tidak, kelajuan pemproses berbilang teras tidak akan berbeza daripada kelajuan pemproses biasa, dan kadangkala ia akan berfungsi lebih perlahan.