#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#include<cuda.h>
#include<curand.h>
define SIZE 100000
define N 10000000
define CUDA_CALL(x) do { if((x) != cudaSuccess) {\
printf("Error at %s:%d\n",__FILE__,__LINE__);\
return EXIT_FAILURE;}} while(0)
define CURAND_CALL(x) do { if((x) != CURAND_STATUS_SUCCESS) { \
printf("Error at %s:%d\n",__FILE__,__LINE__);\
return EXIT_FAILURE;}} while(0)
int main(int argc, char** argv){
int i;
float fsize = SIZE * sizeof(float);
float elapsetime;
//allcared host memory
float* h_farr = (float* )malloc( fsize );
double C_farr = 0.0;
//initial host memory
for (i = 0; i < SIZE; i++ )
h_farr[ i ] = 0.0f;
cudaEvent_t timer_start, timer_end;
CUDA_CALL( cudaEventCreate( &timer_start ));
CUDA_CALL( cudaEventCreate( &timer_end ));
curandGenerator_t gen;
//Create pseudo-random number generator
CURAND_CALL( curandCreateGeneratorHost( &gen, CURAND_RNG_PSEUDO_XORWOW));
CURAND_CALL( curandSetPseudoRandomGeneratorSeed(gen,1234ULL));
CUDA_CALL( cudaEventRecord( timer_start, 0));
// Create float random number in Device
for(i = 0;i < N/SIZE ;i++)
curandGenerateUniform( gen, h_farr ,SIZE);
for(i = 0;i < N ;i++)
C_farr = h_farr[0];
CUDA_CALL( cudaEventRecord( timer_end, 0));
CUDA_CALL( cudaEventSynchronize( timer_start));
CUDA_CALL( cudaEventSynchronize( timer_end));
CUDA_CALL( cudaEventElapsedTime( &elapsetime, timer_start, timer_end ));
printf(“The time of generte float number in GPU is %2.6f (ms)\n”,elapsetime);
CUDA_CALL( cudaEventRecord( timer_start, 0));
// Create float random number in Host
for(i = 0;i < N ;i++)
C_farr = drand48();
CUDA_CALL( cudaEventRecord( timer_end, 0));
CUDA_CALL( cudaEventSynchronize( timer_start));
CUDA_CALL( cudaEventSynchronize( timer_end));
CUDA_CALL( cudaEventElapsedTime( &elapsetime, timer_start, timer_end ));
printf(“The time of generte float number in CPU is %2.6f (ms)\n”,elapsetime);
CURAND_CALL(curandDestroyGenerator(gen));
//free
free( h_farr );
CUDA_CALL( cudaFree( d_farr ));
return 0;
}