GNU/Linux >> Belajar Linux >  >> Linux

Performa aritmetika 32 bit vs. 64 bit

Itu tergantung pada CPU dan operasi yang tepat. Pada Pentium IV 64-bit, misalnya, perkalian register 64-bit sedikit lebih lambat. CPU Core 2 dan yang lebih baru telah dirancang untuk operasi 64-bit dari bawah ke atas.

Umumnya, bahkan kode yang ditulis untuk platform 64-bit menggunakan variabel 32-bit di mana nilai akan sesuai di dalamnya. Ini bukan terutama karena aritmatika lebih cepat (pada CPU modern, umumnya tidak demikian) tetapi karena menggunakan lebih sedikit memori dan bandwidth memori.

Struktur yang berisi selusin bilangan bulat akan berukuran setengahnya jika bilangan bulat tersebut 32-bit daripada jika 64-bit. Ini berarti dibutuhkan separuh byte untuk disimpan, separuh ruang dalam cache, dan seterusnya.

Register asli 64-bit dan aritmatika digunakan di mana nilai mungkin tidak sesuai dengan 32-bit. Tetapi manfaat kinerja utama berasal dari register tujuan umum tambahan yang tersedia di set instruksi x86_64. Dan tentu saja, ada semua manfaat yang didapat dari pointer 64-bit.

Jadi jawaban sebenarnya adalah tidak masalah. Bahkan jika Anda menggunakan mode x86_64, Anda dapat (dan biasanya melakukannya) masih menggunakan aritmatika 32-bit di mana itu akan dilakukan, dan Anda mendapatkan manfaat dari pointer yang lebih besar dan register tujuan yang lebih umum. Saat Anda menggunakan operasi asli 64-bit, itu karena Anda memerlukan operasi 64-bit, dan Anda tahu mereka akan lebih cepat daripada berpura-pura dengan beberapa operasi 32-bit -- satu-satunya pilihan Anda. Jadi kinerja relatif register 32-bit versus 64-bit tidak boleh menjadi faktor penentu dalam keputusan penerapan apa pun.


Saya baru saja menemukan pertanyaan ini, tetapi saya pikir satu aspek yang sangat penting tidak ada di sini:jika Anda benar-benar melihat ke dalam kode rakitan menggunakan tipe 'int' untuk indeks kemungkinan akan memperlambat kode yang dihasilkan oleh kompiler Anda. Ini karena 'int' default ke tipe 32bit pada banyak kompiler dan platform 64bit (Visual Studio, GCC) dan melakukan perhitungan alamat dengan pointer (yang harus 64bit pada OS 64bit) dan 'int' akan menyebabkan kompiler memancarkan konversi yang tidak perlu antara register 32 dan 64bit .Saya baru saja mengalami ini dalam lingkaran dalam kode saya yang sangat kritis terhadap kinerja. Beralih dari 'int' ke 'long long' karena indeks loop meningkatkan waktu kerja algoritme saya sekitar 10%, yang merupakan keuntungan yang cukup besar mengingat vektorisasi SSE/AVX2 ekstensif yang sudah saya gunakan pada saat itu.


Linux
  1. MySQL – Penyesuaian dan Pengoptimalan Kinerja

  2. Linux – Haruskah Saya Menginstal 32 Atau 64 Bit?

  3. Apakah Lvm Mempengaruhi Kinerja?

  1. Tanda kurung Dalam Expr Aritmatika:3 * (2 + 1)?

  2. Menautkan perpustakaan 32-bit ke program 64-bit

  3. Segmentasi menggunakan register

  1. Bagaimana cara menentukan apakah Linux yang diberikan adalah 32 bit atau 64 bit?

  2. Menggunakan halaman 1GB menurunkan kinerja

  3. Bisakah saya menjalankan ubuntu 64 bit di pc saya (> 10 tahun)