2009-10-12 13 views
1

J'ai une application MFC existante avec calcul matriciel avec des bibliothèques BLAS optimisées pour le processeur. Je suis intéressé à ajouter des fonctionnalités de calcul CuBLAS à mon projet, mais j'ai les deux questions suivantes:Utilisation de CUDA dans un projet MFC existant

1) Je ne suis pas sûr de devoir faire quelque chose en spécifiant mon propre noyau, thread et bloc CUDA configurations à ce stade. Si oui, quelles sections de l'architecture recommanderiez-vous le plus d'attention lors de la modification de l'algorithme?

2) Je m'intéresse à (a) créer un nouveau projet dans Visual Studio avec des fonctionnalités CuBLAS dans le programme, ou (b) intégrer des capacités CuBLAS dans un projet MFC existant. Toutefois, j'ai des difficultés à configurer correctement le projet Visual Studio pour qu'il fonctionne correctement avec le SDK CUDA, en suivant un guide tel que this, ce qui peut ne pas fonctionner si j'essaie de l'intégrer à un projet existant. Quelles seraient vos recommandations à ce sujet?

Merci d'avance pour les commentaires.

Répondre

2

1) Si vous n'utilisez que CUBLAS, vous n'avez pas besoin d'écrire votre propre noyau. CUBLAS est une collection de noyaux et d'enveloppes C regroupés dans une bibliothèque et conçus pour être facilement accessibles depuis d'autres programmes. Comprendre les détails des threads CUDA, des blocs, etc., n'est pas nécessaire pour utiliser CUBLAS.

2) Comme vous n'avez pas besoin d'écrire vos propres noyaux, vous n'avez pas besoin de créer un projet Visual Studio séparé avec le SDK CUDA. Vous avez seulement besoin de faire des appels de fonction à partir de votre projet existant dans cublas.dll (ou cublas.lib pour une liaison statique). Le chapitre 1 de CUBLAS_Library_2.3.pdf dans le CUDA Toolkit contient un exemple de programme montrant comment appeler CUBLAS à partir de C.

+0

Je sais que la compréhension des détails des threads CUDA, des blocs, etc. n'est pas nécessaire pour utiliser CUBLAS, mais serait-ce utile pour l'optimisation? fins? – stanigator

+1

Les threads, blocs, grilles, chaînes et mémoire partagée sont internes à un noyau, donc à moins de créer votre propre noyau ou de modifier la source d'un noyau existant, ce niveau de détail est probablement sans importance pour vous. Comme je l'ai mentionné dans ma réponse à votre autre question, le plus gros goulot d'étranglement est fréquemment le transfert de données de la mémoire principale à la mémoire vidéo sur le bus PCIe. Mais le guide de programmation CUDA explique tout cela très bien. Peut-être devriez-vous lire cela si vous voulez approfondir votre compréhension de l'architecture CUDA. – Gabriel

+0

Merci pour votre explication en profondeur. – stanigator

Questions connexes