Sistem 32-bit vs. 64-bit


224

Apa perbedaan antara sistem 32-bit dan 64-bit?

Jika Anda telah menggunakan keduanya, perbedaan tajam apa yang Anda alami?

Apakah akan menjadi masalah untuk menggunakan program 32-bit pada sistem 64-bit dalam beberapa kasus?


Ada banyak kebingungan di sini, dan di mana pun di web, antara pengalamatan fisik (akses ke ram) PEA memengaruhi ini, papan ibu memengaruhi ini, dan pengalamatan logis (memori virtual per proses). Pada os 32 bit, memori virtual dibatasi hingga 4GB dikurangi cadangan kernel. Ini tidak tergantung pada RAM Anda dapat memiliki 0,1MB atau 8GB RAM dan Anda akan memiliki persis 4GB memori virtual (tetapi beberapa dicadangkan oleh kernel). PEA dapat digunakan untuk memiliki lebih banyak RAM, tetapi bukan jawaban yang sempurna karena kernel TIDAK BISA mengakses semuanya.
ctrl-alt-delor

Jawaban:


264

Catatan: Jawaban ini berlaku untuk CPU PC berbasis x86 standar (Intel dan AMD) dan Windows (seperti biasanya dikonfigurasi untuk pengguna akhir). Chip 32-bit atau 64-bit lainnya, OS lain, dan konfigurasi OS lainnya dapat memiliki tradeoff yang berbeda.

Dari perspektif teknis, OS 64-bit memberi Anda:

  • Mengizinkan proses individual untuk mengatasi masing-masing lebih dari 4 GB RAM (dalam praktiknya, sebagian besar tetapi tidak semua OS 32-bit juga membatasi total RAM sistem yang dapat digunakan menjadi kurang dari 4 GB, bukan hanya maksimum per aplikasi).

  • Semua pointer mengambil 8 byte, bukan 4 byte. Efeknya pada penggunaan RAM minimal (karena Anda tidak mungkin memiliki aplikasi yang diisi dengan gigabytes pointer), tetapi dalam kasus teoritis terburuk, ini dapat membuat cache CPU dapat menampung 1/2 pointer sebanyak (membuat secara efektif 1/2 ukuran). Untuk sebagian besar aplikasi, ini bukan masalah besar.

  • Ada banyak register CPU untuk keperluan umum dalam mode 64-bit. Register adalah memori tercepat di seluruh sistem Anda. Hanya ada 8 dalam mode 32-bit dan 16 register tujuan umum dalam mode 64-bit. Dalam aplikasi komputasi ilmiah yang saya tulis, saya telah melihat peningkatan kinerja hingga 30% dengan mengkompilasi ulang dalam mode 64-bit (aplikasi saya benar-benar dapat menggunakan register tambahan).

  • Kebanyakan OS 32-bit benar-benar hanya membiarkan aplikasi individual menggunakan 2 GB RAM, bahkan jika Anda telah menginstal 4 GB. Ini karena 2 GB ruang alamat lainnya dicadangkan untuk berbagi data antar aplikasi, dengan OS, dan untuk berkomunikasi dengan driver. Windows dan Linux akan memungkinkan Anda menyesuaikan tradeoff ini menjadi 3 GB untuk aplikasi dan 1 GB dibagikan, tetapi ini dapat menyebabkan masalah untuk beberapa aplikasi yang tidak mengharapkan perubahan. Saya juga menduga itu mungkin melumpuhkan kartu grafis yang memiliki 1 GB RAM (tapi saya tidak yakin). OS 64-bit dapat memberikan aplikasi individual 32-bit lebih dekat ke 4 GB penuh untuk dimainkan.

Dari perspektif pengguna:

  • Kecepatan aplikasi biasanya lebih cepat untuk aplikasi 64-bit dalam OS 64-bit dibandingkan dengan versi aplikasi 32-bit pada OS 32-bit, tetapi sebagian besar pengguna tidak akan melihat kecepatan ini. Sebagian besar aplikasi untuk pengguna normal tidak benar-benar memanfaatkan register tambahan atau manfaatnya diseimbangkan dengan petunjuk yang lebih besar mengisi cache.

  • Jika Anda memiliki aplikasi penyimpanan memori (seperti editor foto, pemrosesan video, komputasi ilmiah, dll.), Jika Anda memiliki (atau dapat membeli) RAM lebih dari 3 GB, dan Anda bisa mendapatkan versi aplikasi 64-bit, pilihannya mudah: gunakan OS 64-bit.

  • Beberapa perangkat keras tidak memiliki driver 64-bit. Periksa motherboard Anda, semua kartu plug-in, dan semua perangkat USB sebelum beralih. Perhatikan bahwa pada awal Windows Vista, ada banyak masalah dengan driver. Saat ini keadaan umumnya lebih baik.

  • Jika Anda menjalankan begitu banyak aplikasi pada saat kehabisan RAM (biasanya Anda dapat mengetahui hal ini karena komputer Anda mulai sangat lambat dan Anda mendengar hard disk drive berderak), maka Anda akan menginginkan OS 64-bit (dan RAM yang cukup).

  • Anda dapat menjalankan aplikasi 32-bit (tetapi bukan driver) di Windows 64-bit tanpa masalah. Perlambatan terburuk yang saya ukur untuk aplikasi 32-bit di Windows 64-bit adalah sekitar 5% (artinya jika butuh 60 detik untuk melakukan sesuatu di Windows 32-bit, butuh paling banyak 60 * 1.05 = 65 detik dengan aplikasi 32-bit yang sama di Windows 64-bit).

Apa yang 32-bit vs 64-bit tidak tidak menyiratkan:

Pada sistem x86, 32-bit vs 64-bit secara langsung mengacu pada ukuran pointer. Itu saja.

  • Itu tidak merujuk pada ukuran inttipe C. Itu diputuskan oleh implementasi kompiler tertentu, dan sebagian besar kompiler populer memilih 32-bit intpada sistem 64-bit.

  • Itu tidak secara langsung merujuk pada ukuran register non-pointer normal. Namun, penggunaan register aritmatika 64-bit kebetulan mengharuskan aplikasi dan OS juga berjalan dalam mode pointer 64-bit.

  • Itu tidak secara langsung merujuk pada ukuran bus alamat fisik. Sebagai contoh, sebuah sistem dengan garis cache lebar 64 bit dan maksimum memori 512GiB hanya membutuhkan 33 bit dalam bus alamatnya (yaitu log2(512*1024**3) - log2(64) = 33).

  • Itu tidak merujuk pada ukuran bus data fisik: itu lebih terkait dengan biaya pembuatan (jumlah pin di soket CPU) dan ukuran garis cache.


8
Jawaban yang sangat bagus Terutama karena Anda mencatat bahwa sebenarnya tidak ada batas RAM 4 GB, tetapi proses batas penggunaan memori. Sekadar informasi Anda, saya pikir Anda harus melihat tautan ini: unawave.de/windows-7-tipps/32-bit-ram-barrier.html?lang=EN
Terobosan

8
Mereka adalah aplikasi yang tidak berfungsi pada windows 64 bit: aplikasi 16 bit / yang menggunakan 32-bit atau driver mode kernel yang tidak ditandatangani. Itu banyak untuk pecandu perangkat lunak seperti saya ...
fluxtendu

1
@flextendu, mengingat persyaratan kinerja dari program-program lama itu, Anda hampir dapat menjalankannya di mesin virtual. Dengan VMware player, Virtual PC dan Virtual Box di luar sana, tidak ada alasan untuk tidak mencoba salah satunya, jika Anda memiliki lisensi Windows 32-bit. Jika Anda tidak ingin mengacaukannya, mereka mungkin akan bekerja di bawah "Mode Windows XP" juga.
Mark Booth

6
BTW, aplikasi 32-bit tidak akan menggunakan lebih dari 2 GiB RAM kecuali jika flag tertentu diaktifkan dalam manifesnya. Sumber: blogs.technet.com/b/markrussinovich/archive/2008/11/17/...
Hello71

Ya, saya yakin Hello71 telah menemukan sesuatu yang sangat penting yang tidak dibahas di sini: Sebagian besar aplikasi 32-bit tidak akan pernah secara langsung mengambil keuntungan dari RAM tambahan. Saya pikir ini layak disebutkan, bukan?
Django Reinhardt

107

Pada dasarnya Anda dapat melakukan segalanya untuk skala yang lebih besar:

  1. RAM per OS: Batas RAM 4GB pada x86 untuk OS (sebagian besar waktu)
  2. RAM per proses: Batas RAM 4GB pada x86 untuk proses (selalu). Jika menurut Anda ini tidak penting, coba jalankan aplikasi intensif basis data MSSQL yang besar. Ini akan menggunakan> 4GB itu sendiri jika Anda memilikinya tersedia dan berjalan jauh lebih baik.
  3. Alamat: Alamat 64 bit bukannya 32 bit yang memungkinkan Anda memiliki program "lebih besar" yang menggunakan lebih banyak memori.
  4. Menangani tersedia untuk program: Anda dapat membuat lebih banyak file menangani, proses, ... Contoh pada Windows x64 Anda dapat membuat> 2000 utas per proses, tetapi pada x86 lebih dekat ke beberapa ratus.
  5. Program yang lebih luas tersedia: Dari x64 Anda dapat menjalankan program x86 dan x64. (Contoh windows: wow64, windows32 pada emulasi windows64)
  6. Opsi emulasi: Dari x64 Anda dapat menjalankan VM x86 dan x64.
  7. Lebih cepat: Beberapa perhitungan lebih cepat pada CPU 64-bit
  8. Membagi banyak sumber daya sistem: Banyak memori RAM sangat penting ketika Anda ingin menjalankan setidaknya satu VM yang membagi sumber daya sistem Anda.
  9. Tersedia program eksklusif: Beberapa program baru hanya mendukung x64. Contoh Pertukaran 2007.
  10. X86 usang di masa mendatang?: Seiring waktu semakin banyak 64-bit akan digunakan dan semakin banyak x86 tidak akan digunakan. Jadi vendor hanya akan mendukung 64-bit lebih banyak dan lebih banyak.

2 tipe besar arsitektur 64-bit adalah arsitektur x64 dan IA64. Tapi x64 adalah yang paling populer sejauh ini.

x64 dapat menjalankan perintah x86 dan juga perintah x64. IA64 juga menjalankan perintah x86, tetapi ia tidak melakukan ekstensi SSE. Ada perangkat keras yang didedikasikan untuk Itanium untuk menjalankan instruksi x86; ini adalah emulator, tetapi dalam perangkat keras.

Seperti yang disebutkan oleh @Phil, Anda bisa melihat lebih dalam tentang cara kerjanya di sini .


1
Um IA64 menjalankan perintah x86. Itu tidak melakukan ekstensi SSE. Ada perangkat keras yang didedikasikan untuk Itanium untuk menjalankan instruksi x86; ini adalah emulator, tetapi dalam perangkat keras.
tzot

2
Beberapa tahun yang lalu, Raymond Chen memposting tentang "thread" 2000 thread, dan ini lebih atau kurang merupakan legenda urban: blogs.msdn.com/oldnewthing/archive/2005/07/29/444912.aspx
bk1e

Suara positif untuk Arstechnica untuk penjelasan mereka.
Avihu Turzion

2
Batas RAM 4GB tidak sepenuhnya benar (melainkan batas buatan yang dibuat pada sistem Windows pengguna rumahan), periksa PAE . Dengan sebagian besar perangkat keras terbaru, kernel Linux PAE (yang digunakan secara default untuk 32bit) dapat menangani lebih dari 4GB. Hal yang sama berlaku untuk FreeBSD dan NetBSD.
Izzy

Sistem 32bit tidak dapat menggunakan lebih dari 4GB (titik pertama) karena itu "alamat" (titik 3). Karena angka 32bit tertinggi adalah 4.294.967.296 (= 4GB). Jadi tusukan 1 dan 3 Anda adalah SAMA. Anda dapat menghapus punct ke-3. :)
Jet

46

Dampak terbesar yang orang akan perhatikan saat ini adalah bahwa PC 32-bit hanya dapat mengatasi memori maksimum 4GB. Ketika Anda melepas memori yang dialokasikan untuk penggunaan lain oleh sistem operasi, PC Anda mungkin hanya akan menampilkan sekitar 3,25GB memori yang dapat digunakan. Pindah ke 64bit dan batas ini menghilang.

Jika Anda melakukan pengembangan serius maka ini bisa sangat penting. Coba jalankan beberapa mesin virtual dan Anda segera kehabisan memori. Server lebih cenderung membutuhkan memori tambahan sehingga Anda akan menemukan bahwa penggunaan 64bit jauh lebih besar pada server daripada desktop. Hukum Moore memastikan bahwa kita akan memiliki lebih banyak memori pada mesin dan pada beberapa titik desktop juga akan beralih ke 64bit sebagai standar.

Untuk penjelasan yang jauh lebih rinci tentang perbedaan prosesor, lihat artikel hebat ini dari ArsTechnica .


7
Platform 32-bit dan batasan 4GB agak keliru dan terutama pilihan arsitektur / pilihan desain arsitektur sistem operasi. Sungguh, 4GB dari 32-bit benar-benar terbatas pada ruang proses VA. Alamat fisik mendukung 36-bit pada Intel 32-bit CPU
Tall Jeff

1
Anda membuat poin bagus yang tentu saja benar. Tetapi dampaknya di dunia nyata pengguna PC adalah bahwa mesin di sana tidak akan menggunakan 4GB penuh yang mereka bayar. Ayah saya memiliki masalah ini dan masih bingung bahwa 4GB yang dia bayar tidak dapat sepenuhnya digunakan.

2
Hargai poin Anda, tetapi hanya mencoba mengusir anggapan bahwa perbaikannya tidak ada di prosesor atau menuju 64-bit, itu hanya masalah desain OS yang sedikit ditingkatkan. Ini ditujukan, misalnya, pada versi perusahaan Windows bahkan kembali dalam versi 32-bit. Ini memungkinkan untuk 64GB RAM.
Tall Jeff

Secara teknis, batasnya tidak hilang. Ini bergerak lebih jauh ke tempat di mana tidak praktis / mustahil untuk menginstal banyak RAM pada mesin setiap saat dalam dekade berikutnya.

Lihat komentar saya pada PAE di atas: batas 4GB tidak berlaku untuk seluruh sistem - tetapi hanya berlaku untuk proses tunggal (tidak ada proses yang dapat mengakses 4GB dan naik sendiri - tetapi seluruh sistem, yaitu semua proses bersama, dapat dengan mengaktifkan PAE ). Jadi, kecuali jika seseorang memiliki aplikasi yang menguntungkan karena dapat mengakses 4GB dan lebih tinggi (seperti editor video / konverter dengan file video besar) dan 8GB + diinstal, itu tidak akan membuat banyak perbedaan apakah menggunakan 32bit atau 64bit.
Izzy

31

Tidak ada yang gratis: walaupun aplikasi 64-bit dapat mengakses lebih banyak memori daripada aplikasi 32-bit, kekurangannya adalah mereka membutuhkan lebih banyak memori. Semua pointer yang dulunya membutuhkan 4 byte, sekarang mereka membutuhkan 8. Misalnya, persyaratan default di Emacs adalah 60% lebih banyak memori ketika itu dibangun untuk arsitektur 64-bit. Jejak ekstra ini merusak kinerja pada setiap level hirarki memori: executable yang lebih besar membutuhkan waktu lebih lama untuk memuat dari disk, set kerja yang lebih besar menyebabkan lebih banyak paging dan objek yang lebih besar berarti lebih sedikit kecocokan dalam cache prosesor. Jika Anda berpikir tentang CPU dengan cache 16K L1, aplikasi 32-bit dapat bekerja dengan 4096 pointer sebelum hilang dan pergi ke cache L2 tetapi aplikasi 64-bit harus mencapai cache L2 setelah hanya 2048 pointer.

Pada x64 ini dimitigasi oleh perbaikan arsitektur lain seperti register lebih banyak, tetapi pada PowerPC jika aplikasi Anda tidak dapat menggunakan> 4G itu kemungkinan akan berjalan lebih cepat pada "ppc" daripada "ppc64". Bahkan pada Intel ada beban kerja yang berjalan lebih cepat pada x86, dan beberapa menjalankan lebih dari 5% lebih cepat pada x64 daripada x86.


2
Jawaban ini menunjukkan bahwa PowerPC64 tidak sebagus x86-64. Yang benar adalah bahwa powerpc64 tidak meningkatkan powerpc, karena powerpc tidak rusak.
ctrl-alt-delor

3
Linux sekarang memiliki ABI x32, dengan semua manfaat kecepatan x86-64 (lebih banyak register, ABI yang dirancang ulang), tetapi dengan pointer 32 bit. +1 untuk menunjukkan bahwa manfaat mode 64bit bukan dari peningkatan lebar sebenarnya, tetapi dari kesempatan untuk menjatuhkan banyak bagasi yang menahan arsitektur. 64bit regs memiliki nilai untuk beberapa aplikasi, tetapi ruang pointer 64bit lebih jarang dibutuhkan.
Peter Cordes

19

OS 64-bit dapat menggunakan lebih banyak RAM. Itu saja, dalam praktiknya. Vista / 7 64-bit menggunakan fitur keamanan yang lebih bagus untuk tempat mereka menempatkan komponen vital dalam RAM, tapi itu tidak terlalu 'terlihat'.

Dari ChrisInEdmonton:

Sistem operasi 32-bit pada sistem ix86 dengan PAE dapat menangani hingga 64 GB RAM. Sistem operasi 64-bit pada x86-64 dapat mengakses hingga 256 TB ruang alamat virtual, meskipun ini dapat dinaikkan dalam prosesor berikutnya, hingga 16 EB. Perhatikan bahwa beberapa sistem operasi membatasi ruang alamat lebih lanjut, dan sebagian besar motherboard akan memiliki batasan tambahan.


4
Untuk OS, 32-bit versus 64-bit ONLY mengacu pada ukuran pointer (apa paragraf pertama Anda dengan benar membahas). -1: Beberapa OS memilih untuk mengunci ukuran integer default ke ukuran pointer, tetapi Windows atau Linux tidak melakukannya. Presisi matematika bilangan bulat tidak berubah. TIDAK ADA OS yang digunakan secara luas mengubah presisi floating point (apa yang diklaim paragraf kedua). "float" atau "single" adalah 32-bit, "double" adalah 64-bit, terlepas dari apakah OS menggunakan pointer 32-bit atau 64-bit.
Tn. Fooz

Ah, aku jelas salah, terima kasih untuk membersihkan bahwa sampai :)
Phoshi

Tidak masalah. -1 -> +1
Mr Fooz

Mungkin perlu mengedit jawaban Anda untuk menyatakan berapa banyak RAM yang dapat diakses. Sistem operasi 32-bit pada sistem ix86 dengan PAE dapat menangani hingga 64 GB RAM. Sistem operasi 64-bit pada x86-64 dapat mengakses hingga 256 TB ruang alamat virtual, meskipun ini dapat dinaikkan dalam prosesor berikutnya, hingga 16 EB. Perhatikan bahwa beberapa sistem operasi membatasi ruang alamat lebih lanjut, dan sebagian besar motherboard akan memiliki batasan tambahan.
ChrisInEdmonton

Saya ingin membuatnya tetap sederhana, karena jumlahnya sebagian besar cukup tinggi untuk menjadi tidak relevan saat ini, tetapi tidak ada salahnya untuk memasukkannya sekarang.
Phoshi

14

Tidak yakin saya bisa menjawab semua pertanyaan Anda tanpa menulis seluruh esai (selalu ada Google ...), tetapi Anda tidak perlu mendesain aplikasi Anda secara berbeda untuk 64bit. Saya kira apa yang dimaksud adalah bahwa Anda harus memperhatikan hal-hal seperti ukuran pointer tidak lagi sama dengan int. Dan Anda memiliki banyak masalah potensial dengan asumsi bawaan pada jenis data tertentu yang panjangnya empat byte yang mungkin tidak lagi benar.

Ini kemungkinan akan menambah semua hal dalam aplikasi Anda - mulai dari menyimpan / memuat dari file, iterasi melalui data, penyelarasan data, hingga operasi bitwise pada data. Jika Anda memiliki basis kode yang sudah Anda coba porting, atau bekerja pada keduanya, kemungkinan Anda akan memiliki banyak gangguan kecil untuk dikerjakan.

Saya pikir ini adalah masalah implementasi, bukan yang desain. Yaitu saya pikir "desain" katakanlah, paket pengeditan foto akan sama apa pun ukurannya. Kami menulis kode yang mengkompilasi ke versi 32bit dan 64bit, dan desainnya tentu tidak berbeda antara keduanya - ini adalah basis kode yang sama.

"Masalah besar" mendasar pada 64bit adalah Anda mendapatkan akses ke ruang alamat memori yang jauh lebih besar daripada 32bit. Ini berarti Anda benar-benar dapat memasukkan lebih dari 4Gb memori ke komputer Anda dan benar-benar membuatnya membuat perbedaan.

Saya yakin jawaban lain akan masuk ke rincian dan manfaat lebih dari saya.

Dalam hal mendeteksi perbedaan maka secara programatik Anda cukup memeriksa ukuran pointer (mis. Sizeof (void *)). Jawaban 4 berarti 32 bit, dan 8 berarti Anda menjalankan dalam lingkungan 64bit.


4
Jika Anda menulis program yang dengan santai berasumsi bahwa tipe pointer tertentu memiliki ukuran yang sama dengan tipe integral tertentu, Anda perlu melakukan itu. Ini sudah benar sejak lama.
David Thornley

@ David: Anda memang benar. Sayangnya, ada banyak kode di luar sana yang melakukan hal itu.

10

Proses 32 Bit memiliki ruang alamat virtual 4 GB; ini mungkin terlalu sedikit untuk beberapa aplikasi. Aplikasi 64 Bit memiliki ruang alamat yang hampir tidak terbatas (tentu saja terbatas, tetapi Anda kemungkinan besar tidak akan mencapai batas ini).

Di OSX ada keuntungan lain. Lihat artikel berikut , mengapa menjalankan kernel di ruang alamat 64 Bit (terlepas dari apakah aplikasi Anda menjalankan 64 atau 32) atau membiarkan aplikasi Anda berjalan di ruang alamat 64 Bit (saat kernel masih 32 Bit) mengarah ke kinerja yang jauh lebih baik. Untuk meringkas: Jika salah satu 64 Bit (kernel atau aplikasi, atau keduanya tentu saja), TLB ("terjemahan lookaside buffer") tidak harus memerah setiap kali Anda beralih dari kernel untuk menggunakan ruang dan kembali (yang akan mempercepat akses RAM).

Anda juga mendapatkan keuntungan kinerja saat bekerja dengan variabel "long long int" (variabel 64 Bit seperti uint64_t). CPU 32 Bit dapat menambah / membagi / mengurangi / mengalikan dua nilai 64 Bit, tetapi tidak dalam satu operasi perangkat keras. Alih-alih perlu membagi operasi ini menjadi dua (atau lebih) operasi 32 Bit. Jadi aplikasi yang banyak bekerja dengan angka 64 Bit akan memiliki kecepatan memperoleh kemampuan untuk melakukan matematika 64 Bit langsung di perangkat keras.

Terakhir, arsitektur x86-64 menawarkan register lebih banyak daripada arsitektur x86 klasik. Bekerja dengan register jauh lebih cepat daripada bekerja dengan RAM dan semakin banyak register yang dimiliki CPU, semakin jarang perlu menukar nilai register ke RAM dan kembali ke register.

Untuk mengetahui apakah CPU Anda dapat berjalan dalam mode 64 Bit, Anda dapat melihat berbagai variabel sysctl. Misalnya buka terminal dan ketik

sysctl machdep.cpu.extfeatures

Jika mencantumkan EM64T, CPU Anda mendukung ruang alamat 64 Bit sesuai dengan standar x86-64. Anda juga bisa mencarinya

sysctl hw.optional.x86_64

Jika dikatakan 1 (true / enabled), CPU Anda mendukung mode x86-64 Bit, jika dikatakan 0 (false / disable), itu tidak. Jika pengaturan tidak ditemukan sama sekali, anggap itu salah.

Catatan: Anda juga dapat mengambil variabel sysctl dari dalam aplikasi C asli, tidak perlu menggunakan alat baris perintah. Lihat

man 3 sysctl

kesalahan: "machdep.cpu.extfeatures" adalah kunci yang tidak dikenal

Saya kira itu tidak disebut EM64T, juga, jika Anda tidak cukup beruntung untuk memiliki intel.

9

Perhatikan bahwa addressspace dapat digunakan untuk lebih dari memori (nyata). Seseorang juga dapat memetakan file besar dengan memori, yang dapat meningkatkan kinerja dalam pola akses yang lebih aneh karena caching level VM level-blok yang lebih kuat dan efisien juga masuk. Lebih aman untuk mengalokasikan blok memori besar pada 64-bit karena heapmanager kurang kemungkinan akan mengalami fragmentasi alamat-ruang yang tidak akan memungkinkannya mengalokasikan blok besar.

Beberapa hal yang dikatakan di utas ini (seperti pengganda # register) hanya berlaku untuk x86-> x86_64, tidak untuk 64-bit secara umum. Sama seperti fakta bahwa di bawah x86_64 satu dijamin memiliki SSE2, 686 opcodes dan cara murah untuk melakukan PIC. Fitur-fitur ini tidak hanya tentang 64-bit, tetapi tentang memotong warisan dan memperbaiki batasan x86 yang diketahui

Selain itu cukup sering orang menunjuk penggandaan register sebagai penyebab percepatan, sementara itu lebih mungkin penggunaan SSE2 default yang melakukan trik (mempercepat memcpy dan fungsi serupa). Jika Anda mengaktifkan set yang sama untuk x86 perbedaannya jauh lebih kecil. (*) (***)

Juga perlu diingat bahwa sering ada penalti awal yang terlibat karena struktur data rata-rata akan meningkat hanya karena ukuran pointer lebih besar. Ini juga memiliki efek cache, tetapi lebih signifikan terlihat pada kenyataan bahwa rata-rata memcpy () (atau apa pun yang setara dengan salinan memori dalam bahasa Anda) akan memakan waktu lebih lama. Ini hanya dalam besaran beberapa persen btw, tetapi speedup yang disebutkan di atas juga dalam besaran itu.

Biasanya overhead alignment juga lebih besar pada arsitektur 64-bit (catatan sebelumnya 32-bit hanya sering menjadi campuran dari nilai 32-bit dan 64-bit), meledakkan struktur lebih banyak lagi.

Secara keseluruhan, tes sederhana saya menunjukkan bahwa mereka akan secara kasar membatalkan satu sama lain, jika driver dan pustaka runtime telah sepenuhnya beradaptasi, tidak memberikan perbedaan kecepatan yang signifikan untuk aplikasi rata-rata. Namun beberapa aplikasi tiba-tiba bisa menjadi lebih cepat (misalnya ketika bergantung pada AES) atau lebih lambat (struktur data penting terus bergerak / dipindai / berjalan dan mengandung banyak petunjuk). Namun pengujian dilakukan pada Windows, dan optimalisasi PIC tidak menjadi patokan.

Perhatikan bahwa sebagian besar bahasa JIT-VM (Java, .NET) menggunakan pointer secara signifikan lebih banyak rata-rata (secara internal) daripada misalnya C ++. Mungkin penggunaan memori mereka meningkat lebih dari pada program rata-rata, tapi saya tidak berani menyamakannya langsung dengan efek yang melambat (karena ini adalah binatang yang benar-benar kompleks dan funky dan sering sulit diprediksi tanpa pengukuran)

Windows 64-bit secara default menggunakan SSE2 untuk floating point yang tampaknya mempercepat operasi sederhana dan memperlambat operasi kompleks (sin, cos dll).

(*) fakta yang sedikit diketahui adalah bahwa jumlah register SSE juga berlipat ganda dalam mode 64-bit

(**) Dr Dobbs punya artikel bagus tentang itu beberapa tahun yang lalu.


8

Selain masalah ruang memori yang jelas yang kebanyakan orang sebutkan di sini, saya pikir perlu melihat gagasan "komputasi kata kunci" yang Knuth (antara lain) telah bicarakan belakangan ini. Ada banyak efisiensi yang bisa diperoleh melalui manipulasi bit, dan operasi bitwise pada kata 64-bit jauh lebih maju daripada kata 32-bit. Singkatnya, Anda dapat melakukan lebih banyak operasi dalam register tanpa harus menekan memori, dan dari perspektif kinerja, itu adalah kemenangan yang sangat besar.

Lihatlah Volume 4, pra-Fascicle 1A untuk beberapa contoh trik keren yang saya bicarakan.


7

Selain kemampuan untuk mengatasi lebih banyak memori, x86_64 juga memiliki lebih banyak register yang memungkinkan kompiler menghasilkan kode yang lebih efisien. Peningkatan kinerja biasanya akan cukup kecil.

Arsitektur x86_64 kompatibel dengan x86. Dimungkinkan untuk menjalankan sistem operasi 32-bit yang tidak dimodifikasi. Dimungkinkan juga untuk menjalankan perangkat lunak 32-bit yang tidak dimodifikasi dari OS 64-bit. Itu akan membutuhkan semua perpustakaan 32-bit yang biasa. Mereka mungkin perlu diinstal secara terpisah.


Lebih banyak register, dan ABI yang didesain ulang (fungsi lewat args dalam register) biasanya merupakan speedup 10 hingga 15%, yang cukup baik. Sekarang ada ABI Linux x32 dengan pointer 32bit, tetapi menggunakan mode panjang amd64, dan args-in-register yang memanggil konvensi. Jadi Anda memiliki semua manfaat kecepatan amd64, tetapi tanpa overhead yang membutuhkan 64bits untuk setiap pointer. Ini bagus untuk semua yang tidak membutuhkan> 4GB memori (virtual).
Peter Cordes

6

Utas ini sudah terlalu lama, tapi ...

Sebagian besar balasan berfokus pada fakta bahwa Anda memiliki ruang alamat yang lebih besar, 64-bit, sehingga Anda dapat menangani lebih banyak memori. Untuk sekitar 99% dari semua aplikasi, ini sama sekali tidak relevan. Teriakan besar.

The nyata Alasan 64-bit yang baik adalah tidak bahwa register lebih besar, tetapi ada dua kali lebih banyak dari mereka! Itu berarti bahwa kompiler dapat menyimpan lebih banyak nilai Anda dalam register daripada menumpahkannya ke memori dan memuatnya kembali dalam beberapa instruksi nanti. Jika dan ketika kompilator pengoptimal membuka gulungan Anda, Anda dapat membuka gulungannya kira-kira dua kali lipat, yang benar-benar dapat membantu kinerja.

Juga, konvensi penelepon / callee subrutin untuk 64-bit telah didefinisikan untuk menjaga sebagian besar parameter yang disahkan dalam register alih-alih penelepon mendorongnya ke stack dan callee menghapusnya.

Jadi aplikasi C / C ++ "tipikal" akan mendapatkan peningkatan kinerja sekitar 10% atau 15% hanya dengan mengkompilasi ulang untuk 64-bit. (Dengan asumsi beberapa bagian dari aplikasi dihitung terikat. Tentu saja, ini tidak dijamin; Semua komputer menunggu kecepatan yang sama. Mileage Anda Mungkin Bervariasi.)


Sementara set instruksi lebih baik untuk x64 daripada x86, itu biasanya tidak penting. Kode 64-bit bisa lebih lambat dari 32-bit, juga, karena instruksinya bisa lebih besar, sehingga lebih sedikit dari mereka yang sesuai dengan cache. (Unrolling loops, BTW, adalah teknik yang sangat dipertanyakan saat ini, karena akan meningkatkan jumlah cache yang hilang.) Di mana saya bekerja, kita membutuhkan 64 bit untuk meningkatkan memori yang ditangani.
David Thornley

David, Kumpulan instruksi x64 dan x86 hampir identik, kecuali untuk ukuran operan dan beberapa awalan register. Dengan IA64, alias Itanium alias Itanic, kode 64-bit biasanya 3x kode x86, dan menekankan cache instruksi persis seperti yang Anda katakan. Itu adalah faktor besar mengapa arsitektur itu gagal total. Tetapi dengan x86 alias AMD64 alias EM64T, pertumbuhan kode itu biasanya hanya 10-20%.

Walaupun x64 membuat lebih banyak register yang dapat dialamatkan , saya tidak yakin seberapa banyak itu benar-benar meningkatkan jumlah register fisik yang tersedia - semua prosesor x86 baru-baru ini memiliki banyak (> 100) register "bayangan", dan menggunakan "pengubahan nama register" + eksekusi spekulatif untuk memungkinkan jalur kode independen untuk dieksekusi secara paralel ke gelar. Akibatnya, jika n jalur kode independen dijalankan, n kali lebih banyak register tersedia (sampai semua register bayangan habis).

@j_random_hacker. Anda benar bahwa trik-trik itu terjadi di bawah arsitektur. Tetapi tidak peduli berapa banyak register bayangan yang tersedia, jika program perlu bekerja dengan lebih dari 8 item data dan hanya 8 register yang terpapar dalam set instruksi, kompiler harus membuat instruksi store / reload. Jadi ya, X64 benar-benar membuat register dua kali lebih banyak "tersedia"

Pengalaman saya adalah bahwa ini jauh lebih sedikit, dan diimbangi oleh fakta bahwa rata-rata memblock untuk dipindahkan lebih besar.
Marco van de Voort

6

Terlepas dari keuntungan yang telah disebutkan di sini, ada beberapa lagi tentang keamanan:

  • x86_64 cpus memiliki bit no-execute di tabel halaman mereka. Yaitu ini dapat mencegah eksploitasi keamanan yang disebabkan oleh buffer overruns. CPU x86 32-bit hanya mendukung fitur ini dalam mode PAE.
  • Ruang alamat yang lebih besar memungkinkan pengacakan tata letak ruang alamat yang lebih baik (ASLR) yang membuat eksploitasi buffer overruns lebih sulit.
  • x86_64 cpus kode posisi-independen fitur yaitu akses data relatif terhadap register pointer instruksi (RIP).

Keuntungan lain yang terlintas dalam pikiran adalah bahwa jumlah memori bersebelahan virtual yang dialokasikan vmalloc()dalam kernel Linux bisa lebih besar dalam mode 64 bit.


5

Dengan mesin 32-bit Anda hanya memiliki 4.294.967.295 byte memori yang harus diatasi. Dengan mesin 64-bit, Anda memiliki memori 1,84467441 × 10 ^ 19 byte.

Wikipedia mengatakan ini

Prosesor 64-bit menghitung tugas-tugas tertentu (seperti faktorial angka besar) dua kali lebih cepat dari bekerja di lingkungan 32-bit (contoh yang diberikan berasal dari perbandingan antara 32-bit dan 64-bit Windows Calculator; terlihat untuk faktorial katakanlah 100 000 ). Ini memberikan perasaan umum tentang kemungkinan teoritis dari aplikasi 64-bit yang dioptimalkan.

Sementara arsitektur 64-bit tidak dapat disangkal membuat bekerja dengan set data besar dalam aplikasi seperti video digital, komputasi ilmiah, dan database besar lebih mudah, ada perdebatan yang cukup besar tentang apakah mereka atau mode kompatibilitas 32-bit mereka akan lebih cepat daripada harga yang sebanding. Sistem 32-bit untuk tugas-tugas lain. Dalam arsitektur x86-64 (AMD64), sebagian besar sistem operasi dan aplikasi 32-bit dapat berjalan dengan lancar pada perangkat keras 64-bit.

Mesin virtual Java 64-bit Sun lebih lambat untuk memulai daripada mesin virtual 32-bit mereka karena Sun hanya mengimplementasikan kompiler JIT "server" (C2) untuk platform 64-bit. [9] Kompiler JIT "klien" (C1), yang menghasilkan kode kurang efisien tetapi mengkompilasi jauh lebih cepat, tidak tersedia pada platform 64-bit.

Perlu dicatat bahwa kecepatan bukan satu-satunya faktor yang perlu dipertimbangkan dalam perbandingan prosesor 32-bit dan 64-bit. Aplikasi seperti multi-tasking, stress testing, dan clustering (untuk komputasi berkinerja tinggi), HPC, mungkin lebih cocok untuk arsitektur 64-bit mengingat penerapan yang benar. Cluster 64-bit telah banyak digunakan di organisasi besar seperti IBM, HP dan Microsoft, untuk alasan ini.


2
Panjang bus alamat fisik tidak tergantung apakah itu prosesor 32 atau 64-bit. Beberapa prosesor 32-bit memiliki bus alamat yang lebih besar dari 32 bit, dan tidak ada prosesor 64-bit yang memiliki bus alamat 64-bit.

1
Sepakat. Secara teori, ruang alamat adalah 2 ^ 64. Dalam praktiknya, produsen CPU menggunakan nilai yang lebih kecil ... seperti 2 ^ 40 atau 2 ^ 48.
Stu Thompson

5

Kutipan dari Microsoft.com:

Dalam tabel berikut, peningkatan sumber daya maksimum komputer yang didasarkan pada Windows versi 64-bit dan prosesor Intel 64-bit dibandingkan dengan sumber daya maksimum 32-bit yang ada.

MS-Table


2
Menarik, tetapi patut dicatat bahwa beberapa versi Windows 32-bit memungkinkan lebih banyak memori FISIK. Lihat misalnya, en.wikipedia.org/wiki/…
ChrisInEdmonton

@ChrisInEdmonton sistem memang mendukung lebih dari 4GB atau memori tetapi alamat untuk setiap proses masih dibatasi hingga 2GB (3GB dengan alamat yang besar). Jadi, bahkan jika sistem Anda memiliki banyak memori, itu masih tidak membantu program yang luas memori, dan kinerjanya masih tertinggal dari versi 64-bit. Selain itu, ia memiliki rentang alamat yang jauh lebih kecil untuk ASLR dan file yang dipetakan memori
phuclv

4

Kristof dan Poshi telah menyatakan perbedaan teknis utama antara OS 32 dan 64 bit, pengalaman pengguna biasanya jauh berbeda dari teori. Versi konsumen 64 bit Windows sampai saat ini (XP dan Vista) memiliki lubang besar menganga dalam dukungan driver mereka. Saya memiliki banyak printer, pemindai, dan perangkat eksternal lainnya tidak berfungsi dengan versi 64 bit yang berfungsi baik dengan versi 32 bit. Ini adalah perangkat yang memiliki driver 64 bit dan mereka masih tidak akan berfungsi. Pada titik ini saya akan merekomendasikan Anda menjauh dari apa pun berbasis konsumen yang 64 bit dari Microsoft sampai Anda mendengar tentang bagaimana Windows 7 menangani ini, dari pengguna akhir nyata, bukan hanya uber-geeks yang saat ini memiliki akses ke sana. Berikan setidaknya 6 bulan dan lihat apa yang orang alami.


Mungkin ada lebih sedikit driver tetapi tidak seburuk ini membuatnya terdengar. Saya sudah menjalankan 64 bit sejak 2007 dan tidak pernah mengalami kesulitan. Karena itu, saya tidak memiliki perangkat yang tidak jelas atau kuno yang terhubung.
RomanSt

1
Yang terbaru saya dengan Vista 64 bit adalah printer multi-fungsi HP baru bulan lalu pada sistem Dell yang berumur 2 bulan. Baik Dell dan HP menyerah, dan pelanggan saya membayar saya untuk memakai XP Pro dan menyingkirkan Vista. Tidak ada yang tidak jelas tentang kedua unit.
Kevin K

1
Biasanya jika Anda membeli komputer dengan OS 64-bit, semuanya akan berfungsi. Saya akan berhati-hati sebelum mencoba memperbarui komputer yang lebih lama, atau jika saya memiliki printer yang lebih tua, atau jika saya ingin memutakhirkan sendiri.
David Thornley

Perangkat keras yang ingin mengaitkan Works with Windows atau Certified untuk digunakan dengan logo Windows harus menawarkan driver 64-bit. Mungkin mencari itu lain kali. Tetapi memang, kadang-kadang vendor tidak repot-repot untuk perangkat keras konsumen karena sebagian besar konsumen kemungkinan masih akan di 32 bit.
Joey

2

Beberapa program permainan menggunakan representasi papan bit . Catur, catur dan othello misalnya memiliki papan 8x8, yaitu 64 kotak, sehingga memiliki setidaknya 64 bit dalam kata mesin secara signifikan membantu kinerja.

Saya ingat pernah membaca tentang program catur yang 64-bit build-nya hampir dua kali lebih cepat dari versi 32-bit.


2

Istilah 32-bit dan 64-bit mengacu pada cara prosesor komputer (juga disebut CPU), menangani informasi. Versi 64-bit Windows menangani sejumlah besar memori akses acak (RAM) lebih efektif daripada sistem 32-bit.

Kecepatan mungkin berbeda menurut saya


1

Hal lain mengenai Microsoft Windows adalah bahwa selama bertahun-tahun telah ada Win32 API yang ditujukan untuk sistem operasi 32-bit dan tidak dioptimalkan untuk kompilasi 64 bit. Ketika saya menulis beberapa DLL untuk aplikasi saya, saya biasanya mengkompilasi di Win32 yang bukan versi 64 bit. Sebelum ke Vista, belum ada banyak versi Windows 64 bit yang berhasil, saya percaya di mana saya bekerja, mesin baru saya memiliki RAM 4 GB, tetapi saya masih menggunakan Windows XP Pro 32-bit karena dikenal sebagai stabil O / S relatif ke XP64 atau Vista.

Saya pikir Anda mungkin ingin juga melihat kembali ketika ada perubahan dari 16-bit ke 32-bit untuk beberapa rincian lebih lanjut tentang mengapa perubahan itu mungkin menjadi masalah besar bagi sebagian orang. Aplikasi mission-critical yang dapat dijalankan oleh perusahaan di desktop, misalnya paket akuntansi kecil, mungkin tidak berjalan pada sistem operasi 64-bit dan dengan demikian ada kebutuhan untuk menjaga mesin warisan tetap ada, virtual atau nyata.

Mengubah ukuran alamat dapat memiliki beberapa konsekuensi dan dampak besar.


1

Untuk tujuan paling praktis, Anda mungkin tidak akan melihat perbedaan.

Anda harus memiliki CPU 64-bit (kebanyakan CPU dalam beberapa tahun terakhir) untuk menginstal sistem operasi 64-bit.

Ada beberapa keuntungan untuk sistem operasi 64-bit:

  • Ini akan memungkinkan Anda untuk menjalankan lebih dari 4GB RAM (jumlah maksimum yang dapat Anda atasi dalam OS 32-bit adalah 2 ^ 32 = 4GB)
  • Sangat membantu untuk bekerja dengan kumpulan data besar (mis. Dalam Excel) dan tugas intensif komputasi tertentu (mis. Photoshop dan file besar)
  • Anda hanya dapat menjalankan program 64-bit pada OS 64-bit, tetapi Anda dapat menjalankan program 32-bit pada keduanya (perlu diingat banyak program yang datang karena keduanya, jadi tidak terlalu banyak 64-bit saja) program).

Di sebagian besar skenario, program 64-bit menggunakan sedikit lebih banyak memori, tetapi untuk komputer pribadi, ini biasanya tidak diperhatikan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.