}
static __global__ void g_firstBestsUpdate(float* g_bestFitnesses, float* g_fitnesses, uint32_t* g_localBestIDs)
{
uint32_t particleID = threadIdx.x;
uint32_t posID = IMUL(blockIdx.x, blockDim.x) + particleID;
float* s_fitnesses = (float*) s_addends;
float fitness = tex1Dfetch(t_texFitnesses, posID);
g_bestFitnesses[posID] = fitness;
int bestID = particleID + 1;
s_fitnesses[bestID] = fitness;
if (particleID == blockDim.x - 1)
s_fitnesses[0 ] = fitness;
if (particleID == 0)
s_fitnesses[blockDim.x + 1] = fitness;
if (s_fitnesses[particleID] BETTER_THAN s_fitnesses[bestID])
bestID = particleID;
if (s_fitnesses[particleID+2] BETTER_THAN s_fitnesses[bestID])
bestID = particleID+2;
if (bestID == 0)
bestID = blockDim.x;
if (bestID == (blockDim.x + 1))
bestID = 1;