Commit edd91641 authored by peastman's avatar peastman
Browse files

Avoid integer overflow when dealing with very large systems

parent d20e4edd
...@@ -170,11 +170,11 @@ extern "C" __global__ void computeN2Energy(unsigned long long* __restrict__ forc ...@@ -170,11 +170,11 @@ extern "C" __global__ void computeN2Energy(unsigned long long* __restrict__ forc
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = warp*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int pos = (int) (warp*(numTiles > maxTiles ? NUM_BLOCKS*((long long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
int end = (warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int end = (int) ((warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
#else #else
int pos = warp*numTiles/totalWarps; int pos = (int) (warp*(long long)numTiles/totalWarps);
int end = (warp+1)*numTiles/totalWarps; int end = (int) ((warp+1)*(long long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -148,11 +148,11 @@ extern "C" __global__ void computeN2Value(const real4* __restrict__ posq, const ...@@ -148,11 +148,11 @@ extern "C" __global__ void computeN2Value(const real4* __restrict__ posq, const
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = warp*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int pos = (int) (warp*(numTiles > maxTiles ? NUM_BLOCKS*((long long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
int end = (warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int end = (int) ((warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
#else #else
int pos = warp*numTiles/totalWarps; int pos = (int) (warp*(long long)numTiles/totalWarps);
int end = (warp+1)*numTiles/totalWarps; int end = (int) ((warp+1)*(long long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -208,11 +208,11 @@ extern "C" __global__ void computeBornSum(unsigned long long* __restrict__ globa ...@@ -208,11 +208,11 @@ extern "C" __global__ void computeBornSum(unsigned long long* __restrict__ globa
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = warp*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int pos = (int) (warp*(numTiles > maxTiles ? NUM_BLOCKS*((long long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
int end = (warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int end = (int) ((warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
#else #else
int pos = warp*numTiles/totalWarps; int pos = (int) (warp*(long long)numTiles/totalWarps);
int end = (warp+1)*numTiles/totalWarps; int end = (int) ((warp+1)*(long long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
...@@ -572,11 +572,11 @@ extern "C" __global__ void computeGBSAForce1(unsigned long long* __restrict__ fo ...@@ -572,11 +572,11 @@ extern "C" __global__ void computeGBSAForce1(unsigned long long* __restrict__ fo
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = warp*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int pos = (int) (warp*(numTiles > maxTiles ? NUM_BLOCKS*((long long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
int end = (warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int end = (int) ((warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
#else #else
int pos = warp*numTiles/totalWarps; int pos = (int) (warp*(long long)numTiles/totalWarps);
int end = (warp+1)*numTiles/totalWarps; int end = (int) ((warp+1)*(long long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -312,12 +312,12 @@ extern "C" __global__ void computeNonbonded( ...@@ -312,12 +312,12 @@ extern "C" __global__ void computeNonbonded(
// of them (no cutoff). // of them (no cutoff).
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
const unsigned int numTiles = interactionCount[0]; const unsigned int numTiles = interactionCount[0];
int pos = (numTiles > maxTiles ? startTileIndex+warp*numTileIndices/totalWarps : warp*numTiles/totalWarps); int pos = (int) (numTiles > maxTiles ? startTileIndex+warp*(long long)numTileIndices/totalWarps : warp*(long long)numTiles/totalWarps);
int end = (numTiles > maxTiles ? startTileIndex+(warp+1)*numTileIndices/totalWarps : (warp+1)*numTiles/totalWarps); int end = (int) (numTiles > maxTiles ? startTileIndex+(warp+1)*(long long)numTileIndices/totalWarps : (warp+1)*(long long)numTiles/totalWarps);
#else #else
const unsigned int numTiles = numTileIndices; const unsigned int numTiles = numTileIndices;
int pos = startTileIndex+warp*numTiles/totalWarps; int pos = (int) (startTileIndex+warp*(long long)numTiles/totalWarps);
int end = startTileIndex+(warp+1)*numTiles/totalWarps; int end = (int) (startTileIndex+(warp+1)*(long long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -180,11 +180,11 @@ __kernel void computeN2Energy( ...@@ -180,11 +180,11 @@ __kernel void computeN2Energy(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = warp*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int pos = (int) (warp*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
int end = (warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int end = (int) ((warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
#else #else
int pos = warp*numTiles/totalWarps; int pos = (int) (warp*(long)numTiles/totalWarps);
int end = (warp+1)*numTiles/totalWarps; int end = (int) ((warp+1)*(long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -200,11 +200,11 @@ __kernel void computeN2Energy( ...@@ -200,11 +200,11 @@ __kernel void computeN2Energy(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
const unsigned int numTiles = interactionCount[0]; const unsigned int numTiles = interactionCount[0];
int pos = get_group_id(0)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0); int pos = (int) (get_group_id(0)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0));
int end = (get_group_id(0)+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0); int end = (int) ((get_group_id(0)+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0));
#else #else
int pos = get_group_id(0)*numTiles/get_num_groups(0); int pos = (int) (get_group_id(0)*(long)numTiles/get_num_groups(0));
int end = (get_group_id(0)+1)*numTiles/get_num_groups(0); int end = (int) ((get_group_id(0)+1)*(long)numTiles/get_num_groups(0));
#endif #endif
int nextToSkip = -1; int nextToSkip = -1;
int currentSkipIndex = 0; int currentSkipIndex = 0;
......
...@@ -156,11 +156,11 @@ __kernel void computeN2Value(__global const real4* restrict posq, __local real4* ...@@ -156,11 +156,11 @@ __kernel void computeN2Value(__global const real4* restrict posq, __local real4*
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = warp*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int pos = (int) (warp*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
int end = (warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int end = (int) ((warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
#else #else
int pos = warp*numTiles/totalWarps; int pos = (int) (warp*(long)numTiles/totalWarps);
int end = (warp+1)*numTiles/totalWarps; int end = (int) ((warp+1)*(long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -169,11 +169,11 @@ __kernel void computeN2Value(__global const real4* restrict posq, __local real4* ...@@ -169,11 +169,11 @@ __kernel void computeN2Value(__global const real4* restrict posq, __local real4*
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
const unsigned int numTiles = interactionCount[0]; const unsigned int numTiles = interactionCount[0];
int pos = get_group_id(0)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0); int pos = (int) (get_group_id(0)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0));
int end = (get_group_id(0)+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0); int end = (int) ((get_group_id(0)+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0));
#else #else
int pos = get_group_id(0)*numTiles/get_num_groups(0); int pos = (int) (get_group_id(0)*(long)numTiles/get_num_groups(0));
int end = (get_group_id(0)+1)*numTiles/get_num_groups(0); int end = (int) ((get_group_id(0)+1)*(long)numTiles/get_num_groups(0));
#endif #endif
int nextToSkip = -1; int nextToSkip = -1;
int currentSkipIndex = 0; int currentSkipIndex = 0;
......
...@@ -168,11 +168,11 @@ __kernel void computeBornSum( ...@@ -168,11 +168,11 @@ __kernel void computeBornSum(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = warp*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int pos = (int) (warp*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
int end = (warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int end = (int) ((warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
#else #else
int pos = warp*numTiles/totalWarps; int pos = (int) (warp*(long)numTiles/totalWarps);
int end = (warp+1)*numTiles/totalWarps; int end = (int) ((warp+1)*(long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
...@@ -556,11 +556,11 @@ __kernel void computeGBSAForce1( ...@@ -556,11 +556,11 @@ __kernel void computeGBSAForce1(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = warp*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int pos = (int) (warp*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
int end = (warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/totalWarps; int end = (int) ((warp+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : (long)numTiles)/totalWarps);
#else #else
int pos = warp*numTiles/totalWarps; int pos = (int) (warp*(long)numTiles/totalWarps);
int end = (warp+1)*numTiles/totalWarps; int end = (int) ((warp+1)*(long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -177,11 +177,11 @@ __kernel void computeBornSum( ...@@ -177,11 +177,11 @@ __kernel void computeBornSum(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = get_group_id(0)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0); int pos = (int) (get_group_id(0)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0));
int end = (get_group_id(0)+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0); int end = (int) ((get_group_id(0)+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0));
#else #else
int pos = get_group_id(0)*numTiles/get_num_groups(0); int pos = (int) (get_group_id(0)*(long)numTiles/get_num_groups(0));
int end = (get_group_id(0)+1)*numTiles/get_num_groups(0); int end = (int) ((get_group_id(0)+1)*(long)numTiles/get_num_groups(0));
#endif #endif
int nextToSkip = -1; int nextToSkip = -1;
int currentSkipIndex = 0; int currentSkipIndex = 0;
...@@ -592,11 +592,11 @@ __kernel void computeGBSAForce1( ...@@ -592,11 +592,11 @@ __kernel void computeGBSAForce1(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = get_group_id(0)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0); int pos = (int) (get_group_id(0)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0));
int end = (get_group_id(0)+1)*(numTiles > maxTiles ? NUM_BLOCKS*(NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0); int end = (int) ((get_group_id(0)+1)*(numTiles > maxTiles ? NUM_BLOCKS*((long)NUM_BLOCKS+1)/2 : numTiles)/get_num_groups(0));
#else #else
int pos = get_group_id(0)*numTiles/get_num_groups(0); int pos = (int) (get_group_id(0)*(long)numTiles/get_num_groups(0));
int end = (get_group_id(0)+1)*numTiles/get_num_groups(0); int end = (int) ((get_group_id(0)+1)*(long)numTiles/get_num_groups(0));
#endif #endif
int nextToSkip = -1; int nextToSkip = -1;
int currentSkipIndex = 0; int currentSkipIndex = 0;
......
...@@ -193,12 +193,12 @@ __kernel void computeNonbonded( ...@@ -193,12 +193,12 @@ __kernel void computeNonbonded(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
unsigned int numTiles = interactionCount[0]; unsigned int numTiles = interactionCount[0];
int pos = (numTiles > maxTiles ? startTileIndex+warp*numTileIndices/totalWarps : warp*numTiles/totalWarps); int pos = (int) (numTiles > maxTiles ? startTileIndex+warp*(long)numTileIndices/totalWarps : warp*(long)numTiles/totalWarps);
int end = (numTiles > maxTiles ? startTileIndex+(warp+1)*numTileIndices/totalWarps : (warp+1)*numTiles/totalWarps); int end = (int) (numTiles > maxTiles ? startTileIndex+(warp+1)*(long)numTileIndices/totalWarps : (warp+1)*(long)numTiles/totalWarps);
#else #else
const unsigned int numTiles = numTileIndices; const unsigned int numTiles = numTileIndices;
int pos = startTileIndex+warp*numTiles/totalWarps; int pos = (int) (startTileIndex+warp*(long)numTiles/totalWarps);
int end = startTileIndex+(warp+1)*numTiles/totalWarps; int end = (int) (startTileIndex+(warp+1)*(long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -213,12 +213,12 @@ __kernel void computeNonbonded( ...@@ -213,12 +213,12 @@ __kernel void computeNonbonded(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
const unsigned int numTiles = interactionCount[0]; const unsigned int numTiles = interactionCount[0];
int pos = (numTiles > maxTiles ? startTileIndex+get_group_id(0)*numTileIndices/get_num_groups(0) : get_group_id(0)*numTiles/get_num_groups(0)); int pos = (int) (numTiles > maxTiles ? (unsigned int) (startTileIndex+get_group_id(0)*(long)numTileIndices/get_num_groups(0)) : get_group_id(0)*(long)numTiles/get_num_groups(0));
int end = (numTiles > maxTiles ? startTileIndex+(get_group_id(0)+1)*numTileIndices/get_num_groups(0) : (get_group_id(0)+1)*numTiles/get_num_groups(0)); int end = (int) (numTiles > maxTiles ? (unsigned int) (startTileIndex+(get_group_id(0)+1)*(long)numTileIndices/get_num_groups(0)) : (get_group_id(0)+1)*(long)numTiles/get_num_groups(0));
#else #else
const unsigned int numTiles = numTileIndices; const unsigned int numTiles = numTileIndices;
int pos = startTileIndex+get_group_id(0)*numTiles/get_num_groups(0); int pos = (int) (startTileIndex+get_group_id(0)*(long)numTiles/get_num_groups(0));
int end = startTileIndex+(get_group_id(0)+1)*numTiles/get_num_groups(0); int end = (int) (startTileIndex+(get_group_id(0)+1)*(long)numTiles/get_num_groups(0));
#endif #endif
int nextToSkip = -1; int nextToSkip = -1;
int currentSkipIndex = 0; int currentSkipIndex = 0;
......
...@@ -89,8 +89,8 @@ extern "C" __global__ void computeBornSum(unsigned long long* __restrict__ bornS ...@@ -89,8 +89,8 @@ extern "C" __global__ void computeBornSum(unsigned long long* __restrict__ bornS
const float2* __restrict__ params, unsigned int numTiles) { const float2* __restrict__ params, unsigned int numTiles) {
unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE; unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE;
unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE;
unsigned int pos = warp*numTiles/totalWarps; unsigned int pos = (unsigned int) (warp*(long long)numTiles/totalWarps);
unsigned int end = (warp+1)*numTiles/totalWarps; unsigned int end = (unsigned int) ((warp+1)*(long long)numTiles/totalWarps);
unsigned int lasty = 0xFFFFFFFF; unsigned int lasty = 0xFFFFFFFF;
__shared__ AtomData1 localData[BORN_SUM_THREAD_BLOCK_SIZE]; __shared__ AtomData1 localData[BORN_SUM_THREAD_BLOCK_SIZE];
do { do {
...@@ -223,8 +223,8 @@ extern "C" __global__ void computeGKForces( ...@@ -223,8 +223,8 @@ extern "C" __global__ void computeGKForces(
unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE; unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE;
unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE;
const unsigned int numTiles = numTileIndices; const unsigned int numTiles = numTileIndices;
unsigned int pos = startTileIndex+warp*numTiles/totalWarps; unsigned int pos = (unsigned int) (startTileIndex+warp*(long long)numTiles/totalWarps);
unsigned int end = startTileIndex+(warp+1)*numTiles/totalWarps; unsigned int end = (unsigned int) (startTileIndex+(warp+1)*(long long)numTiles/totalWarps);
real energy = 0; real energy = 0;
__shared__ AtomData2 localData[GK_FORCE_THREAD_BLOCK_SIZE]; __shared__ AtomData2 localData[GK_FORCE_THREAD_BLOCK_SIZE];
......
...@@ -196,8 +196,8 @@ extern "C" __global__ void computeWCAForce(unsigned long long* __restrict__ forc ...@@ -196,8 +196,8 @@ extern "C" __global__ void computeWCAForce(unsigned long long* __restrict__ forc
unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE; unsigned int totalWarps = (blockDim.x*gridDim.x)/TILE_SIZE;
unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE; unsigned int warp = (blockIdx.x*blockDim.x+threadIdx.x)/TILE_SIZE;
const unsigned int numTiles = numTileIndices; const unsigned int numTiles = numTileIndices;
unsigned int pos = startTileIndex+warp*numTiles/totalWarps; unsigned int pos = (unsigned int) (startTileIndex+warp*(long long)numTiles/totalWarps);
unsigned int end = startTileIndex+(warp+1)*numTiles/totalWarps; unsigned int end = (unsigned int) (startTileIndex+(warp+1)*(long long)numTiles/totalWarps);
real energy = 0; real energy = 0;
__shared__ AtomData localData[THREAD_BLOCK_SIZE]; __shared__ AtomData localData[THREAD_BLOCK_SIZE];
......
...@@ -216,12 +216,12 @@ extern "C" __global__ void computeElectrostatics( ...@@ -216,12 +216,12 @@ extern "C" __global__ void computeElectrostatics(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
const unsigned int numTiles = interactionCount[0]; const unsigned int numTiles = interactionCount[0];
int pos = (numTiles > maxTiles ? startTileIndex+warp*numTileIndices/totalWarps : warp*numTiles/totalWarps); int pos = (int) (numTiles > maxTiles ? startTileIndex+warp*(long long)numTileIndices/totalWarps : warp*(long long)numTiles/totalWarps);
int end = (numTiles > maxTiles ? startTileIndex+(warp+1)*numTileIndices/totalWarps : (warp+1)*numTiles/totalWarps); int end = (int) (numTiles > maxTiles ? startTileIndex+(warp+1)*(long long)numTileIndices/totalWarps : (warp+1)*(long long)numTiles/totalWarps);
#else #else
const unsigned int numTiles = numTileIndices; const unsigned int numTiles = numTileIndices;
int pos = startTileIndex+warp*numTiles/totalWarps; int pos = (int) (startTileIndex+warp*(long long)numTiles/totalWarps);
int end = startTileIndex+(warp+1)*numTiles/totalWarps; int end = (int) (startTileIndex+(warp+1)*(long long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -581,12 +581,12 @@ extern "C" __global__ void computeFixedField( ...@@ -581,12 +581,12 @@ extern "C" __global__ void computeFixedField(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
const unsigned int numTiles = interactionCount[0]; const unsigned int numTiles = interactionCount[0];
int pos = (numTiles > maxTiles ? startTileIndex+warp*numTileIndices/totalWarps : warp*numTiles/totalWarps); int pos = (int) (numTiles > maxTiles ? startTileIndex+warp*(long long)numTileIndices/totalWarps : warp*(long long)numTiles/totalWarps);
int end = (numTiles > maxTiles ? startTileIndex+(warp+1)*numTileIndices/totalWarps : (warp+1)*numTiles/totalWarps); int end = (int) (numTiles > maxTiles ? startTileIndex+(warp+1)*(long long)numTileIndices/totalWarps : (warp+1)*(long long)numTiles/totalWarps);
#else #else
const unsigned int numTiles = numTileIndices; const unsigned int numTiles = numTileIndices;
int pos = startTileIndex+warp*numTiles/totalWarps; int pos = (int) (startTileIndex+warp*(long long)numTiles/totalWarps);
int end = startTileIndex+(warp+1)*numTiles/totalWarps; int end = (int) (startTileIndex+(warp+1)*(long long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -319,12 +319,12 @@ extern "C" __global__ void computeInducedField( ...@@ -319,12 +319,12 @@ extern "C" __global__ void computeInducedField(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
const unsigned int numTiles = interactionCount[0]; const unsigned int numTiles = interactionCount[0];
int pos = (numTiles > maxTiles ? startTileIndex+warp*numTileIndices/totalWarps : warp*numTiles/totalWarps); int pos = (int) (numTiles > maxTiles ? startTileIndex+warp*(long long)numTileIndices/totalWarps : warp*(long long)numTiles/totalWarps);
int end = (numTiles > maxTiles ? startTileIndex+(warp+1)*numTileIndices/totalWarps : (warp+1)*numTiles/totalWarps); int end = (int) (numTiles > maxTiles ? startTileIndex+(warp+1)*(long long)numTileIndices/totalWarps : (warp+1)*(long long)numTiles/totalWarps);
#else #else
const unsigned int numTiles = numTileIndices; const unsigned int numTiles = numTileIndices;
int pos = startTileIndex+warp*numTiles/totalWarps; int pos = (int) (startTileIndex+warp*(long long)numTiles/totalWarps);
int end = startTileIndex+(warp+1)*numTiles/totalWarps; int end = (int) (startTileIndex+(warp+1)*(long long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
...@@ -303,12 +303,12 @@ extern "C" __global__ void computeElectrostatics( ...@@ -303,12 +303,12 @@ extern "C" __global__ void computeElectrostatics(
#ifdef USE_CUTOFF #ifdef USE_CUTOFF
const unsigned int numTiles = interactionCount[0]; const unsigned int numTiles = interactionCount[0];
int pos = (numTiles > maxTiles ? startTileIndex+warp*numTileIndices/totalWarps : warp*numTiles/totalWarps); int pos = (int) (numTiles > maxTiles ? startTileIndex+warp*(long long)numTileIndices/totalWarps : warp*(long long)numTiles/totalWarps);
int end = (numTiles > maxTiles ? startTileIndex+(warp+1)*numTileIndices/totalWarps : (warp+1)*numTiles/totalWarps); int end = (int) (numTiles > maxTiles ? startTileIndex+(warp+1)*(long long)numTileIndices/totalWarps : (warp+1)*(long long)numTiles/totalWarps);
#else #else
const unsigned int numTiles = numTileIndices; const unsigned int numTiles = numTileIndices;
int pos = startTileIndex+warp*numTiles/totalWarps; int pos = (int) (startTileIndex+warp*(long long)numTiles/totalWarps);
int end = startTileIndex+(warp+1)*numTiles/totalWarps; int end = (int) (startTileIndex+(warp+1)*(long long)numTiles/totalWarps);
#endif #endif
int skipBase = 0; int skipBase = 0;
int currentSkipIndex = tbx; int currentSkipIndex = tbx;
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment