Skip to content

Conversation

@kmorel
Copy link
Contributor

@kmorel kmorel commented Jan 5, 2026

Previously, the mgard_x::Metadata structure had inline code that used protobuf to serialize its values into a buffer. This was problematic because the latest version of protobuf does not compile with nvcc. The issue is a feature of C++17 does not support (and it is unclear if it will ever be supported).

Get around this problem by moving (the majority of) the serialization code into the MGARD library and compile it with the host compiler. To make this work, the code now has to serialize into a host buffer and then copy into a device buffer. However, the previous implementation simply copied things one at a time into the device buffer, so this should be no less performant.

Fixes: #252

@kmorel kmorel force-pushed the encapsulate-metadata-serialize branch from 122dc94 to 0638c8b Compare January 5, 2026 21:39
Previously, the `mgard_x::Metadata` structure had inline code that used
protobuf to serialize its values into a buffer. This was problematic
because the latest version of protobuf does not compile with nvcc.
The issue is a feature of C++17 does not support (and it is unclear if
it will ever be supported).

Get around this problem by moving (the majority of) the serialization
code into the MGARD library and compile it with the host compiler. To
make this work, the code now has to serialize into a host buffer and
then copy into a device buffer. However, the previous implementation
simply copied things one at a time into the device buffer, so this
should be no less performant.
@kmorel kmorel force-pushed the encapsulate-metadata-serialize branch from 0638c8b to 8d13307 Compare January 5, 2026 21:40
@kmorel
Copy link
Contributor Author

kmorel commented Jan 5, 2026

@JieyangChen7 Could you review and (hopefully) merge this change? This is necessary for using recent version of protobuf, which cannot be compiled with nvcc. It basically moves all protobuf references out of Metadata.hpp.

@kmorel
Copy link
Contributor Author

kmorel commented Jan 6, 2026

@JieyangChen7 Also, this PR fixes issues with the Spack package that we ran into when updating it for the latest release. See spack/spack-packages#2930. The Spack package now pulls the diff from this PR, and in doing so passes all of its tests. (I've set the patch to stop at the next MGARD release in anticipation of this PR being merged by then.)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Protobuf incompatible with nvcc

1 participant