这部分代码来自我正在编写的一个程序,该程序接受x col和x行以在CUDA(并行处理)上运行矩阵乘法。样本量越大,越好。

我有一个自动生成x数量的随机数的函数。

我知道答案很简单,但我只想知道为什么。但是当我用数组中的625000000个元素运行它时,它会出现段错误。我认为这是因为我已经超出了int内存允许的大小。

对于更大的数,我应该使用哪种数据类型代替int?
这样便可以分配数据,然后将其传递到函数中。

a.elements = (float*) malloc(mem_size_A);


哪里

int mem_size_A = sizeof(float) * size_A; //for the example let size_A be 625,000,000


已通过:

randomInit(a.elements, a.rowSize,a.colSize, oRowA, oColA);


randomInit的作用是说我输入一个2x2,但我将其填充到16的倍数。因此,它取了2x2,并将矩阵填充为零的16x16,而2x2仍然存在。

void randomInit(float* data, int newRowSize,int newColSize,  int oldRowSize, int oldColSize)
{
    printf("Initializing random function. The new sized row is %d\n", newRowSize);
    for (int i = 0; i < newRowSize; i++)//go per row of new sized row.
    {
        for(int j=0;j<newColSize;j++)
        {
            printf("This loop\n");
            if(i<oldRowSize&&j<oldColSize)
            {
                data[newRowSize*i+j]=rand() / (float)RAND_MAX;//brandom();
            }
            else
                data[newRowSize*i+j]=0;
        }
    }
}


我什至在循环中使用了printf来运行它。这是我得到的结果:

Creating the random numbers now
Initializing random function. The new sized row is 25000
This loop
Segmentation fault

最佳答案

您为data分配的内存可能失败。

幸运的是,您几乎可以肯定不需要存储大量随机数。

而不是存储:

data[n]=rand() / (float)RAND_MAX


对于n的大量集合,可以运行:

srand(n);
value = rand() / (float)RAND_MAX;


当您需要一个特定的数字时,您每次都会获得相同的值,就像它们都是预先计算的一样。

08-16 13:56