2017-08-17 2 views
1

J'ai une routine qui est conçue pour être appelée dans l'un des trois modes de traitement; SingleCpuThread, ParallelCpuThreads et ParallelGpuThreads.Utilisation de Alea Gpu DeviceFunction lorsque la routine est traitée sur le processeur

Dans la routine, le calcul est effectué à l'aide de Alea.DeviceFunction afin d'être conforme à Alea lorsque la routine est appelée dans le mode ParallelGpuProcessing. Question: Lorsque la même routine est appelée sous les deux autres modes, et que le calcul est effectué en utilisant DeviceFunction, est-ce en utilisant le Gpu et en encourageant le surcoût et le marshaling, etc.? Et si c'est le cas (ce qui serait mauvais), quelle est la meilleure façon de laisser la même routine utiliser les fonctions .Math de dot net au lieu de .DeviceFunction, sans dupliquer la routine entière pour les versions séparées Cpu-happy et Gpu-happy de la routine ?

Répondre

1

Comme l'indiquent les fonctions de périphérique, les fonctions s'exécutent sur le GPU, en supposant que toutes les données sont là. Par conséquent, il n'y a pas de frais de marshaling.

Pour simplifier la réutilisation du code CPU/GPU, la plupart des fonctions de l'appareil sont implémentées pour s'exécuter également sur la CPU. Certaines fonctions de l'appareil n'ont toutefois aucun sens sur le CPU, comme par exemple la fonction de vote. Cela signifie que vous pouvez simplement utiliser les fonctions de l'appareil et alors vous saurez que Alea GPU sera le plus rapide sur GPU. Le compilateur mappe également certaines des fonctions mathématiques .NET automatiquement aux fonctions de périphérique GPU.

+0

Merci pour votre réponse. Si je vous comprends bien, alors ... Lorsque l'application s'exécute en mode de traitement ParallelGpuThreads (mon énumération), alors mes données sont sur le GPU et les DeviceFunctions s'exécutent sur le GPU, et il n'y a aucun problème. Cependant, lorsque l'application s'exécute sous les modes de traitement SingleCpuThread, ParallelCpuThreads (mes enums), alors mes données sont sur le CPU et les DeviceFunctions peuvent ou non s'exécuter sur le GPU, ce qui peut poser problème ou non, cela exigerait que les données soient rassemblées en Gpu inutilement (un coup de performance). – cayman

+0

Étant donné que la fonction DeviceFunctions est capable de fonctionner sur Cpu est fonction par fonction, existe-t-il une documentation à ce sujet ou existe-t-il un autre moyen de savoir avec certitude? Les DeviceFunctions que mes routines utilisent sont ... - DeviceFunction.IsNaN - DeviceFunction.Log10 - DeviceFunction.Sqrt - DeviceFunction.Abs – cayman