-
Notifications
You must be signed in to change notification settings - Fork 5
/
calc_loglik.cu
19 lines (18 loc) · 784 Bytes
/
calc_loglik.cu
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#define SQRT_TWO_PI 2.506628274631000
extern "C"
__global__ void calc_loglik(double* vals, int N, double mu, double sigma) {
// note that this assumes no third dimension to the grid
// id of the block
int myblock = blockIdx.x + blockIdx.y * gridDim.x;
// size of each block (within grid of blocks)
int blocksize = blockDim.x * blockDim.y * blockDim.z;
// id of thread in a given block
int subthread = threadIdx.z*(blockDim.x * blockDim.y) + threadIdx.y*blockDim.x + threadIdx.x;
// assign overall id/index of the thread
int idx = myblock * blocksize + subthread;
if(idx < N) {
double std = (vals[idx] - mu)/ sigma;
double e = exp( - 0.5 * std * std);
vals[idx] = e / ( sigma * SQRT_TWO_PI);
}
}