-
Notifications
You must be signed in to change notification settings - Fork 901
error with MPI_Unpack_external ("external32",...) and derived datatype #7851
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Comments
This probably isn't a complete fix, but I started looking at a bug closely related to the above and found quite a few issues in pack/unpack that I've addressed here: I'll add that the bug I was looking at was using MPIO with external32, but so far I've only looked closely into the bad output from MPI_Pack/Unpack, and hope to eventually get back to the failing MPIO testcase which I believe has some additional bugs beyond the Pack/Unpack issues. Anyway I have an MPI standard question for the pasted testcase. Is it legal to put the MPI_UINT64_T at byte offset 6 like that? The standard's definition of "extent" talks about how it rounds up based on alignment requirements, and the extent from that first MPI_Type_create_struct is 16 because of that. Then the Type_create_resized is explicitly bumping it down to 14. In my MPIO testcase that's related to the above, the ROMIO and OMPIO output diverges with OMPIO respecting the 14 byte extent but ROMIO instead writing consecutive instances of that datatype 16 bytes apart. The cause is ROMIO's set_view call that does MPI_Type_contiguous(1, filetype, ©_filetype) which takes alignment into account and puts the extent back to 16. I'd like to just declare that the misaligned MPI datatype constructed there is illegal and thus the ROMIO code isn't really wrong. Thoughts? Anyway the Pack/Unpack issues remain even if you change 6 to 8 in the above testcase, so some fixes like I have in 7919 are still needed. |
Fwiw I finally tested the above testcase with |
My #7919 is still awaiting review which I guess is understandable because it's pretty big. But I did finish up the other part of this as well, where if you use the above dt_stat with romio it sends dt_stat into a That fix is merged in now, so between that and 7919 I think this datatype is working now, both in the above testcase and if you use it in MPI/IO calls too (romio or ompio). |
Based on the replicator here I made a simpler one that only looks at the conversion itself. I run this test with the master today (without the #7919), as far as I can see the data representation for uint64_t is correctly converted to the external32 format. I'm not saying this works with files, that's another topic, but the pack/unpack to and from external32 seems to work. |
This is a followup of #5643
The reproducer below can be used to evidence this issue.
The issue occurs on
master
and thev4
release branches.It does not occur on the
v3
branches nor the4.0.0
release.fwiw,
git bisect
(on thev4.0.x
branch )points to 4f754d0@bosilca can you please have a look at it?
The text was updated successfully, but these errors were encountered: