2 votes

Comment transférer une partie d'un tableau de périphériques vers un autre tableau de périphériques en utilisant le compilateur PGI cuda fortran ?

Maintenant, je veux transférer une partie d'un tableau de périphériques à un autre tableau de périphériques en utilisant le code suivant :

program main
  implicit none
  integer :: a(5,5,5,5)
  integer, device :: a_d(5,5,5,5),b_d(5,5,5,5)
  a=0
  a_d=a
  b_d(1:2,:,:,:)=a_d(2:3,:,:,:)
end program

Le compilateur pgi renvoie l'erreur suivante pour b_d(1:2,:,:,:)=a_d(2:3,:,:,:) :

PGF90-S-0519- Plus d'un objet résidant dans le dispositif dans l'affectation.

Comment résoudre ce problème ou, existe-t-il un moyen efficace de transférer seulement une partie d'un tableau de dispositifs vers un autre tableau de dispositifs ?

1voto

talonmies Points 41460

La documentation indique ce qui suit :

3.4.2. Transfert de données implicite dans les expressions

Certains transferts de données limités peuvent être inclus dans des expressions. Sur règle générale, toutes les opérations arithmétiques ou autres doivent avoir lieu sur l'hôte, qui ne permet normalement qu'à un seul tableau de périphérique d'apparaître sur sur le côté droit d'une expression.

Je suis presque sûr que cela signifie qu'une affectation de découpage du type de celle que vous essayez de faire n'est pas prise en charge parce que vous avez un tableau de périphériques du côté gauche de l'expression.

Je ne sais pas quelle est la meilleure façon de résoudre ce problème. cudaMemcpy2D fonctionnera certainement si vous pouvez déduire le pas des tableaux. Espérons que quelqu'un de PGI pourra éditer une solution dans cette entrée wiki communautaire.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X