Separated out all types needed for kernels, so that kernel functions won't
authorAaron Becker <abecker3@illinois.edu>
Wed, 14 Mar 2007 23:36:59 +0000 (23:36 +0000)
committerAaron Becker <abecker3@illinois.edu>
Wed, 14 Mar 2007 23:36:59 +0000 (23:36 +0000)
have to include all of charm.

src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.C
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.h
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS_CUDA.C
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS_CUDA.h
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS_Types.h [new file with mode: 0644]

index 2123c88097fc602472977d5cf1c4533ba718e96b..78c274f330dc93d6d755f588067b9973cd2bdb46 100644 (file)
@@ -106,14 +106,22 @@ TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz, int model_a
     setTableReferences(model);
 
 #if CUDA
+    /** copy number/sizes of nodes and elements to device structure */
+    model->device_model.elem_attr_size = elem_attr_sz;
+    model->device_model.node_attr_size = node_attr_sz;
+    model->device_model.model_attr_size = model_attr_sz;
+    model->device_model.num_local_node = model->num_local_node;
+    model->device_model.num_local_elem = model->num_local_elem;
+
     /** Copy element Attribute array to device global memory */
     {
         FEM_DataAttribute * at = (FEM_DataAttribute*) m->mesh->elem[0].lookup(FEM_DATA+0,"topModel_Create_Driver");
         AllocTable2d<unsigned char> &dataTable  = at->getChar();
         unsigned char *ElemData = dataTable.getData();
         int size = at->size();
-        cudaMalloc(size, (void**)&(model->ElemDataDevice));
-        cudaMemcpy(ElemDataDevice,ElemData,size,cudaMemcpyHostToDevice);
+        cudaMalloc(size, (void**)&(model->devive_model.ElemDataDevice));
+        cudaMemcpy(model->device_model.ElemDataDevice,ElemData,size,
+                cudaMemcpyHostToDevice);
     }
 
     /** Copy node Attribute array to device global memory */
@@ -122,8 +130,9 @@ TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz, int model_a
         AllocTable2d<unsigned char> &dataTable  = at->getChar();
         unsigned char *NodeData = dataTable.getData();
         int size = at->size();
-        cudaMalloc(size, (void**)&(model->NodeDataDevice));
-        cudaMemcpy(NodeDataDevice,NodeData,size,cudaMemcpyHostToDevice);
+        cudaMalloc(size, (void**)&(model->device_model.NodeDataDevice));
+        cudaMemcpy(model->device_model.NodeDataDevice,NodeData,size,
+                cudaMemcpyHostToDevice);
     }
 
     /** Copy elem connectivity array to device global memory */
@@ -132,21 +141,19 @@ TopModel* topModel_Create_Driver(int elem_attr_sz, int node_attr_sz, int model_a
         AllocTable2d<int> &dataTable  = at->getInt();
         int *data = dataTable.getData();
         int size = at->size()*sizeof(int);
-        cudaMalloc(size, (void**)&(model->ElemConnDevice));
-        cudaMemcpy(ElemConnDevice,data,size,cudaMemcpyHostToDevice);
+        cudaMalloc(size, (void**)&(model->device_model.ElemConnDevice));
+        cudaMemcpy(model->device_model.ElemConnDevice,data,size,
+                cudaMemcpyHostToDevice);
     }
 
     /** Copy model Attribute to device global memory */
     {
-        cudaMalloc(model->model_attr_size, (void**)&(model->mAttDevice));
-        cudaMemcpy(mAttDevice,mAtt,model->model_attr_size,cudaMemcpyHostToDevice);
+        cudaMalloc(model->model_attr_size, 
+                (void**)&(model->device_model.mAttDevice));
+        cudaMemcpy(model->device_model.mAttDevice,mAtt,model->model_attr_size,
+                cudaMemcpyHostToDevice);
     }
 
-    /** Copy model to device global memory */
-    {
-        cudaMalloc(sizeof(TopModel), (void**)&(model->modelD);
-        cudaMemcpy(model->modelD,model,sizeof(TopModel),cudaMemcpyHostToDevice);
-    }
 #endif
 
     return model;
index 16e3ac48826ee159b98818f1e4e9e8ee535ca2ac..1aba27e5ce984fc9587d660c4e52562edb839628 100644 (file)
@@ -20,35 +20,8 @@ put example here!
 #include <ParFUM.h>
 #include <ParFUM_internals.h>
 
-
-#ifdef FP_TYPE_FLOAT
-#warning "Using floats for various things"
-typedef double FP_TYPE_HIGH;
-typedef float FP_TYPE_LOW;
-typedef float FP_TYPE_SYNC;
-#else
-#warning "Using doubles for various things"
-typedef double FP_TYPE_HIGH;
-typedef double FP_TYPE_LOW;
-typedef double FP_TYPE_SYNC;
-#endif
-
-
-/** A TopModelDevice contains structures for use by CUDA kernels */
-typedef struct {
-    unsigned node_attr_size;
-    unsigned elem_attr_size;
-    unsigned model_attr_size;
-
-    unsigned num_local_elem;
-    unsigned num_local_node;
-    
-    /** Device pointers to the goods */
-    void *mAttDevice;
-    void *ElemDataDevice;
-    void *NodeDataDevice;
-    int *ElemConnDevice;
-} TopModelDevice;
+#include "ParFUM_TOPS_Types.h"
+#include "ParFUM_TOPS_CUDA.h"
 
 
 /** A tops model is roughly equivalent to a ParFUM FEM_Mesh object */
@@ -79,36 +52,6 @@ typedef struct{
 } TopModel;
 
 
-/** Tops uses some bit patterns for these, but we just use TopNode as a signed value to represent the corresponding ParFUM node. A non-negative value is a local node, while a negative value is a ghost. */
-typedef long TopNode;
-/** See notes for ::TopNode */
-typedef long TopElement;
-
-
-enum {
-  TOP_ELEMENT_T3 =0,
-  TOP_ELEMENT_T6,
-  TOP_ELEMENT_Q4,
-  TOP_ELEMENT_Q8,
-  TOP_ELEMENT_TET4,
-  TOP_ELEMENT_TET10,
-  TOP_ELEMENT_HEX8,
-  TOP_ELEMENT_HEX8_RESERVOIR,
-  TOP_ELEMENT_HEX20,
-  TOP_ELEMENT_WEDGE15,
-  TOP_ELEMENT_COH2E2,
-  TOP_ELEMENT_COH2E3,
-  TOP_ELEMENT_COH3T3,
-  TOP_ELEMENT_COH3T6,
-  TOP_ELEMENT_COH3Q4,
-  TOP_ELEMENT_COH3Q8,
-  TOP_ELEMENT_WEDGE6,
-  TOP_ELEMENT_MAX
-};
-
-/** used as iterators on CUDA system. See usage!*/
-typedef bool TopNodeItr_D;
-typedef bool TopElemItr_D;
 
 /** Node Iterator */
 class TopNodeItr{
@@ -127,13 +70,6 @@ public:
 };
 
 
-/** an opaque id for top entities */
-typedef int TopID;
-
-/** an enumeration of supported element types */
-typedef int TopElemType;
-
-
 /**
 Create and access a Tops model. Only call from Init
 Currently only one model can be created. To extend, each model must just reference a different FEM_Mesh object
@@ -227,12 +163,6 @@ TopElement topElemItr_GetCurr(TopElemItr*);
 void topModel_TestIterators(TopModel*m);
 
 
-#if CUDA
-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);
-#endif
-
 void top_retreive_elem_data(TopModel* m);
 void top_retreive_node_data(TopModel* m);
 
index a5bbd5803bd0a74f83bfb1e7d019d3eb6014aacf..c895cb178f0ad577825a8eb6bbdede411042f7bd 100644 (file)
@@ -7,8 +7,7 @@
 
 */
 
-#include "ParFUM_TOPS.h"
-#include "ParFUM_internals.h"
+#include "ParFUM_TOPS_CUDA.h"
 
 
 #ifdef CUDA
index e1c7969daf63affc41b4816d7c3f81be743105e6..8c5ce4c5d7be07ae92c1ebed37c77f59dbc44dcb 100644 (file)
 
 #ifndef __PARFUM_TOPS_CUDA___H
 #define __PARFUM_TOPS_CUDA___H
+#ifdef CUDA
 
-#include <ParFUM.h>
-#include <ParFUM_internals.h>
-#include "ParFUM_TOPS.h"
+#include "ParFUM_Tops_Types.h"
 
+/** A TopModelDevice contains structures for use by CUDA kernels */
+typedef struct {
+    unsigned node_attr_size;
+    unsigned elem_attr_size;
+    unsigned model_attr_size;
 
-void* topElement_D_GetAttrib(TopModel* m, TopElement e);
+    unsigned num_local_elem;
+    unsigned num_local_node;
+    
+    /** Device pointers to the goods */
+    void *mAttDevice;
+    void *ElemDataDevice;
+    void *NodeDataDevice;
+    int *ElemConnDevice;
+} TopModelDevice;
 
-void* topNode_D_GetAttrib(TopModel* m, TopNode n);
 
-TopNode topElement_D_GetNode(TopModel* m,TopElement e,int idx);
+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);
 
 #endif
+#endif
diff --git a/src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS_Types.h b/src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS_Types.h
new file mode 100644 (file)
index 0000000..cba08e6
--- /dev/null
@@ -0,0 +1,59 @@
+
+#ifndef __PARFUM_TOPS_TYPES___H
+#define __PARFUM_TOPS_TYPES___H
+
+
+#ifdef FP_TYPE_FLOAT
+#warning "Using floats for various things"
+typedef double FP_TYPE_HIGH;
+typedef float FP_TYPE_LOW;
+typedef float FP_TYPE_SYNC;
+#else
+#warning "Using doubles for various things"
+typedef double FP_TYPE_HIGH;
+typedef double FP_TYPE_LOW;
+typedef double FP_TYPE_SYNC;
+#endif
+
+
+/** Tops uses some bit patterns for these, but we just use TopNode as a signed value to represent the corresponding ParFUM node. A non-negative value is a local node, while a negative value is a ghost. */
+typedef long TopNode;
+/** See notes for ::TopNode */
+typedef long TopElement;
+
+
+enum {
+  TOP_ELEMENT_T3 =0,
+  TOP_ELEMENT_T6,
+  TOP_ELEMENT_Q4,
+  TOP_ELEMENT_Q8,
+  TOP_ELEMENT_TET4,
+  TOP_ELEMENT_TET10,
+  TOP_ELEMENT_HEX8,
+  TOP_ELEMENT_HEX8_RESERVOIR,
+  TOP_ELEMENT_HEX20,
+  TOP_ELEMENT_WEDGE15,
+  TOP_ELEMENT_COH2E2,
+  TOP_ELEMENT_COH2E3,
+  TOP_ELEMENT_COH3T3,
+  TOP_ELEMENT_COH3T6,
+  TOP_ELEMENT_COH3Q4,
+  TOP_ELEMENT_COH3Q8,
+  TOP_ELEMENT_WEDGE6,
+  TOP_ELEMENT_MAX
+};
+
+/** used as iterators on CUDA system. See usage!*/
+typedef bool TopNodeItr_D;
+typedef bool TopElemItr_D;
+
+
+/** an opaque id for top entities */
+typedef int TopID;
+
+/** an enumeration of supported element types */
+typedef int TopElemType;
+
+
+
+#endif