Advertisement
Guest User

Untitled

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