2009-11-27 3 views
2

J'écris une bibliothèque graphique en C et je voudrais utiliser les instructions SSE pour accélérer certaines fonctions. Comment ferais-je cela? J'utilise le compilateur GCC pour pouvoir compter sur les intrinsèques du compilateur. Je voudrais aussi savoir si je devrais changer la façon dont je stocke les données d'image (actuellement j'utilise juste un tableau de flotteurs) - ai-je besoin d'utiliser un tableau de type float __attribute__ ((vector_size (16)))?Manipulation d'image rapide à l'aide des instructions SSE?

EDIT: le type de manipulation d'image/traitement Je suis intéressé par inclure des transformations affines, la géométrie et le filtrage de domaine de fréquence (analyse de Fourier)

Toute référence ou des conseils sur la façon dont je devrais aller sur l'utilisation de l'ESS pour la manipulation d'images en C serait très apprécié.

grâce

+0

Vous devez décrire les algorithmes de votre bibliothèque. Pas besoin de tout prématurément convertir tout pour flotter ... il y a beaucoup d'instructions SSE qui traitent de char, short et int, certaines sont spécifiquement conçues pour une étape de traitement d'image typique (comme MPSADBW). Et aimez-vous l'assemblage de bas niveau de programmation et de truc? Sinon, SSE n'est probablement pas pour vous. – hirschhornsalz

+0

drhirsh, Ma bibliothèque prendra en charge les fonctions standard telles que la rotation, l'échelle, le cisaillement, les composites, la géométrie, etc. Il y aura donc beaucoup de travail de matrice. Aussi je recherche le traitement d'image de domaine de fréquence (transformées de Fourier et tels). Oui, je suis très intéressé par faire plus de programmation au niveau de l'assemblage, j'ai fait un peu dans le passé et en profiter :) Des conseils sur où je vais pour en savoir plus sur SSE et manipulation/traitement d'image? :) – horseyguy

+1

@banister: Vous pouvez trouver quelques-uns des liens que j'ai publiés sur http://stackoverflow.com/questions/1389712/getting-started-with-sse/1795196#1795196 utiles pour en savoir plus sur SSE en général. Je n'ai pas d'expérience avec le traitement d'image. – int3

Répondre

2

Je travaille sur un certain traitement de l'image avec SSE sur Microsoft Visual C++. J'ai trouvé qu'il est plus facile d'aligner toutes les données d'image (dans Visual C++ qui est fait avec _aligned_malloc et _aligned_free) dès le début. L'alignement est une vraie douleur cependant, c'est pourquoi j'ai seulement utilisé SSE pour les opérations arithmétiques (ajouter, soustraire, produit scalaire, ce genre de choses). Si je devais faire des choses plus compliquées, je n'utilisais généralement que des pointeurs.

+0

heya merci pour votre réponse! :) Cependant, je voudrais un peu plus d'informations sur la façon dont vous l'avez fait :) Avez-vous un exemple de code illustrant une opération simple sur une image en utilisant SSE? Des conseils ou des pièges que je devrais être au courant? Faisiez-vous confiance à l'intris en ligne ou à l'intris du compilateur? etc :) merci – horseyguy

+1

Génial. J'ai utilisé les intrinsèques du compilateur. Aucun piège évident, assurez-vous que tout est aligné, c'est tout. Il m'est difficile de vous montrer un exemple de code car j'ai tout fait avec des templates C++, donc il y a beaucoup de niveaux d'abstraction derrière une simple opération d'addition. J'ai appris des exemples de CodeProject.com cependant, vérifiez là pour quelques bons exemples. –

Questions connexes