Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memuatkan 8 Aksara daripada Memori ke dalam Pembolehubah __m256 sebagai Terapung Ketepatan Tunggal Berbungkus Menggunakan AVX2?
Memuatkan 8 Aksara daripada Memori ke dalam Pembolehubah __m256 sebagai Terapung Ketepatan Tunggal Berbungkus
Dalam algoritma kabur Gaussian, pengoptimuman untuk pelaksanaan yang lebih pantas boleh dicapai dengan cekap memuatkan data ke dalam daftar vektor. Satu pengoptimuman sedemikian melibatkan menggantikan tatasusunan terapung dengan pembolehubah __m256. Artikel ini menyediakan penyelesaian optimum untuk tugas ini, memanfaatkan kuasa arahan AVX2.
Penyelesaian Menggunakan Arahan AVX2
Untuk memuatkan 8 aksara daripada memori ke dalam pembolehubah __m256 dengan berkesan menggunakan AVX2, arahan berikut disyorkan:
VPMOVZXBD ymm0, [rsi] ; or SX to sign-extend (Byte to DWord) VCVTDQ2PS ymm0, ymm0 ; convert to packed foat
Spesifik Arahan
Pengoptimuman Tambahan
Untuk mengoptimumkan lagi proses ini, pertimbangkan untuk menggunakan beban siaran untuk menyuap arahan VPMOVZXBD dan arahan Vpshufb untuk 64 bit tinggi. Strategi ini mengurangkan kiraan uop keseluruhan, meningkatkan kecekapan:
<code class="pseudocode">__m256 b = [float(new_image[x+7]), float(new_image[x+6]), ... , float(new_image[x])]; __m256 b = _mm256_broadcast_ss(&new_image[x]) _mm256_shuffle_epi8(b, _mm256_set1_epi8(0)); // fills upper 64 bits with zeroes _mm256_cvtps_epu32(b); // convert to integers _mm256_cvtepu32_ps(b); // convert back to floats</code>
Elak Teknik Suboptimum
Pertimbangan Tambahan
Atas ialah kandungan terperinci Bagaimana untuk Memuatkan 8 Aksara daripada Memori ke dalam Pembolehubah __m256 sebagai Terapung Ketepatan Tunggal Berbungkus Menggunakan AVX2?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!