产生随机数

CUDA与C++随机数生成

cuda产生随机数的程序为

#include <iostream>  
#include <cuda.h>  
#include<curand.h>  
#include<curand_kernel.h>  
  
  
int n = 200;  
using namespace std;  
  
__device__ float generate( curandState* globalState, int ind )   
{  
    //int ind = threadIdx.x;  
    curandState localState = globalState[ind];  
    float RANDOM = curand_uniform( &localState );  
    globalState[ind] = localState;  
    return RANDOM;  
}  
  
__global__ void setup_kernel ( curandState * state, unsigned long seed )  
{  
    int id = threadIdx.x;  
    curand_init ( seed, id, 0, &state[id] );  
}  
  
__global__ void kernel(float* N, curandState* globalState, int n)  
{  
    // generate random numbers  
    for(int i=0;i<400;i++)  
    {  
        int k = generate(globalState, i) * 3;  
        while(k > n*n-1)  
        {  
            k-=(n*n-1);  
        }  
        N[i] = k-1;  
    }  
}  
  
int main()   
{  
    int N=400;  
  
    curandState* devStates;  
    cudaMalloc ( &devStates, N*sizeof( curandState ) );  
  
    // setup seeds  
    setup_kernel <<< 1, N >>> ( devStates,unsigned(time(NULL)) );  
  
    float N2[400];  
    float* N3;  
    cudaMalloc((void**) &N3, sizeof(float)*N);  
  
    kernel<<<1,1>>> (N3, devStates, n);  
  
    cudaMemcpy(N2, N3, sizeof(float)*N, cudaMemcpyDeviceToHost);  
  
    for(int i=0;i<N;i++)  
    {  
        cout<<N2[i]<<endl;  
    }  
  
    return 0;  
}


其中400是产生随机数的个数

c++产生随机数的程序为

#include <stdlib.h> 
#include <stdio.h> 
#include <time.h> 
int main() 
{ 
	int i,k; 
	srand( (unsigned)time( NULL ) );
	int num_0=0,num_1=0,num_f1; 
	for( i = 0; i < 500000;i++ ) 
	{ 
		k=rand() % 3-1;; 
		printf( " k=%d\n", k );
		if(k==0){
			num_0++;
		} else if(k==1){
			num_1++;
		}else{
			num_f1++;
		}
	}
	printf("%d\n",num_0);
	printf("%d\n",num_1);
	printf("%d\n",num_f1);	
	return 0; 
} 



转载于:https://www.cnblogs.com/hellokittyblog/p/8185293.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值