Skip to content

Instantly share code, notes, and snippets.

@keisukefukuda
Created October 30, 2013 15:51
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save keisukefukuda/7235031 to your computer and use it in GitHub Desktop.
Save keisukefukuda/7235031 to your computer and use it in GitHub Desktop.
exaFMM P2P kernel model file
// non-SIMD P2P kernel model
model exaFMM_P2P {
// Double precision
param wordSize = 8
param Ni = 20
param Nj = 20
param mutual = 1
data trgBodies[Ni * 3 * wordSize]
data srcBodies[Nj * 3 * wordSize]
kernel LaplaceP2P {
iterate [Ni] {
iterate [Nj] {
execute {
loads [4 * wordSize] from srcBodies
loads [4 * wordSize] from trgBodies
//vec3 dX = Bi[i].X - Bj[j].X - Xperiodic;
flops [3*3] as dp
// real_t R2 = norm(dX) + EPS2;
flops[6 + 3] as dp
//real_t invR2 = 1.0 / R2;
flops [1]
//real_t invR = Bi[i].SRC * Bj[j].SRC * sqrt(invR2);
flops [1] as sqrt,dp
flops [2] as dp
//dX *= invR2 * invR;
//pot += invR;
//ax += dX[0];
//ay += dX[1];
//az += dX[2];
flops [6] as dp
//if (mutual)
// Bj[j].TRG[0] += invR;
// Bj[j].TRG[1] += dX[0];
// Bj[j].TRG[2] += dX[1];
// Bj[j].TRG[3] += dX[2];
flops[mutual * 4] as dp
stores [wordSize * 4 * mutual] to srcBodies
}
execute {
//Bi[i].TRG[0] += pot;
//Bi[i].TRG[1] -= ax;
//Bi[i].TRG[2] -= ay;
//Bi[i].TRG[3] -= az;
flops [4] as dp
stores [wordSize * 4] to trgBodies
}
}
}
}
kernel main {
LaplaceP2P
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment