add Opencl support to SPECFEM3D

Bonjour,

On vient de terminer la mise en place du support OpenCL dans la branche devel (commit 7be81d6deb du 05/05) du GIT specfem3d_globe.

Au niveau de la configuration, OpenCL s'active de la façon suivante:

> ./configure --with-opencl OCL_LIB=.. OCL_INC=.. OCL_GPU_FLAGS=..

La configuration Cuda n'a pas changee,

> ./configure --with-cuda=cuda5 CUDA_FLAGS=.. CUDA_LIB=.. CUDA_INC=.. MPI_INC=.. ..

et les deux runtimes peuvent être compile simultanément en mergeant les deux lignes.


Au niveau de la configuration runtime, nous avons ajoute 3 options en plus du GPU_MODE:

> GPU_MODE                        = .true.
> GPU_RUNTIME                     = 2
> GPU_PLATFORM                    = NVIDIA
> GPU_DEVICE                      = Tesla

* GPU_RUNTIME, GPU_PLATFORM, GPU_DEVICE ne sont pas parse si le GPU_MODE n'est pas active
* GPU_RUNTIME peut prendre les valeurs 2 (OpenCL), 1 (Cuda) ou 0 (Compile-time, qui *ne* marche *pas* si specfem a ete compile avec --with-opencl *et* --with-cuda)
* GPU_PLATFORM et GPU_DEVICE sont des filtres (case insensitive) sur le nom de la plate-forme et du device en OpenCL, et uniquement le nom du device en Cuda
  * en multi-processeur (MPI), chaqu'un des processus prendra un GPU dans ce sous ensemble, en round-robin
  * un filtre "*" matchera toutes les plate-formes/devices



Sinon pas de modification importante je pense, le dossier src/cuda s'appelle maintenant src/gpu et, pareil, les wrappers Fortran/C ont été renommes _gpu au lieu de _cuda.
Dans le code, --with-opencl active la macro préprocesseur USE_OPENCL, et --with-cuda active USE_CUDA ; et GPU_RUNTIME va activer la variable globale run_opencl ou run_cuda.
Et comme le disait Brice, le support des textures n'a pas ete valide en OpenCL. Le code est ecrit et compile, mais il faudra finir le debugging quand les plate-formes
supporteront OpenCL 1.2.

Nous avons teste l’exécution sur les exemples regional_Greece_small et global_s362ani_small, et les sismogrammes sont identiques a ceux générés par la version d'origine.