Wow_Rasl

Untitled

May 26th, 2022
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.93 KB | None | 0 0
  1.  
  2. #include "cuda_runtime.h"
  3. #include "device_launch_parameters.h"
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <cstdlib>
  8. #include <time.h>
  9. #include <curand_kernel.h>
  10. #define pnt 100
  11. #define SEED 9876543
  12. #define THREADS 80
  13. #define BLOCKS 10
  14. __global__ void mykernel(void) {
  15. }
  16. __global__ void addKernel(int* c, const int* a, const int* b) {
  17.     int i = threadIdx.x;
  18.     c[i] = a[i] + b[i];
  19. }
  20. __device__ float f(float x) {
  21.     return x;
  22. }
  23. // инициализация генератора
  24. __global__ void initfGENS(curandStatePhilox4_32_10_t* d_gen) {
  25.     printf("чо бля");
  26.     for (int id = threadIdx.x + blockIdx.x * blockDim.x; id < THREADS * BLOCKS; id += THREADS * BLOCKS) {
  27.         curand_init(SEED, id, 0, d_gen + id);
  28.     }
  29.  
  30. }
  31. __global__ void parallel_monte_carlo_integrate(curandStatePhilox4_32_10_t* d_gen, int R, float* result) {
  32.     float w = 1 / (1.0 * R);
  33.     int success = 0;
  34.     int cp = 0;
  35.     int id = threadIdx.x + blockIdx.x * blockDim.x;
  36.     for (int j = 0; j < pnt; j++) {
  37.         float x = 1.0 * curand_uniform(&d_gen[id]) / R + w * id;
  38.         float y = 1.0 * curand_uniform(&d_gen[id]);
  39.         success = success + int(f(x) < y);
  40.         cp++;
  41.     }
  42.     *result = success * 1.0 / cp;
  43.     printf("%lf\n", *result);
  44. }
  45. int main() {
  46.     // инициализация генератора
  47.     curandStatePhilox4_32_10_t* d_gen;
  48.     cudaMalloc((void**)&d_gen, THREADS * BLOCKS * sizeof(curandStatePhilox4_32_10_t));
  49.     initfGENS << < 1, 10 >> > (d_gen);
  50.  //   cudaGetLastError();
  51.     float result;
  52.     int R = 10;
  53.     float* dev_result;
  54.     cudaMalloc((void**)&dev_result, sizeof(float));
  55.     parallel_monte_carlo_integrate << <THREADS, BLOCKS >> > (d_gen, R, dev_result);
  56.     cudaMemcpy(&result, dev_result, sizeof(float), cudaMemcpyDeviceToHost);
  57.     printf("%lf", result);
  58.     //освобождение памяти
  59.     cudaFree(d_gen);
  60.     cudaFree(dev_result);
  61.     return 0;
  62. }
  63.  
Add Comment
Please, Sign In to add comment