Advertisement
Guest User

Untitled

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