Advertisement
Guest User

Kernel launches

a guest
May 26th, 2018
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.49 KB | None | 0 0
  1. void ParticleSystem::runParticleSimulation(float dt)
  2. {
  3.     //Switch around buffers
  4.     dVelocityCurrent = dVelocityOld;
  5.     dVelocityOld = dVelocityNew;
  6.     dVelocityNew = dVelocityCurrent;
  7.  
  8.  
  9.     //Set cells to 0
  10.     checkCudaError(cudaMemset((void*) cellCountArray, 0, sizeof(size_t) * params.gridCellCount));
  11.     checkCudaError(cudaDeviceSynchronize());
  12.  
  13.     //Count particles in cells
  14.     cellCount<<<(numParticles + 255) / 256, 256>>>(numParticles, dPosition, cellCountArray);
  15.     checkCudaError(cudaDeviceSynchronize());
  16.  
  17.     //Calculate prefix sum
  18.     thrust::device_ptr<size_t> ptr = thrust::device_pointer_cast(cellCountArray);
  19.     thrust::exclusive_scan(ptr, ptr + params.gridCellCount, ptr);
  20.     checkCudaError(cudaDeviceSynchronize());
  21.  
  22.     //Populate cellGrid
  23.     fillCellGrid<<<(numParticles + 255) / 256, 256>>>(numParticles, dPosition, cellCountArray, cellGrid);
  24.     checkCudaError(cudaDeviceSynchronize());
  25.  
  26.     //Calculate densities
  27.     calculateDensities<<<(numParticles + 255) / 256, 256>>>(numParticles, dPosition, cellGrid, cellCountArray, densityArray);
  28.     checkCudaError(cudaDeviceSynchronize());
  29.  
  30.     //Calculate Velocity
  31.     calculateVellocity<<<(numParticles + 255) / 256, 256>>>(numParticles, dPosition, dVelocityCurrent, dVelocityNew, cellGrid, cellCountArray, densityArray, dt);
  32.     checkCudaError(cudaDeviceSynchronize());
  33.  
  34.     //Calculate Position
  35.     calculatePosition<<<(numParticles + 255) / 256, 256>>>(numParticles, dPosition, dVelocityNew, dt);
  36.     checkCudaError(cudaDeviceSynchronize());
  37.  
  38.     dVelocityCurrent = dVelocityNew;
  39. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement