Rumah >pembangunan bahagian belakang >C++ >Adakah Bahagian Titik Terapung Benar-Benar Lebih Lambat Daripada Pendaraban dalam CPU Moden?

Adakah Bahagian Titik Terapung Benar-Benar Lebih Lambat Daripada Pendaraban dalam CPU Moden?

Barbara Streisand
Barbara Streisandasal
2024-12-21 13:09:09386semak imbas

Is Floating-Point Division Really Slower Than Multiplication in Modern CPUs?

Implikasi Prestasi Pembahagian Titik Terapung vs. Pendaraban

Telah dinyatakan bahawa pembahagian titik terapung secara pengiraan lebih perlahan daripada pendaraban. Artikel ini menyelidiki pernyataan ini dan mengkaji kesahihannya dalam seni bina PC moden.

Pembahagian dalam operasi titik terapung selalunya mengatasi pendaraban dari segi kerumitan masa. CPU biasanya melaksanakan pendaraban dalam 1-2 kitaran jam, manakala pembahagian memerlukan proses yang lebih berpanjangan.

Untuk menggambarkan jurang prestasi, pertimbangkan coretan kod berikut:

float f1 = 200f / 2;
// vs.
float f2 = 200f * 0.5;

Dalam banyak kes, f2 akan dikira lebih cepat kerana kecekapan pendaraban ke atas pembahagian.

Ini perbezaan prestasi juga nyata dalam operasi yang lebih kompleks. Sebagai contoh, gelung berikut:

float f1;
float f2 = 2;
float f3 = 3;
for(i = 0; i < 1e8; i++)
{
  f1 = (i * f2 + i / f3) * 0.5; //or divide by 2.0f, respectively
}

akan dilaksanakan dengan lebih cekap menggunakan pendaraban dengan 0.5 dan bukannya membahagi dengan 2.0f, kerana pembahagian memerlukan langkah berulang.

Perbezaan prestasi yang ketara berpunca daripada kerumitan seni bina pembahagian. Tidak seperti pendaraban, yang boleh disejajarkan dengan menukarnya kepada beberapa penambahan, pembahagian melibatkan penolakan berulang, operasi yang kurang selari. Untuk mengimbangi, sesetengah unit titik terapung menggunakan anggaran dan pendaraban timbal balik, mengorbankan sedikit ketepatan untuk kecekapan.

Atas ialah kandungan terperinci Adakah Bahagian Titik Terapung Benar-Benar Lebih Lambat Daripada Pendaraban dalam CPU Moden?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn