Advertisement
alexsetyaev

task_5_reverse

Sep 28th, 2021 (edited)
178
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.51 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. const int n = 12288;
  5.  
  6. __global__ void staticReverse(int *d)
  7. {
  8.     __shared__ int shmem[n];
  9.     if (threadIdx.x >= n){
  10.         return;
  11.     }
  12.     shmem[threadIdx.x] = d[threadIdx.x];
  13.     __syncthreads();
  14.     d[threadIdx.x] = shmem[n - threadIdx.x - 1];
  15.    
  16. }
  17.  
  18. __global__ void dynamicReverse(int *d, int n)
  19. {
  20.         extern __shared__ int shmem[];
  21.          if (threadIdx.x >= n){
  22.             return;
  23.         }
  24.         shmem[threadIdx.x] = d[threadIdx.x];
  25.         __syncthreads();
  26.         d[threadIdx.x] = shmem[n - threadIdx.x - 1];
  27. }
  28.  
  29. int main(void)
  30. {
  31.   //const int n = 64; // FIX ME TO max possible size
  32.   int a[n], r[n], d[n]; // FIX ME TO dynamic arrays if neccesary
  33.  
  34.   for (int i = 0; i < n; i++) {
  35.     a[i] = i;
  36.     r[i] = n-i-1;
  37.     d[i] = 0;
  38.   }
  39.  
  40.   int *d_d;
  41.   cudaMalloc(&d_d, n * sizeof(int));
  42.  
  43.   // run version with static shared memory
  44.   cudaMemcpy(d_d, a, n*sizeof(int), cudaMemcpyHostToDevice);
  45.   staticReverse<<<1, n>>>(d_d); // FIX kernel execution params
  46.   cudaMemcpy(d, d_d, n*sizeof(int), cudaMemcpyDeviceToHost);
  47.   for (int i = 0; i < n; i++)
  48.     if (d[i] != r[i]) printf("Error: d[%d]!=r[%d] (%d, %d)n", i, i, d[i], r[i]);
  49.  
  50.   // run dynamic shared memory version
  51.   cudaMemcpy(d_d, a, n*sizeof(int), cudaMemcpyHostToDevice);
  52.   dynamicReverse<<<1, n, n*sizeof(int)>>>(d_d, n); // FIX kernel executon params
  53.   cudaMemcpy(d, d_d, n * sizeof(int), cudaMemcpyDeviceToHost);
  54.   for (int i = 0; i < n; i++)
  55.     if (d[i] != r[i]) printf("Error: d[%d]!=r[%d] (%d, %d)n", i, i, d[i], r[i]);
  56. }
  57.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement