[cig-commits] r20798 - in seismo/3D/SPECFEM3D/trunk/src: cuda specfem3D

dkomati1 at geodynamics.org dkomati1 at geodynamics.org
Sat Sep 29 09:28:36 PDT 2012


Author: dkomati1
Date: 2012-09-29 09:28:36 -0700 (Sat, 29 Sep 2012)
New Revision: 20798

Modified:
   seismo/3D/SPECFEM3D/trunk/src/cuda/prepare_constants_cuda.h
   seismo/3D/SPECFEM3D/trunk/src/cuda/prepare_mesh_constants_cuda.cu
   seismo/3D/SPECFEM3D/trunk/src/specfem3D/Makefile.in
Log:
applied Peter Messmer's patch to use some improved features of CUDA5;
kept the old version as well using #ifdef USE_OLDER_CUDA4_GPU


Modified: seismo/3D/SPECFEM3D/trunk/src/cuda/prepare_constants_cuda.h
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/cuda/prepare_constants_cuda.h	2012-09-29 01:00:58 UTC (rev 20797)
+++ seismo/3D/SPECFEM3D/trunk/src/cuda/prepare_constants_cuda.h	2012-09-29 16:28:36 UTC (rev 20798)
@@ -89,7 +89,11 @@
     exit(1);
   }
 
+#ifdef USE_OLDER_CUDA4_GPU
   err = cudaGetSymbolAddress((void**)&(mp->d_hprime_xx),"d_hprime_xx");
+#else
+  err = cudaGetSymbolAddress((void**)&(mp->d_hprime_xx),d_hprime_xx);
+#endif
   if(err != cudaSuccess) {
     fprintf(stderr, "Error with d_hprime_xx: %s\n", cudaGetErrorString(err));
     exit(1);
@@ -142,7 +146,11 @@
     exit(1);
   }
 
+#if USE_OLDER_CUDA4_GPU
   err = cudaGetSymbolAddress((void**)&(mp->d_hprimewgll_xx),"d_hprimewgll_xx");
+#else
+  err = cudaGetSymbolAddress((void**)&(mp->d_hprimewgll_xx),d_hprimewgll_xx);
+#endif
   if(err != cudaSuccess) {
     fprintf(stderr, "Error with d_hprimewgll_xx: %s\n", cudaGetErrorString(err));
     exit(1);
@@ -196,7 +204,11 @@
     exit(1);
   }
   //mp->d_wgllwgll_xy = d_wgllwgll_xy;
+#ifdef USE_OLDER_CUDA4_GPU
   err = cudaGetSymbolAddress((void**)&(mp->d_wgllwgll_xy),"d_wgllwgll_xy");
+#else
+  err = cudaGetSymbolAddress((void**)&(mp->d_wgllwgll_xy),d_wgllwgll_xy);
+#endif
   if(err != cudaSuccess) {
     fprintf(stderr, "Error with d_wgllwgll_xy: %s\n", cudaGetErrorString(err));
     exit(1);
@@ -213,7 +225,11 @@
     exit(1);
   }
   //mp->d_wgllwgll_xz = d_wgllwgll_xz;
+#if USE_OLDER_CUDA4_GPU
   err = cudaGetSymbolAddress((void**)&(mp->d_wgllwgll_xz),"d_wgllwgll_xz");
+#else
+  err = cudaGetSymbolAddress((void**)&(mp->d_wgllwgll_xz),d_wgllwgll_xz);
+#endif
   if(err != cudaSuccess) {
     fprintf(stderr, "Error with d_wgllwgll_xz: %s\n", cudaGetErrorString(err));
     exit(1);
@@ -230,7 +246,11 @@
     exit(1);
   }
   //mp->d_wgllwgll_yz = d_wgllwgll_yz;
+#if USE_OLDER_CUDA4_GPU
   err = cudaGetSymbolAddress((void**)&(mp->d_wgllwgll_yz),"d_wgllwgll_yz");
+#else
+  err = cudaGetSymbolAddress((void**)&(mp->d_wgllwgll_yz),d_wgllwgll_yz);
+#endif
   if(err != cudaSuccess) {
     fprintf(stderr, "Error with d_wgllwgll_yz: %s\n", cudaGetErrorString(err));
     exit(1);
@@ -247,7 +267,11 @@
     exit(1);
   }
   //mp->d_wgll_cube = d_wgll_cube;
+#if USE_OLDER_CUDA4_GPU
   err = cudaGetSymbolAddress((void**)&(mp->d_wgll_cube),"d_wgll_cube");
+#else
+  err = cudaGetSymbolAddress((void**)&(mp->d_wgll_cube),d_wgll_cube);
+#endif
   if(err != cudaSuccess) {
     fprintf(stderr, "Error with d_wgll_cube: %s\n", cudaGetErrorString(err));
     exit(1);

Modified: seismo/3D/SPECFEM3D/trunk/src/cuda/prepare_mesh_constants_cuda.cu
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/cuda/prepare_mesh_constants_cuda.cu	2012-09-29 01:00:58 UTC (rev 20797)
+++ seismo/3D/SPECFEM3D/trunk/src/cuda/prepare_mesh_constants_cuda.cu	2012-09-29 16:28:36 UTC (rev 20798)
@@ -41,6 +41,19 @@
 #include "mesh_constants_cuda.h"
 #include "prepare_constants_cuda.h"
 
+#ifdef USE_OLDER_CUDA4_GPU
+#else
+  #ifdef USE_TEXTURES_FIELDS
+extern texture<realw, cudaTextureType1D, cudaReadModeElementType> d_displ_tex;
+extern texture<realw, cudaTextureType1D, cudaReadModeElementType> d_accel_tex;
+  #endif
+
+  #ifdef USE_TEXTURES_CONSTANTS
+extern texture<realw, cudaTextureType1D, cudaReadModeElementType> d_hprime_xx_tex;
+  #endif
+#endif
+
+
 /* ----------------------------------------------------------------------------------------------- */
 
 // helper functions
@@ -177,10 +190,15 @@
   // in the code with with #USE_TEXTURES_FIELDS not-defined.
   #ifdef USE_TEXTURES_CONSTANTS
   {
-    const textureReference* d_hprime_xx_tex_ptr;
-    print_CUDA_error_if_any(cudaGetTextureReference(&d_hprime_xx_tex_ptr, "d_hprime_xx_tex"), 4101);
-    cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
-    print_CUDA_error_if_any(cudaBindTexture(0, d_hprime_xx_tex_ptr, mp->d_hprime_xx, &channelDesc, sizeof(realw)*(NGLL2)), 4001);
+    #ifdef USE_OLDER_CUDA4_GPU
+      const textureReference* d_hprime_xx_tex_ptr;
+      print_CUDA_error_if_any(cudaGetTextureReference(&d_hprime_xx_tex_ptr, "d_hprime_xx_tex"), 4101);
+      cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
+      print_CUDA_error_if_any(cudaBindTexture(0, d_hprime_xx_tex_ptr, mp->d_hprime_xx, &channelDesc, sizeof(realw)*(NGLL2)), 4001);
+   #else
+      cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
+      print_CUDA_error_if_any(cudaBindTexture(0, &d_hprime_xx, mp->d_hprime_xx, &channelDesc, sizeof(realw)*(NGLL2)), 4001);
+   #endif
   }
   #endif
 
@@ -691,15 +709,25 @@
 
   #ifdef USE_TEXTURES_FIELDS
   {
-    print_CUDA_error_if_any(cudaGetTextureReference(&mp->d_displ_tex_ref_ptr, "d_displ_tex"), 4001);
-    cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
-    print_CUDA_error_if_any(cudaBindTexture(0, mp->d_displ_tex_ref_ptr, mp->d_displ, &channelDesc, sizeof(realw)*(*size)), 4001);
+    #ifdef USE_OLDER_CUDA4_GPU
+      print_CUDA_error_if_any(cudaGetTextureReference(&mp->d_displ_tex_ref_ptr, "d_displ_tex"), 4001);
+      cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
+      print_CUDA_error_if_any(cudaBindTexture(0, mp->d_displ_tex_ref_ptr, mp->d_displ, &channelDesc, sizeof(realw)*(*size)), 4001);
+    #else
+      cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
+      print_CUDA_error_if_any(cudaBindTexture(0, &d_displ_tex, mp->d_displ, &channelDesc, sizeof(realw)*(*size)), 4001);
+    #endif
   }
 
   {
-    print_CUDA_error_if_any(cudaGetTextureReference(&mp->d_accel_tex_ref_ptr, "d_accel_tex"), 4003);
-    cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
-    print_CUDA_error_if_any(cudaBindTexture(0, mp->d_accel_tex_ref_ptr, mp->d_accel, &channelDesc, sizeof(realw)*(*size)), 4003);
+    #ifdef USE_OLDER_CUDA4_GPU
+      print_CUDA_error_if_any(cudaGetTextureReference(&mp->d_accel_tex_ref_ptr, "d_accel_tex"), 4003);
+      cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
+      print_CUDA_error_if_any(cudaBindTexture(0, mp->d_accel_tex_ref_ptr, mp->d_accel, &channelDesc, sizeof(realw)*(*size)), 4003);
+    #else
+      cudaChannelFormatDesc channelDesc = cudaCreateChannelDesc<float>();
+      print_CUDA_error_if_any(cudaBindTexture(0, &d_accel_tex, mp->d_accel, &channelDesc, sizeof(realw)*(*size)), 4003);
+    #endif
   }
   #endif
 

Modified: seismo/3D/SPECFEM3D/trunk/src/specfem3D/Makefile.in
===================================================================
--- seismo/3D/SPECFEM3D/trunk/src/specfem3D/Makefile.in	2012-09-29 01:00:58 UTC (rev 20797)
+++ seismo/3D/SPECFEM3D/trunk/src/specfem3D/Makefile.in	2012-09-29 16:28:36 UTC (rev 20798)
@@ -45,8 +45,10 @@
 @COND_CUDA_TRUE at NVCC = nvcc
 @COND_CUDA_FALSE at NVCC = @CC@
 
- at COND_CUDA_TRUE@NVCC_FLAGS = $(CUDA_INC) $(MPI_INC) $(COND_MPI_CPPFLAGS) -DCUDA -gencode=arch=compute_20,code=sm_20
+ at COND_CUDA_TRUE@NVCC_FLAGS = $(CUDA_INC) $(MPI_INC) $(COND_MPI_CPPFLAGS) -dc -DCUDA -gencode=arch=compute_35,code=sm_35
+ at COND_CUDA_TRUE@NVCCLINK = $(NVCC) -dlink $(CUDA_INC) $(MPI_INC) $(COND_MPI_CPPFLAGS) -DCUDA -gencode=arch=compute_35,code=sm_35
 @COND_CUDA_FALSE at NVCC_FLAGS = $(MPI_INC) $(COND_MPI_CPPFLAGS)
+ at COND_CUDA_FALSE@NVCCLINK = $(NVCC) $(NVCC_FLAGS)
 
 # OpenMP
 # with configure: ./configure --with-openmp FLAGS_NO_CHECK="-openmp .." OPENMP_LIB=.. 
@@ -282,6 +284,7 @@
 # rules for the pure Fortran version
 @COND_PYRE_FALSE@# solver also depends on values from mesher
 @COND_PYRE_FALSE at xspecfem3D: $(XSPECFEM_OBJECTS) $(COND_MPI_OBJECTS) $(COND_OPENMP_OBJECTS)
+ at COND_PYRE_FALSE@	${NVCCLINK} -o $(CUDA_DEVICE_OBJ) $(CUDA_OBJECTS)
 @COND_PYRE_FALSE@	${FCLINK} -o ${E}/xspecfem3D $(XSPECFEM_OBJECTS) $(COND_MPI_OBJECTS) $(MPILIBS) $(COND_OPENMP_OBJECTS) $(OPENMP_LIBS) $(CUDA_LINK)
 @COND_PYRE_FALSE@
 



More information about the CIG-COMMITS mailing list