2009-03-09 4 views

Répondre

3

CUDA est probablement une meilleure option, si vous savez que votre architecture cible utilise des puces nVidia. Vous avez un contrôle total sur vos transferts de données, les chemins d'instructions et l'ordre des opérations. Vous pouvez aussi vous débrouiller avec beaucoup moins d'appels __syncthreads lorsque vous travaillez au niveau inférieur.

DirectX 10 sera plus facile à interfacer, je pense, mais si vous voulez vraiment pousser votre optimisation de vitesse, vous devez contourner la couche supplémentaire. DirectX 10 ne saura pas non plus utiliser la mémoire de texture par rapport à la mémoire constante par rapport à la mémoire partagée, et cela dépendra de votre algorithme particulier.

Si vous avez accès à une Tesla C1060 ou quelque chose comme ça, CUDA est de loin le meilleur choix. Vous pouvez vraiment accélérer les choses si vous connaissez les spécificités de votre GPGPU - j'ai vu des accélérations de 188x dans un algorithme particulier sur un Tesla par rapport à mon bureau.

0

Eh bien, CUDA est portable ... C'est une grande victoire si vous me demandez ...

+0

CUDA est portable de Windows vers Linux - ou si je comprends bien - mais pas des GPU NVidia à ATI. –

1

je trouve CUDA maladroit. Ce n'est pas C, mais un sous-ensemble. Il ne prend pas en charge nativement le flottant en double précision et est émulé. Pour la précision simple, c'est correct. Cela dépend du type de tâche que vous lancez. Vous devez passer plus de temps à calculer en parallèle que de passer les données pour qu'elles soient utiles. Mais cette question n'est pas unique à CUDA.

J'attendais l'OpenCL d'Apple qui semble être le standard de l'industrie pour l'informatique parallèle.

+0

Etes-vous sûr de la double précision? –

0

CUDA n'a rien à voir avec la prise en charge des opérations en virgule flottante en double précision. Cela dépend du matériel disponible. Les séries 9, 100, 200 et Tesla prennent en charge les opérations à virgule flottante double précision tesla.

0

Il devrait être facile de décider entre eux.

Si votre application peut tolérer qu'elle soit spécifique à Windows, vous pouvez toujours envisager DirectX Compute. Sinon, utilisez CUDA ou OpenCL.

Si votre application ne peut pas tolérer un verrou fournisseur sur NVIDIA, vous ne pouvez pas utiliser CUDA, vous devez utiliser OpenCL ou DirectX Compute. Si votre application exécute DirectX interop, sachez que CUDA/OpenCL entraînera des interruptions de changement de contexte pour l'interopérabilité de l'API graphique, ce qui n'est pas le cas de DirectX Compute.

À moins qu'un ou plusieurs de ces critères n'affectent votre application, utilisez l'arrière grand-père de chaînes d'outils massivement parallèles: CUDA.

Questions connexes