CoreNEURON
cellorder.cpp File Reference

Go to the source code of this file.

Namespaces

 coreneuron
 THIS FILE IS AUTO GENERATED DONT MODIFY IT.
 

Macros

#define GPU_V(i)   nt->_actual_v[i]
 
#define GPU_A(i)   nt->_actual_a[i]
 
#define GPU_B(i)   nt->_actual_b[i]
 
#define GPU_D(i)   nt->_actual_d[i]
 
#define GPU_RHS(i)   nt->_actual_rhs[i]
 
#define GPU_PARENT(i)   nt->_v_parent_index[i]
 

Functions

void coreneuron::create_interleave_info ()
 
void coreneuron::destroy_interleave_info ()
 
static void coreneuron::print_quality2 (int iwarp, InterleaveInfo &ii, int *p)
 
static void coreneuron::print_quality1 (int iwarp, InterleaveInfo &ii, int ncell, int *p)
 
static void coreneuron::warp_balance (int ith, InterleaveInfo &ii)
 
int * coreneuron::interleave_order (int ith, int ncell, int nnode, int *parent)
 Function that performs the permutation of the cells such that the execution threads access coalesced memory. More...
 
static void coreneuron::triang_interleaved (NrnThread *nt, int icell, int icellsize, int nstride, int *stride, int *lastnode)
 
static void coreneuron::bksub_interleaved (NrnThread *nt, int icell, int icellsize, int, int *stride, int *firstnode)
 
 coreneuron::nrn_pragma_acc (routine vector) static void triang_interleaved2(NrnThread *nt
 
 coreneuron::nrn_pragma_acc (loop seq) for(
 
 coreneuron::if (ncell==0)
 
 coreneuron::nrn_pragma_acc (parallel loop present(nt[0:1], stride[0:nstride], firstnode[0:ncell], lastnode[0:ncell], cellsize[0:ncell]) if(nt->compute_gpu) async(nt->stream_id)) nrn_pragma_omp(target teams distribute parallel for simd if(nt -> compute_gpu)) for(int icell=0
 

Variables

int coreneuron::icore
 
int int coreneuron::ncycle
 
int int int * coreneuron::stride = ii.stride
 
int int int int coreneuron::lastnode
 
int coreneuron::istride = stride[icycle]
 
int coreneuron::i = lastnode - istride + icore
 
int coreneuron::ii = i
 
bool coreneuron::has_subtrees_to_compute = true
 
int coreneuron::root
 
int int coreneuron::lastroot
 
int int int int int int coreneuron::firstnode
 
icycle< ncycle;++icycle) { int istride=stride[icycle];nrn_pragma_acc(loop vector) nrn_pragma_omp(loop bind(parallel)) for(int icore=0;icore< warpsize;++icore) { int i=ii+icore;if(icore< istride) { int ip=GPU_PARENT(i);GPU_RHS(i) -=GPU_B(i) *GPU_RHS(ip);GPU_RHS(i)/=GPU_D(i);} i+=istride;} ii+=istride;}}void solve_interleaved2(int ith) { NrnThread *nt=nrn_threads+ith;InterleaveInfo &ii=interleave_info[ith];int nwarp=ii.nwarp;if(nwarp==0) return;int ncore=nwarp *warpsize;int *ncycles=ii.cellsize;int *stridedispl=ii.stridedispl;int *strides=ii.stride;int *rootbegin=ii.firstnode;int *nodebegin=ii.lastnode;nrn_pragma_acc(parallel loop gang present(nt[0:1], strides[0:nstride], ncycles[0:nwarp], stridedispl[0:nwarp+1], rootbegin[0:nwarp+1], nodebegin[0:nwarp+1]) if(nt->compute_gpu) async(nt->stream_id)) nrn_pragma_omp(target teams loop if(nt->compute_gpu)) for(int icore=0;icore< ncore;icore+=warpsize) { int iwarp=icore/warpsize;int ic=icore &(warpsize - 1);int ncycle=ncycles[iwarp];int *stride=strides+stridedispl[iwarp];int root=rootbegin[iwarp];int lastroot=rootbegin[iwarp+1];int firstnode=nodebegin[iwarp];int lastnode=nodebegin[iwarp+1];triang_interleaved2(nt, ic, ncycle, stride, lastnode);bksub_interleaved2(nt, root+ic, lastroot, ic, ncycle, stride, firstnode);} nrn_pragma_acc(wait(nt->stream_id))}void solve_interleaved1(int ith) { NrnThread *nt=nrn_threads+ith;int ncell=nt-> coreneuron::ncell
 
int coreneuron::nstride = ii.nstride
 
int * coreneuron::cellsize = ii.cellsize
 

Macro Definition Documentation

◆ GPU_A

#define GPU_A (   i)    nt->_actual_a[i]

Definition at line 428 of file cellorder.cpp.

◆ GPU_B

#define GPU_B (   i)    nt->_actual_b[i]

Definition at line 429 of file cellorder.cpp.

◆ GPU_D

#define GPU_D (   i)    nt->_actual_d[i]

Definition at line 430 of file cellorder.cpp.

◆ GPU_PARENT

#define GPU_PARENT (   i)    nt->_v_parent_index[i]

Definition at line 432 of file cellorder.cpp.

◆ GPU_RHS

#define GPU_RHS (   i)    nt->_actual_rhs[i]

Definition at line 431 of file cellorder.cpp.

◆ GPU_V

#define GPU_V (   i)    nt->_actual_v[i]

Definition at line 427 of file cellorder.cpp.