*** JMFFT 8.1 - émulation des FFTs de la SciLib de CRAY - (c) CNRS/IDRIS ***
NOM
JMSETNWORK - Permet d'informer les sous-programmes 2D et 3D de JMFFT
de la quantité d'espace de travail dont ils peuvent disposer
SYNTAXE
CALL JMSETNWORK(nwork)
IMPLEMENTATION
Il s'agit d'un sous-programme de service de JMFFT.
DESCRIPTION
Dans la SCILIB, les sous-programmes 2D et 3D sont un peu particuliers
vis-à-vis de la taille du tableau de travail WORK. Alors que tous
les autres sous-programmes exigent que le tableau WORK ait une dimension
suffisante pour le traitement en une seule passe, les sous-programmes
2D et 3D demandent seulement que le tableau WORK ait une dimension
suffisante pour le traitement en éventuellement plusieurs passes
de 128 transformées de Fourier. Ceci est plus économique en mémoire et
préserve les performances puisque la vectorisation se fait sur ce nombre
de transformées et que 128 est une valeur optimale pour la longueur des
vecteurs sur C90.
Sur d'autres architectures ce choix peut être loin de la valeur
optimale des longueurs de vecteurs, et il est donc intéressant de
pouvoir augmenter cette longueur en fournissant un tableau de
travail de dimension plus grande.
Malheureusement, même si on surdimensionne ce tableau, il n'existe
pas dans la SciLib de mécanisme pour permettre à l'utilisateur de
signaler qu'il a choisi une valeur différente de la valeur imposée
par la procédure.
C'est précisément le rôle de JMSETNWORK. Si on a surdimensionné le
tableau WORK, et si on a fourni à JMFFT la valeur de la dimension
déclarée via l'appel à JMSETNWORK, JMFFT utilisera l'intégralité
du tableau de travail, ce qui pourra permettre d'améliorer les
performances vectorielles.
Sachant que la valeur standard de la SciLib correspond à une
longueur de vectorisation de 128, il est donc facile d'en déduire
la dimension idéale du tableau WORK. Si par exemple sur la machine
utilisée la longueur optimale des vecteurs est de 1024, soit 8 fois
plus grand que sur C90, il suffira de multiplier par 8 la dimension
requise par la SciLib pour atteindre cette longueur de vectorisation
idéale.
ARGUMENTS
nwork Variable ou constante de type INTEGER
En entrée, il contient la valeur à fournir.
Non modifié en sortie.
EXEMPLES
INTEGER, PARAMETER :: M = 1024, N = 1024
COMPLEX, DIMENSION(0:N-1,0:M-1) :: X
REAL, DIMENSION(100+2*(N+M)) :: TABLE
! Note : WORK est 8 fois plus gros que necessaire
REAL, DIMENSION(4096*MAX(N,M)) :: WORK
INTEGER :: ISYS
INTEGER :: I, J
! ... (preparation de x)
CALL JMSETNWORK(4096*MAX(N,M))
CALL CCFFT2D(0,N,M,1.D0,X,N,X,N,TABLE,WORK,ISYS)
CALL CCFFT2D(1,N,M,1.D0,X,N,X,N,TABLE,WORK,ISYS)
! ... (suite du programme)
VOIR AUSSI
CCFFT2D, CCFFT3D, CSFFT2D, CSFFT3D, SCFFT2D, SCFFT3D