1

Quel est le moyen le plus efficace de faire de l'image pyramidale dans CUDA? J'ai écrit mes propres noyaux pour le faire, mais imaginons que nous pouvons faire mieux.Pyramide d'image efficace dans CUDA?

La liaison à une texture OpenGL en utilisant OpenGL interop et en utilisant le mipmapping matériel serait probablement beaucoup plus rapide. Tout pointeur sur la procédure à suivre ou autre

+0

Veuillez ajouter quelques informations sur votre conception actuelle afin que nous sachions d'où vous partez. – koan

+0

http://en.wikipedia.org/wiki/Pyramid_%28image_processing%29 –

Répondre

1

MipMaps sont configurés lors de l'accès/de l'initialisation dans OpenGL/DirectX. Un noyau CUDA peut faire la même chose si vous allouez une texture 50% plus large (ou plus) que la texture initiale et utilisez le noyau pour échantillonner la texture et écrire le résultat à côté de la texture d'origine. Le noyau fonctionnera probablement mieux là où chaque thread évalue un pixel dans la prochaine image down-échantillonnée. C'est à vous de déterminer le schéma d'échantillonnage et de choisir les poids appropriés pour combiner les pixels. Essayez bilinear pour commencer, puis une fois qu'il fonctionne, vous pouvez configurer trilinéaire (cubique) ou d'autres schémas d'échantillonnage comme anisotropique, etc. L'échantillonnage simple (linéaire et cubique) sera probablement plus efficace puisque l'accès mémoire coalescé se produira (voir la programmation CUDA SDK guider). Vous devrez probablement paver l'exécution du noyau puisque le nombre de threads est limité pour l'invocation parallèle (trop de pixels, trop peu de threads = utiliser le pavage pour exécuter des blocs en parallèle). Vous pourriez trouver Mesa3D utile comme référence (c'est un open-source implémentation d'OpenGL).