2009-12-20 4 views
0

Y a-t-il un avantage à effectuer des opérations de bits sur les limites de mots? Toute optimisation CPU ou mémoire en faisant cela?Alignement des mots de 4 octets pour les opérations XOR

Problème réel: J'essaye de créer XOR de deux structure. Disons que structure-1 et structure-2 ont la même taille 10000 octets. Je laisse d'abord quelques centaines d'octets comme c'est et puis commencez XOR de 1 et 2. Disons que je commence par 302 pour commencer. Cela prendra 4 octets à la fois et faire XOR. 302, 303, 304 et 305 des deux structures seront XORed. Ce cycle sera répété jusqu'à 10000.

Maintenant, si je commence à partir de 304, y a-t-il une amélioration des performances attendues?

Répondre

4

Oui, il y a au moins deux avantages pour l'utilisation de l'alignement correct:

  1. portabilité. Tous les processeurs ne prennent pas en charge les numéros non alignés. Pour une portabilité maximale, n'utilisez que des nombres entièrement alignés (c'est-à-dire qu'un nombre entier de N octets commence à une adresse multiple de N)
  2. Vitesse. AFAIK, même un processeur qui prend en charge les numéros non alignés est encore plus rapide avec des numéros alignés.
3

L'optimisation prématurée est la racine de tous les maux

Il suffit de le faire de façon directe, puis l'optimiser si votre profileur vous dit qu'il est important. Oui, vous allez aller plus vite si vous êtes correctement aligné. Vous allez encore plus vite si vous utilisez les instructions XOR vectorielles SSE2, où correctement alignées vous le ferez 16 octets à la fois et ne polluerez pas le cache. Et il est très improbable que l'optimisation de ce soit où vous devriez passer votre temps.

+1

Merci pour la réponse. Je voudrais vraiment l'optimiser car, je fais cette opération toutes les secondes, la taille des données est de 40 000 octets et je le fais pendant 3 à 4 jours sans interruption. – Jack

+1

Eh bien, si vous êtes limité par le processeur, alors allez-y. Si vous ne parlez que 40.000 octets de données par seconde, je dirais que ça ne vaut pas la peine, sauf si vous utilisez un système embarqué et que vous essayez de minimiser la consommation d'énergie ou quelque chose comme ça. Sur un ordinateur portable moderne/ordinateur de bureau ce traitement est négligeable. –

1

Certains processeurs autorisent uniquement des opérations de 4 octets sur des limites de mots de 32 bits (certains ne les autorisent que sur des limites de demi-mot).

Sur ces processeurs, l'accès non aligné entraîne une exception de processeur qui, en fonction de l'UC, du système d'exploitation et des paramètres, provoquera un plantage du processus ou simplement beaucoup de travail pour le système d'exploitation.

Sur d'autres processeurs (par exemple x86), vous obtiendrez simplement l'impact sur les performances de devoir effectuer deux lectures et écritures (plus un peu de décalage) par opération.

Voir link text pour voir les problèmes avec les processeurs ARM

+2

"Sur ces processeurs, l'accès non aligné provoque une exception de processeur" - pas nécessairement. Les ARMs que j'ai utilisés tous, mais apparemment certains processeurs ARM ne piègent pas, ils vous donnent juste la mauvaise réponse. –

+0

Merci d'avoir mentionné l'exception et la mauvaise sortie. Je n'avais nullement connaissance de cela. Mon application ne va pas être utilisée avec ARM. – Jack

Questions connexes