CoreNEURON
|
#include "coreneuron/nrnconf.h"
#include "coreneuron/sim/multicore.hpp"
#include "coreneuron/utils/nrn_assert.h"
#include "coreneuron/permute/cellorder.hpp"
#include "coreneuron/network/tnode.hpp"
#include "coreneuron/utils/lpt.hpp"
#include "coreneuron/utils/memory.h"
#include "coreneuron/utils/offload.hpp"
#include "coreneuron/apps/corenrn_parameters.hpp"
#include "coreneuron/permute/node_permute.h"
#include <set>
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 |
Definition at line 428 of file cellorder.cpp.
Definition at line 429 of file cellorder.cpp.
Definition at line 430 of file cellorder.cpp.
Definition at line 432 of file cellorder.cpp.
Definition at line 431 of file cellorder.cpp.
Definition at line 427 of file cellorder.cpp.