Separated out cuda portion of TopModel into its own struct
authorAaron Becker <abecker3@illinois.edu>
Wed, 14 Mar 2007 23:17:06 +0000 (23:17 +0000)
committerAaron Becker <abecker3@illinois.edu>
Wed, 14 Mar 2007 23:17:06 +0000 (23:17 +0000)
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS.h
src/libs/ck-libs/ParFUM-Tops/ParFUM_TOPS_CUDA.C

index efc072255568900c3c65467fb72f31c62284c603..16e3ac48826ee159b98818f1e4e9e8ee535ca2ac 100644 (file)
@@ -34,6 +34,22 @@ 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;
+
 
 /** A tops model is roughly equivalent to a ParFUM FEM_Mesh object */
 typedef struct{
@@ -57,11 +73,7 @@ typedef struct{
     unsigned num_local_node;
 
 #ifdef CUDA
-    void *mAttDevice; /** Device pointers to the goods */
-    void *ElemDataDevice;
-    void *NodeDataDevice;
-    int *ElemConnDevice;
-    TopModel* modelD;
+    TopModelDevice device_model;
 #endif
 
 } TopModel;
@@ -216,9 +228,9 @@ void topModel_TestIterators(TopModel*m);
 
 
 #if CUDA
-void* topElement_D_GetAttrib(TopModel* m, TopElement e);
-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
 
 void top_retreive_elem_data(TopModel* m);
index 09ae846ae1bd39a0657fdb2728f53db3aa242170..a5bbd5803bd0a74f83bfb1e7d019d3eb6014aacf 100644 (file)
 
 
 #ifdef CUDA
-__device__ void* topElement_D_GetAttrib(TopModel* m, TopElement e){
+__device__ void* topElement_D_GetAttrib(TopModelDevice* m, TopElement e){
   return (m->ElemDataDevice + e*m->elem_attr_size);
 }
 
 
-__device__ void* topNode_D_GetAttrib(TopModel* m, TopNode n){
+__device__ void* topNode_D_GetAttrib(TopModelDevice* m, TopNode n){
   return (m->NodeDataDevice + n*m->node_attr_size);
 }
 #endif