Parallel processing 用UPC读取文件

Parallel processing 用UPC读取文件,parallel-processing,hpc,upc,Parallel Processing,Hpc,Upc,我开始学习UPC,我有以下代码来读取文件: upc_file_t *fileIn; int n; fileIn = upc_all_fopen("input_small", UPC_RDONLY | UPC_INDIVIDUAL_FP , 0, NULL); upc_all_fread_local(fileIn, &n, sizeof(int), 1, UPC_IN_ALLSYNC | UPC_OUT_ALLSYNC); upc_barrier; printf("%d\n", n);

我开始学习UPC,我有以下代码来读取文件:

upc_file_t *fileIn;
int n;
fileIn = upc_all_fopen("input_small", UPC_RDONLY | UPC_INDIVIDUAL_FP , 0, NULL);
upc_all_fread_local(fileIn, &n, sizeof(int), 1, UPC_IN_ALLSYNC | UPC_OUT_ALLSYNC);

upc_barrier;
printf("%d\n", n);

upc_all_fclose(fileIn);
然而,输出(n的值)总是808651319,这意味着有什么地方出错了,我找不到它是什么。我输入的文件的第一行是“7”,因此
printf
的结果应该是7

知道为什么会这样吗


提前谢谢

UPC并行I/O库执行未格式化(二进制)输入/输出,而不是像标准C库中的
(f)printf(3)
/
(f)scanf(3)
那样格式化。并行I/O无法处理文本文件,因为它们具有可变长度记录等固有属性

upc_all_fread_local(fileIn, &n, sizeof(int), 1, UPC_IN_ALLSYNC | UPC_OUT_ALLSYNC)
行为类似于对标准C库函数的以下调用,用于从文件进行无格式读取:

fread(&n, sizeof(int), 1, fh)
您只需将文件中的1个
sizeof(int)
字节(大多数平台上为4字节)读取到
n
的地址中。您得到的十六进制数
808651319
0x30330A37
。在x86/x64这样的小端系统上,它以
0x37 0x0A 0x33 0x30
的形式存储在内存和磁盘上(反向字节顺序)。这些是字符串
7\n30
的前4个字节的ASCII码(
\n
或LF是换行符/新行符),因此我猜您的
输入文件看起来像:

7
30...
...
您应该使用
fwrite(3)
以二进制格式准备输入数据,而不是使用
(f)printf(3)
或您选择的文本编辑器