我正在解决CUDA编程作业问题,并努力读取其中的大数据。我正在通过大学的计算机上通过SSH远程运行。
我正在处理CSV文件中的三列数据和2 ^ 25行。每次运行代码时,我都会在读取CSV的while循环的第900次迭代附近读取数据时遇到分段错误。
我已经对堆栈溢出进行了广泛的搜索,并尝试了几种不同的方法来读取数据。
static double inputs[2^25];
static double outputs[2^25];
static double txval[2^25];
FILE *input = fopen("coins.csv", "r");
int j = -99;
char buffer[1024];
char *field;
unsigned long k = 0;
if(input == NULL){
printf("Unable to open file\n");
return 1;
}
while(fgets(buffer, 1024, input) && k < 2^25){
// skip the first row with column titles
if(j == -99){
j = 0;
}
else{
field = strtok(buffer, ",");
inputs[k] = atof(field);
field = strtok(NULL, ",");
outputs[k] = atof(field);
field = strtok(NULL, ",");
txval[k] = atof(field);
k = k + 1;
}
}
fclose(input);
预期的结果是,由于每次while循环运行时缓冲区都会被覆盖,因此将读取整个文件。
实际结果是,每次在while循环的第900次迭代中都会发生分段错误。
答案 0 :(得分:2)
2^25
不是“ 2等于25的幂”。这是2 XOR 25。
我建议您使用值33554432
。
编辑:(感谢@bruno)
33554432
更容易读为1 << 25
。