Comment faire en sorte que GCC utilise plus de deux registres SIMD lors de l’utilisation d’intrinsèques?

StackOverflow https://stackoverflow.com/questions/124405

  •  02-07-2019
  •  | 
  •  

Question

J'écris du code et j'essaie de l'accélérer à l'aide des composants intrinsèques SIMD SSE2 / 3. Mon code est d'une nature telle que je dois charger des données dans un registre XMM et y donner suite plusieurs fois. Quand je regarde le code assembleur généré, il semble que GCC continue à vider les données en mémoire, afin de recharger quelque chose d'autre dans XMM0 et XMM1. Je suis en train de compiler pour x86-64 alors j’ai 15 registres. Pourquoi GCC n'en utilise-t-il que deux et que puis-je faire pour lui demander d'en utiliser davantage? Existe-t-il un moyen que je peux "épingler"? une valeur dans un registre? J'ai ajouté le " register " mot-clé de ma définition de variable, mais le code d'assembly généré est identique.

Était-ce utile?

La solution

Oui, vous pouvez. Reg Vars explicite explique la syntaxe à utiliser pour épingler une variable à un registre spécifique.

Autres conseils

Si vous en êtes au point de spécifier des registres individuels pour chaque élément intrinsèque, vous pouvez également simplement écrire le répertoire d'assemblage, en particulier compte tenu de la vilaine habitude de gcc de pessimiser les éléments intrinsèques inutilement dans de nombreux cas.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top