Maison  >  Article  >  développement back-end  >  Comment charger 8 caractères de la mémoire dans une variable __m256 : trois approches efficaces

Comment charger 8 caractères de la mémoire dans une variable __m256 : trois approches efficaces

Barbara Streisand
Barbara Streisandoriginal
2024-11-03 15:52:02160parcourir

How to Load 8 Characters from Memory into an __m256 Variable: Three Efficient Approaches

Chargement de 8 caractères de la mémoire dans une variable __m256 : une analyse

Problème :

Vous souhaitez optimiser un algorithme pour le flou gaussien sur une image en remplaçant un tampon flottant[8] par une variable intrinsèque __m256 pour améliorer les performances.

Solution 1 : Utiliser PMOVZX et VCVTDQ2PS d'AVX2

Ceci L'approche utilise PMOVZX pour étendre les caractères 8 bits en entiers 32 bits, puis les convertit en valeurs à virgule flottante via VCVTDQ2PS. Plus précisément :

VPMOVZXBD   ymm0,  [rsi]   ; Byte to DWord
VCVTDQ2PS   ymm0, ymm0     ; convert to packed float

Solution 2 : combiner la charge de diffusion et le brassage

Cette stratégie consiste à effectuer une charge de diffusion de 128 bits pour produire un vecteur de contrôle aléatoire de 64 bits. pour vpshufb, permettant une extension nulle et une conversion float compressée. Il offre un débit élevé en éliminant le besoin d'instructions de lecture aléatoire supplémentaires.

VPMOVSXBD   xmm0,  [rsi]   ; Byte to DWord
VPMOVSXBD   xmm1,  [rsi+4] 
VINSERTF128 ymm0, ymm0, xmm1, 1   
VCVTDQ2PS   ymm0, ymm0     ; convert to packed float.

Solution 3 : Gestion des limitations d'AVX1

En l'absence d'AVX2, les étapes suivantes peuvent être utilisés :

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.

Remarques supplémentaires :

  • Envisagez d'utiliser VPADDQ au lieu de VCVTDQ2PS pour une amélioration supplémentaire des performances.
  • Soyez prudent d'optimisations potentielles du compilateur dans différents langages.
  • Référez-vous aux ressources spécifiques liées dans la solution pour des informations supplémentaires.

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