Parallel processing Mpi_文件_iwrite写入失败;aio_write()错误:参数无效 if(我的排名==0) { sprintf(str,“\n”); MPI_文件iwrite(fp、str、strlen(str)、MPI_字符和请求); a=a+strlen(str); sprintf(str,“\n”); MPI_文件iwrite(fp、str、strlen(str)、MPI_字符和请求); a=a+strlen(str); sprintf(str,“\n”); MPI_文件iwrite(fp、str、strlen(str)、MPI_字符和请求); a=a+strlen(str); }
aio_write()错误:参数无效; 在关闭文件之前,我还有一个等待命令。 在使用openmpi/2.0.1的集群上使用时会发生此错误 在使用openmpi/1.10.1的本地计算机上,它工作正常是一种非阻塞操作。因此,它可以在被调用后立即返回,并在返回后读取Parallel processing Mpi_文件_iwrite写入失败;aio_write()错误:参数无效 if(我的排名==0) { sprintf(str,“\n”); MPI_文件iwrite(fp、str、strlen(str)、MPI_字符和请求); a=a+strlen(str); sprintf(str,“\n”); MPI_文件iwrite(fp、str、strlen(str)、MPI_字符和请求); a=a+strlen(str); sprintf(str,“\n”); MPI_文件iwrite(fp、str、strlen(str)、MPI_字符和请求); a=a+strlen(str); },parallel-processing,mpi,fwrite,openmpi,Parallel Processing,Mpi,Fwrite,Openmpi,aio_write()错误:参数无效; 在关闭文件之前,我还有一个等待命令。 在使用openmpi/2.0.1的集群上使用时会发生此错误 在使用openmpi/1.10.1的本地计算机上,它工作正常是一种非阻塞操作。因此,它可以在被调用后立即返回,并在返回后读取str的内容。以下是几个后果: 在调用MPI\u File\u iwrite()之后立即修改缓冲区str不是一个好主意。实际上,在修改缓冲区str之前,必须检查写入操作的完成情况 连续调用MPI\u File\u iwrite()会导致
str
的内容。以下是几个后果:
- 在调用
之后立即修改缓冲区MPI\u File\u iwrite()
不是一个好主意。实际上,在修改缓冲区str
之前,必须检查写入操作的完成情况李>str
- 连续调用
会导致文件被置乱:写入操作的顺序可能与调用的顺序不同MPI\u File\u iwrite()
- 每次调用
时覆盖请求是一种很好的方法,可以确保永远不会检查所有写入操作的完成情况MPI\u File\u iwrite(…,&request)
- 坚持或调用
MPI\u Wait(&request,MPI\u STATUS\u IGNORE)每次调用
后立即执行code>。这样,写操作的顺序将与其中一个调用相同李>MPI\u File\u iwrite()
- 如果行的顺序无关紧要,则以下代码可能会起作用:
if(my_rank==0) { sprintf(str,"<?xml version=\"1.0\" ?>\n"); MPI_File_iwrite(fp,str,strlen(str), MPI_CHAR,&request); a=a+strlen(str); sprintf(str,"<!DOCTYPE Xdmf SYSTEM \"Xdmf.dtd\" []> \n"); MPI_File_iwrite(fp,str,strlen(str), MPI_CHAR,&request); a=a+strlen(str); sprintf(str,"<Xdmf Version=\"2.0\">\n"); MPI_File_iwrite(fp,str,strlen(str), MPI_CHAR,&request); a=a+strlen(str); }
if(我的排名==0) { char-str[142]; char-str2[142]; char-str3[142]; MPI_请求请求[3]; snprintf(str,142,“\n”); MPI_文件iwrite(fp、str、strlen(str)、MPI_字符和请求[0]); a=a+strlen(str); snprintf(STR2142,“\n”); MPI_文件iwrite(fp、str2、strlen(str2)、MPI_字符和请求[1]); a=a+strlen(str2); snprintf(STR3142,“\n”); MPI_文件iwrite(fp、str3、strlen(str3)、MPI_字符和请求[2]); a=a+strlen(str3); MPI_Waitall(3,请求,MPI_状态\u忽略); }
- 如果行的顺序无关紧要,则以下代码可能会起作用:
答案1已完成,问题已解决,
if(my_rank==0)
{
char str[142];
char str2[142];
char str3[142];
MPI_Request requests[3];
snprintf(str,142,"<?xml version=\"1.0\" ?>\n");
MPI_File_iwrite(fp,str,strlen(str), MPI_CHAR,&request[0]);
a=a+strlen(str);
snprintf(str2,142,"<!DOCTYPE Xdmf SYSTEM \"Xdmf.dtd\" []> \n");
MPI_File_iwrite(fp,str2,strlen(str2), MPI_CHAR,&request[1]);
a=a+strlen(str2);
snprintf(str3,142,"<Xdmf Version=\"2.0\">\n");
MPI_File_iwrite(fp,str3,strlen(str3), MPI_CHAR,&request[2]);
a=a+strlen(str3);
MPI_Waitall(3,requests,MPI_STATUSES_IGNORE);
}