这部分代码来自我正在编写的一个程序,该程序接受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;
当您需要一个特定的数字时,您每次都会获得相同的值,就像它们都是预先计算的一样。