2009-06-12 7 views
3

J'ai une fonction qui divise un tiff multipage en pages simples et utilise la fonction BitBlt de Windows. En termes de performance, la carte vidéo aurait-elle une influence sur la répartition? Serait-il utile d'utiliser une bibliothèque droite C/C++ à la place?BitBlt Performance

+0

Etes-vous en train de rendre le tiff comme une image géante? – jjxtra

+0

@Jeff - non, je ne rends pas le tiff - je prends juste un tiff multipage et le diviser en fichiers contenant chaque page individuelle. –

+0

Quel format d'image sont vos nouveaux fichiers? – jjxtra

Répondre

2

La carte vidéo ne participera à aucune activité sauf s'il s'agit du HDC de destination du BitBlt. Une bibliothèque dédiée aux fonctions d'imagerie devrait être plus performante pour cette tâche, car vous finirez par les écrire sur disque.

Si vous modifiez les données d'image, il est possible que l'utilisation de votre carte vidéo vous aide; mais seulement si vous affichez beaucoup de nouvelles données d'image pour les tiffs de destination, en particulier les scènes 3D et autres.

+0

Une chose à retenir: un pilote spécifique à une carte est toujours optimisé pour accélérer le plus possible, tandis que le code basé sur CPU peut ne pas être optimisé. Ou le processeur peut ne pas prendre en charge les optimisations auxquelles le code a accès. Le support de fusion accélérée existe depuis longtemps et, en fonction de la disposition de l'architecture de la mémoire, vous pouvez obtenir un support pour le DMA automatique. Pour le débit en vrac, cela pourrait faire une grande différence. – Christopher

+1

La tâche à accomplir est de séparer les images TIFF. Une bibliothèque qui a été écrite avec une connaissance préalable d'une mise en page TIFF n'a pas besoin de faire toutes les autres étapes intermédiaires de création de HDC et d'objets de support. De plus, puisque les fichiers TIFF sont un format raster, il n'est pas nécessaire de faire des transformations comme on le ferait avec les JPEG et autres formats associés. – meklarian

2

Si BitBlt peut mapper les pages dans la mémoire vidéo, il y a de fortes chances que votre carte vidéo soit beaucoup, beaucoup plus rapide que la CPU. C'est pour plusieurs raisons:

  • La carte fonctionnera en parallèle avec votre CPU, de sorte que vous pouvez faire d'autres travaux pendant son fonctionnement.
  • La carte vidéo est optimisée pour effectuer les copies de mémoire par elle-même, au lieu de devoir faire en sorte que l'unité centrale copie chaque mot d'un endroit à un autre. Cela libère votre bus CPU pour d'autres choses.
  • La carte vidéo a probablement une taille de mot plus grande pour les mouvements de données, et si vous avez des indicateurs de fonctionnement attachés, ceux-ci seront probablement optimisés par le matériel. En outre, la mémoire de la plupart des cartes vidéo est plus rapide que la mémoire système.

Notez que ces choses ne sont pas toujours vraies. Par exemple, si votre carte partage la mémoire système, elle n'aura pas un accès plus rapide à la mémoire que le CPU. Cependant, vous obtenez toujours le support parallèle. Enfin, il y a la possibilité que le temps de transfert de l'image vers la carte et le dos surchargera l'amélioration de la vitesse que vous obtenez en le faisant sur la carte. Donc vous avez juste besoin d'expérimenter.

Je devrais ajouter - Je crois que vous devez spécifier que la mémoire est sur la carte dans le contexte de l'appareil. Je ne pense pas que la simple création d'un contexte de mémoire fasse quelque chose de particulier avec la carte vidéo.