Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Melaksanakan log2(__m256d) dengan Cekap dalam AVX2 tanpa Ketergantungan Pengkompil Intel?

Bagaimana untuk Melaksanakan log2(__m256d) dengan Cekap dalam AVX2 tanpa Ketergantungan Pengkompil Intel?

Patricia Arquette
Patricia Arquetteasal
2024-12-15 12:03:10951semak imbas

How to Efficiently Implement log2(__m256d) in AVX2 without Intel's Compiler Dependencies?

Pelaksanaan log2(__m256d) yang Cekap dalam AVX2

Dalam konteks AVX2, fungsi __m256d _mm256_log2_pd (__m256d a) Intel dan tidak serasi dengan Intel yang lain dilaporkan mempamerkan prestasi berkurangan pada pemproses AMD. Untuk menangani perkara ini, mari kita terokai pelaksanaan alternatif yang menawarkan kecekapan dan keserasian yang luas.

Strategi untuk Penghampiran log2

Lazimnya, log2(ab) dikira sebagai log2(a) log2 (b). Memandangkan a diwakili oleh 2^eksponen mantissa, pengiraan dipermudahkan kepada eksponen log2(mantissa). Julat terhad mantissa (1.0 hingga 2.0) membolehkan penghampiran polinomial yang disesuaikan untuk mengira log2(mantissa).

Penghampiran Polinomial

Peluasan siri Taylor biasanya digunakan sebagai titik permulaan untuk pekali, tetapi pemasangan minimax disyorkan untuk meminimumkan ralat pada julat sasaran. Untuk ketepatan yang lebih tinggi di sekitar nilai hampir 1.0, mantissa-1.0 boleh digunakan sebagai input polinomial, menghapuskan keperluan untuk istilah tetap.

Pertimbangan Ketepatan

Tahap ketepatan yang diingini akan mempengaruhi pilihan pelaksanaan . Ketepatan yang lebih tinggi biasanya datang pada kos kelajuan kerana langkah pengiraan tambahan. Pustaka VCL Agner Fog menyediakan fungsi yang sangat tepat tetapi menggunakan teknik kompleks yang mungkin tidak penting untuk semua aplikasi.

Algoritma VCL untuk log2

Fungsi log2 VCL melibatkan langkah berikut:

  1. Mengekstrak dan menukar bit eksponen kepada a terapung.
  2. Melaraskan mantissa kepada [0.5, 1.0) atau (0.5, 1.0], diikuti dengan penolakan sebanyak 1.0.
  3. Menggunakan anggaran polinomial untuk mengira log(x) sekitar x=1.0 , menggunakan sama ada polinomial tertib ke-5 tunggal (berganda) atau nisbah dua tertib ke-5 polinomial (terapung).
  4. Menambah eksponen polynomial_approx_log(mantissa) untuk mendapatkan hasil akhir.

Langkah-Langkah untuk Meningkatkan Ketepatan dan Kelajuan

Untuk meningkatkan ketepatan:

  • Pertimbangkan untuk menggunakan polinomial yang lebih tepat anggaran.
  • Elakkan penolakan sebanyak 1.0 (tinggalkan sebagai mantissa - 1.0) untuk mengurangkan potensi kehilangan ketepatan.

Untuk mengoptimumkan kelajuan:

  • Gunakan polinomial terpenggal anggaran dengan istilah yang lebih sedikit.
  • Gunakan arahan bervektor untuk memproses berbilang nilai secara serentak.
  • Hapuskan semakan yang tidak perlu untuk kes khas (cth., aliran bawah, limpahan, denormal) jika nilai input diketahui terhingga dan positif.

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan log2(__m256d) dengan Cekap dalam AVX2 tanpa Ketergantungan Pengkompil Intel?. 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