2010-06-01 4 views
3

J'ai travaillé sur de nombreux problèmes de correspondance de données et très souvent, ils se résument à exécuter rapidement et en parallèle de nombreuses implémentations d'algorithmes intensifs de CPU tels que Hamming/Edit distance. Est-ce le genre de chose pour lequel CUDA serait utile?Quels types de problèmes de traitement de données CUDA aiderait?

Quels types de problèmes de traitement de données avez-vous résolus avec? Y at-il vraiment un soulèvement sur le bureau Intel standard quad-core?

Chris

Répondre

5

Je pense que vous avez répondu à votre propre question. En général, CUDA/OpenCL accélère les opérations massivement parallèles. Nous avons utilisé CUDA pour effectuer diverses opérations DSP (FFT, FIR) et vu des accélérations de l'ordre de grandeur. L'ordre de grandeur des accélérations avec quelques centaines de dollars est une bonne affaire. Alors que les librairies spécialisées comme MKL et OpenMP nous ont permis d'augmenter considérablement la vitesse, CUDA/OpenCL est beaucoup plus rapide.

Vérifiez here pour des exemples d'une utilisation de CUDA

1

D'une part, dans SIGGRAPH '09 ils ont fait preuve d'un CUDA implementation of Vray for Maya. Ray-tracing en temps réel et qualité de prévisualisation à 20 fps avec une carte de 200 $? Je pense que cela aide grandement.

1

oui, c'est le domaine principal de CUDA. Son efficacité est maximale si les conditions suivantes sont vraies:

  1. Le traitement de l'élément ne dépend pas des résultats du traitement de l'autre.
  2. Pas de ramification. Ou au moins les éléments adjacents se ramifient de la même manière.
  3. Les éléments sont répartis uniformément dans la mémoire.

Bien sûr, il y a vraiment peu de tâches qui tombent dans ces conditions. En fonction de votre distance, l'efficacité diminuera. Parfois, vous devez réécrire complètement votre algorithme pour maximiser l'utilisation.

1

CUDA a été utilisé pour améliorer considérablement la vitesse de tomographie assistée par ordinateur, le FASTRA project par exemple effectue au même niveau supercalculateurs (pas seulement les ordinateurs de bureau quad-core!) Tout en étant assemblé en matériel de consommation pour quelques milliers d'euros.

D'autres sujets de recherche que je connais sont l'optimisation de l'essaim et le traitement audio en temps réel.

En général: la technique peut être utilisée dans tous les domaine où toutes les données doivent être traitées de la même façon puisque tous les cœurs se produiront la même opération. Si votre problème se résume à ce genre d'opérations, vous êtes prêt à partir :). Dommage que tout ne tombe pas dans cette catégorie ...

1

Il existe généralement deux types de parallélisme: le parallélisme des tâches et le parallélisme des données. Les processeurs accélèrent au premier et les GPU au second. La raison en est que les CPU ont une prédiction de branchement sophistiquée, un matériel d'exécution hors d'usage et des pipelines à plusieurs étages qui leur permettent d'exécuter des tâches indépendantes en parallèle (par exemple 4 tâches indépendantes sur un quad-core). D'un autre côté, les GPU ont éliminé la majeure partie de la logique de contrôle et ont à la place beaucoup d'ALU. Ainsi, pour les tâches avec parallélisme de données (simple ajout de matrice, par exemple), le GPU peut tirer parti de ses nombreuses ALU pour fonctionner sur ces données en parallèle.Quelque chose comme la distance de Hamming serait génial pour un GPU puisque vous comptez juste le nombre de différences entre deux chaînes, où chaque caractère est différent basé uniquement sur la position, et indépendant de tout autre caractère dans la même chaîne.

Questions connexes