Advertisement
Guest User

Untitled

a guest
Apr 9th, 2017
215
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.98 KB | None | 0 0
  1. __global__ void addKernel(float *POSX, float *POSY, float *POSR_X, float *POSR_Y, float *POSR)
  2. {
  3.     int first = threadIdx.x;
  4.     float  den;
  5.     POSR_X[first] = 0; POSR_Y[first] = 0;
  6.     for (int next = 0; next < N; next++) {
  7.         if ((first != next) && ((POSX[next] != POSX[first]) || (POSY[next] != POSY[first]))) {
  8.             den = 100000 * sqrt((POSX[next] - POSX[first])*(POSX[next] - POSX[first]) + (POSY[next] - POSY[first])*(POSY[next] - POSY[first]));
  9.             POSR_X[first] += (POSX[next] - POSX[first]) / den;
  10.             POSR_Y[first] += (POSY[next] - POSY[first]) / den;
  11.         }
  12.     }
  13.     POSR[first] += POSR_X[first];
  14.     POSR[first + N] += POSR_Y[first];
  15. }
  16.  
  17. void GPU_Math()
  18. {
  19.     float *CU_POSR, *CU_POSX, *CU_POSY, *CU_POSR_X, *CU_POSR_Y;
  20.  
  21.     cudaMalloc((void**)&CU_POSX, N * sizeof(int));
  22.     cudaMalloc((void**)&CU_POSY, N * sizeof(int));
  23.     cudaMalloc((void**)&CU_POSR_X, N * sizeof(int));
  24.     cudaMalloc((void**)&CU_POSR_Y, N * sizeof(int));
  25.     cudaMalloc((void**)&CU_POSR, 2 * N * sizeof(int));
  26.  
  27.     cudaMemcpy(CU_POSX, POSX, N * sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice);
  28.     cudaMemcpy(CU_POSY, POSY, N * sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice);
  29.     cudaMemcpy(CU_POSR_X, AX_M, N * sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice);
  30.     cudaMemcpy(CU_POSR_Y, AY_M, N * sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice);
  31.     cudaMemcpy(CU_POSR, POSR, 2 * N * sizeof(int), cudaMemcpyKind::cudaMemcpyHostToDevice);
  32.  
  33.     addKernel << <1, N >> >(CU_POSX, CU_POSY, CU_POSR_X, CU_POSR_Y, CU_POSR);
  34.  
  35.     cudaMemcpy(AX_M, CU_POSR_X, N * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost);
  36.     cudaMemcpy(AY_M, CU_POSR_Y, N * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost);
  37.     cudaMemcpy(POSX, CU_POSX, N * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost);
  38.     cudaMemcpy(POSY, CU_POSY, N * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost);
  39.     cudaMemcpy(POSR, CU_POSR, 2 * N * sizeof(int), cudaMemcpyKind::cudaMemcpyDeviceToHost);
  40.  
  41.     cudaFree(CU_POSX);
  42.     cudaFree(CU_POSY);
  43.     cudaFree(CU_POSR_X);
  44.     cudaFree(CU_POSR_Y);
  45. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement