Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk Memuatkan 8 Aksara ke dalam Pembolehubah __m256 sebagai Terapung Ketepatan Tunggal Berbungkus?

Bagaimana untuk Memuatkan 8 Aksara ke dalam Pembolehubah __m256 sebagai Terapung Ketepatan Tunggal Berbungkus?

Patricia Arquette
Patricia Arquetteasal
2024-11-03 13:21:30569semak imbas

How to Load 8 Chars into an __m256 Variable as Packed Single Precision Floats?

Memuatkan 8 Aksara daripada Memori ke dalam Pembolehubah __m256 sebagai Terapung Ketepatan Tunggal Berbungkus

Dalam usaha mengoptimumkan algoritma untuk Gaussian blur, anda cuba menggantikan penggunaan penimbal apungan dengan pembolehubah intrinsik __m256. Soalan ini bertujuan untuk menentukan arahan optimum untuk tugasan ini.

Arahan untuk Seni Bina AVX2:

  • Gunakan PMOVZX untuk melanjutkan sifar aksara anda menjadi 32-bit integer dalam daftar 256b.
  • Tukar kepada terapung di tempat dengan VCVTDQ2PS.
; rsi = new_image
VPMOVZXBD   ymm0,  [rsi]   ; or SX to sign-extend  (Byte to DWord)
VCVTDQ2PS   ymm0, ymm0     ; convert to packed foat

Strategi Tambahan:

  • Pertimbangkan untuk menggunakan beban siaran 128-bit untuk menyuap vpmovzxbd ymm,xmm dan vpshufb ymm (_mm256_shuffle_epi8) untuk 64 bit tinggi. Pendekatan ini mengurangkan kiraan uop dan boleh memberi manfaat pada CPU Ryzen.
  • Elakkan menggunakan arahan shuffle tambahan, kerana ia mungkin menjadi halangan apabila shuffle sudah menjadi had.

Arahan untuk Seni Bina AVX1:

  • Lakukan langkah berikut:

    VPMOVZXBD   xmm0,  [rsi]
    VPMOVZXBD   xmm1,  [rsi+4]
    VINSERTF128 ymm0, ymm0, xmm1, 1   ; put the 2nd load of data into the high128 of ymm0
    VCVTDQ2PS   ymm0, ymm0     ; convert to packed float

Pertimbangan Intrinsik:

  • GCC dan MSVC mungkin memerlukan pengendalian khas untuk memastikan penjanaan kod optimum apabila menggunakan intrinsik untuk VPMOVZXBD ymm,[mem].
  • Pertimbangkan untuk menggunakan intrinsik _mm_loadl_epi64 sebaliknya, yang boleh dilipat ke dalam operan memori untuk asm optimum pada -O3 dengan GCC pada GCC versi 9 dan lebih baru.
  • Untuk pengoptimuman AVX1 sahaja, menulis versi intrinsik ialah latihan yang tidak menyeronokkan.

Atas ialah kandungan terperinci Bagaimana untuk Memuatkan 8 Aksara ke dalam Pembolehubah __m256 sebagai Terapung Ketepatan Tunggal Berbungkus?. 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