Changeset 19 for trunk/kernel/kern/dqdt.c
- Timestamp:
- Jun 3, 2017, 4:46:59 PM (7 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/kernel/kern/dqdt.c
r14 r19 1 1 /* 2 2 * dqdt.c - Distributed Quaternary Decision Tree implementation. 3 * 3 * 4 4 * Author : Alain Greiner (2016) 5 5 * … … 63 63 } 64 64 } 65 } 66 65 } 66 67 67 //////////////////////////////////// 68 68 uint32_t dqdt_init( uint32_t x_size, … … 113 113 node->children[2] = XPTR_NULL; 114 114 node->children[3] = XPTR_NULL; 115 115 116 116 // compute masks depending on level : 0x1, 0x3, 0x7, 0xF, 0x1F etc. 117 117 mask = (1<<level)-1; … … 121 121 if( ((x & mask) == 0) && ((y & mask) == 0) ); 122 122 { 123 // set parent extended pointer 123 // set parent extended pointer 124 124 p_cxy = ((x & ~pmask)<<y_width) + (y & ~pmask); 125 125 node->parent = XPTR( p_cxy , &cluster->dqdt_tbl[level+1] ); 126 126 127 // set child[0] extended pointer (same [x,y] coordinates) 127 // set child[0] extended pointer (same [x,y] coordinates) 128 128 if ( level > 0 ) 129 129 { … … 188 188 if ( parent != XPTR_NULL ) 189 189 { 190 dqdt_propagate( parent, threads_var, pages_var ); 190 dqdt_propagate( parent, threads_var, pages_var ); 191 191 } 192 192 } … … 217 217 { 218 218 cluster_t * cluster = LOCAL_CLUSTER; 219 220 // register change for future propagation in DQDT 219 220 // register change for future propagation in DQDT 221 221 hal_atomic_add( &cluster->threads_var , increment ); 222 222 … … 229 229 { 230 230 cluster_t * cluster = LOCAL_CLUSTER; 231 232 // register change for future propagation in DQDT 231 232 // register change for future propagation in DQDT 233 233 hal_atomic_add( &cluster->pages_var , increment ); 234 234 … … 270 270 { 271 271 cxy = (cxy_t)GET_CXY( child ); 272 ptr = (dqdt_node_t *)GET_PTR( child ); 272 ptr = (dqdt_node_t *)GET_PTR( child ); 273 273 if( for_memory ) load = hal_remote_lw( XPTR( cxy , &ptr->pages ) ); 274 274 else load = hal_remote_lw( XPTR( cxy , &ptr->threads ) ); … … 276 276 { 277 277 load_min = load; 278 select = i; 279 } 278 select = i; 279 } 280 280 } 281 281 } 282 282 283 283 // select the child with the lowest load 284 return dqdt_select_cluster( node_copy.children[select], for_memory ); 284 return dqdt_select_cluster( node_copy.children[select], for_memory ); 285 285 } 286 286 … … 294 294 295 295 // call recursive function 296 return dqdt_select_cluster( root , false ); 296 return dqdt_select_cluster( root , false ); 297 297 } 298 298 … … 306 306 307 307 // call recursive function 308 return dqdt_select_cluster( root , true ); 309 } 310 308 return dqdt_select_cluster( root , true ); 309 } 310
Note: See TracChangeset
for help on using the changeset viewer.