Version that works with CUDA
authorIsaac Dooley <idooley2@illinois.edu>
Mon, 23 Apr 2007 02:02:47 +0000 (02:02 +0000)
committerIsaac Dooley <idooley2@illinois.edu>
Mon, 23 Apr 2007 02:02:47 +0000 (02:02 +0000)
src/libs/ck-libs/ParFUM-Tops/Makefile
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.h
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS_CUDA.h
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS_Types.h

index 96eae59ca8fb61ed9f1fc3cf35ee262f7ce791b7..bc5f20afd39185ec507c4a8579a59a08f25ce931 100644 (file)
@@ -1,6 +1,10 @@
 CDIR=../../../..
-CHARMC=$(CDIR)/bin/charmc $(OPTS)
-CUDAC=$(CHARMC)
+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
 
 #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)
@@ -17,7 +21,7 @@ LIB=libmoduleParFUM_TOPS
 LIBDIR=$(CDIR)/lib
 DEST=$(LIBDIR)/$(LIB).a
 
-INCS=-I.
+INCS=-I. $(CUDAINC)
 
 all: $(DEST)
 
@@ -37,14 +41,16 @@ $(DEST): $(OBJS) headers $(HEADDEP)
 headers: $(HEADDEP)
        cp $(HEADERS) $(CDIR)/include/
 
-ParFUM_TOPS.o: ParFUM_TOPS.C $(HEADDEP) ParFUM_TOPS.h
-       $(CHARMC) -c ParFUM_TOPS.C $(INCS)
+#ParFUM_TOPS.o: ParFUM_TOPS.C $(HEADDEP) ParFUM_TOPS.h
+#      $(CHARMC) -c ParFUM_TOPS.C $(INCS)
+ParFUM_TOPS.o: ParFUM_TOPS.cc $(HEADDEP) ParFUM_TOPS.h
+       $(CHARMC) -c ParFUM_TOPS.cc $(INCS) $(CCFLAGS)
 
-ParFUM_TOPS_Iterators.o: ParFUM_TOPS_Iterators.C $(HEADDEP)
-       $(CHARMC) -c ParFUM_TOPS_Iterators.C $(INCS)
+ParFUM_TOPS_Iterators.o: ParFUM_TOPS_Iterators.cc $(HEADDEP)
+       $(CHARMC) -c ParFUM_TOPS_Iterators.cc $(CCFLAGS) $(INCS)
 
-ParFUM_TOPS_CUDA.o: ParFUM_TOPS_CUDA.C $(HEADDEP)
-       $(CUDAC) -c ParFUM_TOPS_CUDA.C $(INCS)
+ParFUM_TOPS_CUDA.o: ParFUM_TOPS_CUDA.cu $(HEADDEP)
+       $(CHARMC) -c ParFUM_TOPS_CUDA.cu $(CCFLAGS) $(INCS)
 
 
 # clean up
index b85b62809d4835548039913df4801d8117b2e531..bd7a1440c4e0bc3cdfeec9204e580a35c01a9832 100644 (file)
@@ -114,8 +114,12 @@ void* topNode_GetAttrib(TopModel*, TopNode);
 /** Get element attribute */
 void* topElement_GetAttrib(TopModel*, TopElement);
 
+/** Get node via id */
 TopNode topElement_GetNode(TopModel*,TopElement,int idx);
 
+/** Get element via id */
+TopElement topModel_GetElemAtId(TopModel*,TopID);
+
 int topNode_GetId(TopModel* m, TopNode n);
 
 int topModel_GetNNodes(TopModel *model);
@@ -166,7 +170,7 @@ TopElement topElemItr_GetCurr(TopElemItr*);
 void topModel_TestIterators(TopModel*m);
 
 
-void top_retreive_elem_data(TopModel* m);
-void top_retreive_node_data(TopModel* m);
+void top_retrieve_elem_data(TopModel* m);
+void top_retrieve_node_data(TopModel* m);
 
 #endif
index 8c5ce4c5d7be07ae92c1ebed37c77f59dbc44dcb..cee950a433f373ca6ddea7d5a21771379b057a65 100644 (file)
@@ -12,7 +12,8 @@
 #define __PARFUM_TOPS_CUDA___H
 #ifdef CUDA
 
-#include "ParFUM_Tops_Types.h"
+#include "ParFUM_TOPS_Types.h"
+#include <cutil.h>
 
 /** A TopModelDevice contains structures for use by CUDA kernels */
 typedef struct {
@@ -31,9 +32,11 @@ typedef struct {
 } TopModelDevice;
 
 
-void* topElement_D_GetAttrib(TopModelDevice* m, TopElement e);
-void* topNode_D_GetAttrib(TopModelDevice* m, TopNode n);
-TopNode topElement_D_GetNode(TopModelDevice* m,TopElement e,int idx);
+#define topElement_D_GetAttrib(m, e) (((char*)(m)->ElemDataDevice) + (e)*(m)->elem_attr_size)
+
+#define topNode_D_GetAttrib(m, e) (((char*)(m)->NodeDataDevice) + (e)*(m)->node_attr_size)
+
+#define topElement_D_GetNode(m, e, idx) (((m)->ElemConnDevice)[e*4 + idx])
 
 #endif
 #endif
index cba08e6eaef073b7d545c2e567ff367e84fbe1be..a21bb6b11448688a86adbf691c16c0246c19af96 100644 (file)
@@ -5,11 +5,13 @@
 
 #ifdef FP_TYPE_FLOAT
 #warning "Using floats for various things"
-typedef double FP_TYPE_HIGH;
+typedef float FP_TYPE;
+typedef float FP_TYPE_HIGH;
 typedef float FP_TYPE_LOW;
 typedef float FP_TYPE_SYNC;
 #else
 #warning "Using doubles for various things"
+typedef double FP_TYPE;
 typedef double FP_TYPE_HIGH;
 typedef double FP_TYPE_LOW;
 typedef double FP_TYPE_SYNC;