{
const unsigned int bestsUpdateSharedAmount = (particlesNumber + 2) * sizeof(float);
g_firstBestsUpdate<<<bestsUpdateGrid, bestsUpdateBlock, bestsUpdateSharedAmount>>>(g_bestFitnesses, g_fitnesses, g_localBestIDs);
optimizerCudaCheckError("h_cudaPSO_firstBestsUpdate: execution failed\n", __FILE__, __LINE__);
}
__host__ void h_cudaPSO_positionsUpdate(float W, float C1, float C2, float* g_positions, float* g_velocities, float* g_bestPositions,
uint32_t* g_updateFlags, uint32_t* g_localBestIDs, curandState* devStates,
float2* g_bounds, dim3 updateGrid, dim3 updateBlock)
{
g_positionsUpdate<<<updateGrid, updateBlock>>>(W, C1, C2, g_positions, g_velocities, g_bestPositions, g_updateFlags, g_localBestIDs, devStates, g_bounds);
optimizerCudaCheckError("h_cudaPSO_Optimize: g_positionsUpdate() execution failed\n", __FILE__, __LINE__);
}
__host__ void h_cudaPSO_bestsUpdate(float* g_bestFitnesses,float* g_fitnesses, uint32_t* g_localBestIDs, uint32_t* g_updateFlags,
int particlesNumber, dim3 bestsUpdateGrid, dim3 bestsUpdateBlock)
{
const unsigned int bestsUpdateSharedAmount = (particlesNumber + 2) * sizeof(float);
g_bestsUpdate<<<bestsUpdateGrid, bestsUpdateBlock, bestsUpdateSharedAmount>>>(g_bestFitnesses, g_fitnesses, g_localBestIDs, g_updateFlags);
optimizerCudaCheckError("h_cudaPSO_bestsUpdate: execution failed\n", __FILE__, __LINE__);
}
__host__ void h_cudaPSO_BindTextures(int swarmsNumber, int particlesNumber, int problemDimension,
float* g_positions, float* g_bestPositions, float* g_velocities,
float* g_fitnesses, float* g_bestFitnesses, uint32_t* g_localBestIDs, uint32_t* g_update)
{
int dim, actualParticleSize = iAlignUp(problemDimension, 16);
dim = swarmsNumber * particlesNumber * actualParticleSize * sizeof(float);
cudaBindTexture(NULL, t_texPositions, g_positions, dim);
optimizerCudaCheckError("h_init_cudaPSO: cudaBindTexture() execution failed\n", __FILE__, __LINE__);
cudaBindTexture(NULL, t_texBestPositions, g_bestPositions, dim);
optimizerCudaCheckError("h_cudaPSOBindBestPositionsTextures: cudaBindTexture() execution failed\n", __FILE__, __LINE__);
cudaBindTexture(NULL, t_texVelocities, g_velocities, dim);
optimizerCudaCheckError("h_cudaPSOBindPositionsTextures: cudaBindTexture() execution failed\n", __FILE__, __LINE__);
dim = swarmsNumber * particlesNumber * sizeof(float);
cudaBindTexture(NULL, t_texFitnesses, g_fitnesses, dim);
optimizerCudaCheckError("h_cudaPSOBindFitnessesTextures: cudaBindTexture() execution failed\n", __FILE__, __LINE__);
cudaBindTexture(NULL, t_texBestFitnesses, g_bestFitnesses, dim);
optimizerCudaCheckError("h_cudaPSOBindBestFitnessesTextures: cudaBindTexture() execution failed\n", __FILE__, __LINE__);