这段代码来自我正在编写的程序,用于获取x col和x行以在CUDA上运行矩阵乘法,并行处理。样本量越大越好。
我有一个自动生成x个随机数的函数。
我知道答案很简单,但我只想知道原因。但是当我用数组中的625000000个元素运行它时,它会出现故障。我认为这是因为我已经超过了内存允许的大小。
对于较大的数字,我应该使用什么数据类型代替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
答案 0 :(得分:1)
data
的内存分配可能失败。
幸运的是,您几乎肯定不需要存储大量随机数。
而不是存储:
data[n]=rand() / (float)RAND_MAX
对于n
的大量集合,您可以运行:
srand(n);
value = rand() / (float)RAND_MAX;
当你需要一个特定的数字时,你每次都会得到相同的值,好像它们都是事先计算好的。
答案 1 :(得分:0)
我认为你已超过为data
分配的价值。当你的newrowsize太大时,你正在访问未分配的内存。
请记住,data
并非无限大。
答案 2 :(得分:-2)
真正的问题是,如果问题实际上是用于阵列访问的整数大小,那么您将无法修复它。我想你可能只是在你的记忆中没有足够的空间来存储大量的数据。
如果要扩展它,只需定义一个自定义结构或类(如果您使用的是C ++)。但是你将失去与数组有关的O(1)时间访问复杂性。