*** JMFFT 7.2 - é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