Maison > développement back-end > C++ > le corps du texte

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

Barbara Streisand
Libérer: 2024-11-03 15:52:02
original
158 Les gens l'ont consulté

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
Copier après la connexion

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.
Copier après la connexion

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.
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!