我正在完成一个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次迭代时发生分段错误。
2^25
不是“2强25”。它是2 XOR 25。
我建议你使用值33554432
。
编辑:(感谢@bruno)
33554432
比1 << 25
更容易阅读。