简单的OpenCL随机生成器

时间:2013-04-17 15:48:18

标签: c opencl

我一直在网上寻找一个简单的在线OpenCL数字生成器。我找不到任何易于使用的东西。

我想要以下内容:

int generateRandomNumber(int fromNumber, int toNumber)
{
    int num = functionOfRandomness();
    return num;
}

如果有人知道我如何在两个值之间得到一个随机数的例子,那将非常感激。它不一定是一个复杂的随机系统,只需要简单快速的工作

由于

2 个答案:

答案 0 :(得分:3)

我从geeks3d的Real-Time OpenCL Path Tracer中删除了以下代码。内核是纯文本的。这是我第一次学习如何使用OpenCL的方式。

http://www.geeks3d.com/20120502/laguna-real-time-opencl-path-tracer/

float4 rand(uint2 *state)
{
    const float4 invMaxInt = (float4) (1.0f/4294967296.0f, 1.0f/4294967296.0f, 1.0f/4294967296.0f, 0);
    uint x = (*state).x * 17 + (*state).y * 13123;
    (*state).x = (x<<13) ^ x;
    (*state).y ^= (x<<7);

    uint4 tmp = (uint4)
    ( (x * (x * x * 15731 + 74323) + 871483),
      (x * (x * x * 13734 + 37828) + 234234),
      (x * (x * x * 11687 + 26461) + 137589), 0 );

    return convert_float4(tmp) * invMaxInt;
}

答案 1 :(得分:-3)

C中的标准rand()函数将生成随机浮点数。

您只需要在自己的函数中调用它,并通过内部RAND_MAX变量调整输出。以下示例应在所需范围内生成随机浮点数。如果您需要,可以轻松地将结果转换为 int

#include<stdlib.h>

float myrand( float setmin, float setmax )
{

    float range = setmax - setmin ; 

    if(RAND_MAX>=range) 
       return ( setmin + rand()/(RAND_MAX/range) ) 

    else
        return ( setmin + rand()/(range/RAND_MAX) ) 

}