Actuellement, CUDA n'autorise pas les noyaux imbriqués.Noyaux imbriqués dans CUDA
Pour être spécifique, j'ai le problème suivant: J'ai N nombre de données de dimension M. Pour traiter chacun des N points de données, trois noyaux doivent être exécutés dans une séquence. Depuis, l'imbrication des noyaux n'est pas autorisée, je ne peux pas créer un noyau avec des appels aux trois noyaux. Par conséquent, je dois traiter chaque point de données en série.
Une solution consiste à écrire un gros noyau contenant la fonctionnalité de tous les trois autres noyaux, mais je pense qu'il sera sous-optimal. Quelqu'un peut-il suggérer comment les flux peuvent être utilisés pour exécuter les N points de données en parallèle, tout en conservant les trois noyaux plus petits.
Merci.
Quel est le problème avec un gros noyau? – Anycorn
Je ne peux pas réaliser le parallélisme des grains fins. Disons que je fais trois opérations matricielles différentes sur un point de données. Je peux écrire le noyau pour chacun d'eux. En supposant que l'un des noyaux est une multiplication matricielle C = A * B. Le noyau de multiplication trouvera chaque entrée de C (i, j) en parallèle. Ce que je ne peux pas faire quand j'ai un gros noyau avec les trois opérations. Ce que fera le gros noyau, c'est de travailler avec des points de données en parallèle. – Prasanna
vous pouvez certainement exécuter plusieurs flux. est assez simple, fondamentalement le 4ème paramètre au lancement du noyau est le flux. Les noyaux lancés sur le même flux s'exécuteront séquentiellement, mais les noyaux lancés sur différents flux seront exécutés dans un ordre non synchronisé. Si vous avez des questions spécifiques sur la mise en œuvre, je pourrais vous aider avec cela – Anycorn