Maison  >  Article  >  développement back-end  >  Comment charger 8 flotteurs dans une variable __m256 à l'aide des intrinsèques AVX ?

Comment charger 8 flotteurs dans une variable __m256 à l'aide des intrinsèques AVX ?

DDD
DDDoriginal
2024-11-02 00:22:30711parcourir

How to Load 8 Floats into an __m256 Variable Using AVX Intrinsics?

Chargement de 8 flotteurs de la mémoire dans la variable __m256

Votre objectif est de remplacer le tampon flottant[8] par une variable intrinsèque, __m256. Voici les instructions pour y parvenir :

Instructions AVX2 :

  1. Utilisez VPMOVZXBD ymm0, [rsi] pour étendre à zéro les octets en mémoire en 32- bits entiers.
  2. Convertissez les entiers en flottants avec VCVTDQ2PS ymm0, ymm0.

Instructions AVX1 :

  1. Utilisez VPMOVZXBD xmm0, [rsi] pour charger les quatre premiers octets.
  2. Chargez les quatre octets suivants avec VPMOVZXBD xmm1, [rsi 4].
  3. Insérez la deuxième charge dans les 128 bits supérieurs de ymm0 avec VINSERTF128 ymm0, ymm0, xmm1, 1.
  4. Convertissez en flottants avec VCVTDQ2PS ymm0, ymm0.

Optimisation Conseils :

  • Pour AVX2, envisagez d'utiliser une charge de diffusion 128 bits et VPMOVZXBD pour les performances.
  • Évitez d'utiliser VPMOVZXBD ymm, [mem] avec des éléments intrinsèques, car cela pourrait conduire à des optimisations manquées.
  • Pour AVX1, utilisez _mm_loadl_epi64 pour replier la charge dans l'instruction VPMOVZXBD pour un code optimal.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn