Problèmerelation entre Managed Faire respecter cette discussion et OS fil (CUDA usecase)
Je suis en train de créer une application CUDA qui est bien intégré avec .net. L'objectif de conception est d'avoir plusieurs fonctions CUDA qui peuvent être appelées à partir du code managé. Les données doivent également pouvoir rester sur un périphérique entre les appels de fonction, de sorte qu'il puisse être transmis à plusieurs fonctions CUDA.
Il est important que chaque pièce de données est accessible uniquement par un seul thread OS (tel que requis par CUDA)
Ma stratégie
J'enroulant des fonctionnalités et des pointeurs de périphériques CUDA Code C++ géré. Un pointeur de périphérique CUDA peut être enveloppé dans une classe DevicePointer
écrite en MC++. Si la classe suit le thread qu'elle utilise, elle peut faire en sorte qu'un seul thread puisse accéder au pointeur de périphérique CUDA.
Je vais alors concevoir le programme de sorte qu'un seul thread essaye d'accéder à une donnée donnée.
Là où je besoin d'aide
Je l'ai fait quelques recherches, et lu sur la distinction entre les threads gérés et les fils OS. Il semble qu'il y ait, en général, une relation de plusieurs à plusieurs entre les deux. Cela signifie que même si je n'utilise qu'un seul thread géré, il peut changer les threads du système d'exploitation et perdre l'accès à un pointeur de périphérique.
Existe-t-il un moyen de forcer le CLR à ne pas déplacer un thread géré entre threads OS?
En fait, cela est important car la bibliothèque CUDA utilise le stockage TLS (thread local storage) sur le thread OS pour les contextes. Vous devez donc vous assurer que le thread géré reste lié au thread du système d'exploitation sur lequel il est né. –
Merci, Drew. Je ne le savais pas! –