以非阻塞方式读取文件
函数定义
- 以非聚合模式从单个文件指针指定的位置开始读取文件。MPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) PMPI_File_iread(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) 
- 以聚合模式从单个文件指针指定的位置开始读取文件。MPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) PMPI_File_iread_all(MPI_File fh, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) 
- 以非聚合模式显式指定的偏移量读取文件。MPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) PMPI_File_iread_at(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) 
- 以聚合模式显式指定的偏移量读取文件。MPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) PMPI_File_iread_at_all(MPI_File fh, MPI_Offset offset, void *buf, int count, MPI_Datatype datatype, MPI_Request *request) 
参数
| 参数名 | 描述 | 取值范围 | 输入/输出 | 
|---|---|---|---|
| fh | 文件(句柄) | 非空 | 输入 | 
| offset | 偏移量 | 整数 | 输入 | 
| *buf | 缓冲区的初始地址 | 非空 | 输出 | 
| count | 缓冲区中的元素数 | 非负整数 | 输入 | 
| datatype | 每个缓冲元素的数据类型 | 非空 | 输入 | 
| *request | request对象(句柄) | 非空 | 输出 | 
返回值
- 成功:返回MPI_SUCCESS。
- 失败:返回错误码。
错误码
| 错误码 | 描述 | 
|---|---|
| MPI_ERR_NO_SUCH_FILE | 文件不存在 | 
| MPI_ERR_BAD_FILE | 无效的文件名 | 
| MPI_ERR_FILE | 无效文件句柄 | 
| MPI_ERR_ARG | 其他类型的无效参数 | 
| MPI_ERR_AMODE | 不支持的访问模式 | 
| MPI_ERR_BUFFER | 无效buffer参数 | 
| MPI_ERR_COUNT | 无效count参数 | 
| MPI_ERR_TYPE | 无效类型参数 | 
| MPI_ERR_DIMS | 维度不合理 | 
| MPI_ERR_NO_SPACE | 空间不足 | 
| MPI_ERR_NO_MEM | 内存错误 | 
| MPI_ERR_IO | 其他I/O错误 | 
| MPI_ERR_ACCESS | 权限被拒绝 | 
| MPI_ERR_OTHER | 其他错误 | 
注意
- 中间件不存在collective与indepent的严格划分。
- begin与end以file为核心进行对应,begin函数需要在调用end函数之后,才能再次调用。
- iread与read无明显区别。
- 若文件设置了视图,则读写时需要视图保持一致,且设置视图后,读写的基本单位为MPI_File_set_view / PMPI_File_set_view接口中的etype。