Now CUDA parallel version works
authorIsaac Dooley <idooley2@illinois.edu>
Fri, 27 Apr 2007 02:11:07 +0000 (02:11 +0000)
committerIsaac Dooley <idooley2@illinois.edu>
Fri, 27 Apr 2007 02:11:07 +0000 (02:11 +0000)
src/libs/ck-libs/ParFUM-Tops/Makefile
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.cc
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.h

index bc5f20afd39185ec507c4a8579a59a08f25ce931..077400b58dbdb02067e20354f3b1085857340957 100644 (file)
@@ -1,10 +1,16 @@
 CDIR=../../../..
-CHARMC=$(CDIR)/bin/charmc -cc $(CUDAC) -c++ $(CUDAC) $(OPTS)
-CUDADIR = /usr/local/cuda
-CUDASDK = $(HOME)/NVIDIA_CUDA_SDK
-CUDAC = $(CUDADIR)/bin/nvcc 
-CUDAINC = -I$(CUDASDK)/common/inc -I$(CUDADIR)/include
-CCFLAGS = -DCUDA -DFP_TYPE_FLOAT -g
+CHARMC=$(CDIR)/bin/charmc $(OPTS)
+#CUDADIR = /usr/local/cuda
+#CUDASDK = $(HOME)/NVIDIA_CUDA_SDK
+#CUDAC = $(CUDADIR)/bin/nvcc 
+#CUDAINC = -I$(CUDASDK)/common/inc -I$(CUDADIR)/include
+
+
+#CCFLAGS = -DFP_TYPE_FLOAT -g
+CCFLAGS = -g
+#CCFLAGS = -O
+
+
 
 #Headers to be copied to include directory so application users can see them
 HEADERS= ParFUM_TOPS.h ParFUM_TOPS_CUDA.h ParFUM_TOPS_Types.h $(INTERNALHEADERS)
@@ -14,14 +20,14 @@ GENHEADERS= ParFUM_TOPS.def.h ParFUM_TOPS.decl.h
 
 HEADDEP= $(GENHEADERS) $(HEADERS) $(INTERNALHEADERS)
 
-OBJS=ParFUM_TOPS.o ParFUM_TOPS_Iterators.o ParFUM_TOPS_CUDA.o
+OBJS=ParFUM_TOPS.o ParFUM_TOPS_Iterators.o 
 
 LIB=libmoduleParFUM_TOPS
 
 LIBDIR=$(CDIR)/lib
 DEST=$(LIBDIR)/$(LIB).a
 
-INCS=-I. $(CUDAINC)
+INCS=-I. 
 
 all: $(DEST)
 
@@ -49,8 +55,8 @@ ParFUM_TOPS.o: ParFUM_TOPS.cc $(HEADDEP) ParFUM_TOPS.h
 ParFUM_TOPS_Iterators.o: ParFUM_TOPS_Iterators.cc $(HEADDEP)
        $(CHARMC) -c ParFUM_TOPS_Iterators.cc $(CCFLAGS) $(INCS)
 
-ParFUM_TOPS_CUDA.o: ParFUM_TOPS_CUDA.cu $(HEADDEP)
-       $(CHARMC) -c ParFUM_TOPS_CUDA.cu $(CCFLAGS) $(INCS)
+#ParFUM_TOPS_CUDA.o: ParFUM_TOPS_CUDA.cu $(HEADDEP)
+#      $(CHARMC) -c ParFUM_TOPS_CUDA.cu $(CCFLAGS) $(INCS)
 
 
 # clean up
index 8e9ae16edd2f6bacf00580fb8c79e3b7a6a9ed3f..6c5d02ed0ae23e833176f6dfc34d69d3494ff885 100644 (file)
@@ -29,12 +29,17 @@ void setTableReferences(TopModel* model){
   model->elem_id_T = &((FEM_DataAttribute*)model->mesh->elem[0].lookup(FEM_DATA+1,""))->getInt();
   model->ElemData_T = &((FEM_DataAttribute*)model->mesh->elem[0].lookup(FEM_DATA+0,""))->getChar();
   model->NodeData_T = &((FEM_DataAttribute*)model->mesh->node.lookup(FEM_DATA+0,""))->getChar();
+
 #ifdef FP_TYPE_FLOAT
   model->coord_T = &((FEM_DataAttribute*)model->mesh->node.lookup(FEM_DATA+2,""))->getFloat();
 #else
   model->coord_T = &((FEM_DataAttribute*)model->mesh->node.lookup(FEM_DATA+2,""))->getDouble();
+#endif
+
+#ifdef CUDA
   model->n2eConn_T = &((FEM_DataAttribute*)model->mesh->elem[0].lookup(FEM_DATA+2,""))->getInt();
 #endif
+
 }
 
 
@@ -229,6 +234,16 @@ void top_retrieve_node_data(TopModel* m){
 #endif
 }
 
+/** Copy node attribute array to CUDA device from the ParFUM attribute */
+void top_put_node_data(TopModel* m){
+#if CUDA
+  cudaMemcpy(m->device_model.NodeDataDevice,
+            m->NodeData_T->getData(),
+            m->num_local_node * m->node_attr_size,
+            cudaMemcpyHostToDevice);
+#endif
+}
+
 
 /** Copy element attribute array from CUDA device back to the ParFUM attribute */
 void top_retrieve_elem_data(TopModel* m){
index bd7a1440c4e0bc3cdfeec9204e580a35c01a9832..753a8755bf0b1399c2624d7122b991a1c8e8e9f0 100644 (file)
@@ -48,6 +48,7 @@ typedef struct{
 
 #ifdef CUDA
     TopModelDevice device_model;
+  AllocTable2d<int> *n2eConn_T;
 #endif
 
 } TopModel;
@@ -173,4 +174,6 @@ void topModel_TestIterators(TopModel*m);
 void top_retrieve_elem_data(TopModel* m);
 void top_retrieve_node_data(TopModel* m);
 
+void top_put_node_data(TopModel* m);
+
 #endif