Boost.Compute broken in 1.86.0 because of UUID changes, 1.86.1?

Because Boost.Compute (boost/compute/detail/sha1.hpp) uses an
implementation detail of Boost.UUID (boost/uuid/detail/sha1.hpp),
and because I changed the implementation to fix an endianness
issue,

On 8/22/24 10:47, Peter Dimov via Boost wrote:
If we're going to do a point release, it would be nice if it also fixed broken links to BoostBook documentation on the website: https://github.com/boostorg/boostbook/issues/29 For this, the latest tools/boostbook needs to be included in the release, as well as these pull requests merged: https://github.com/boostorg/boost/pull/938 https://github.com/boostorg/website/pull/872

Boris Kolpackov wrote:
It would have, but no such translation unit was compiled by anyone before the release went out. There's no CI that runs the entire Boost test suite (that would take many hours) but even if there were, Boost.Compute's tests require OpenCL and automatically disable themselves when it's not present. This is why, in principle, we do a beta release, to catch these issues before the real release, but it doesn't seem to be effective.

Peter Dimov
I've been thinking about this for some time now so maybe now is a good time to bring it up: as you may know, we've packaged most[1] of Boost libraries for build2 (as individual packages) and are building them continuously on our CI, which covers all the major platforms and compilers (there is currently a 100 distinct build configurations[2]). Currently, we package releases, usually waiting for some time for any bugs (like this one) to shake out. But we could do that during the Boost pre-release stage to help detect any regressions if the Boost community would find this helpful. Specifically, all the build results are stored in an SQL database and we can easily run queries like "compare all build results between these two versions of Boost and list discrepancies" or "compare, say, Clang 18 build results to Clang 19 and list discrepancies", where the discrepancy can be errors but also warnings[3]. So, concretely, before a release, we could produce a report that lists Boost libraries that used to build in a specific build configuration but which no longer do so (and which likely indicates a regression). Now, there are a couple of "catches": Firstly, we haven't yet ported each library's tests to build2. Instead, for each library we have a smoke test that includes all the public headers, and, for non-header-only libraries, also calls some non-inline functions (to make sure the built library is linkable). This should at least cover things like compilation errors and unresolved symbols. Secondly, updating our Boost packages to the next release takes some time, depending on the extent of changes (if there are new libraries, then we need to port them, etc). Likewise, it will take some time (days) to build everything on our CI. Currently, we have 7K builds per Boost version[4]. Putting theses two together, we will need at least a couple of weeks head start. Of course, ideally, one wouldn't want to wait until the release to detect such regressions, instead staging a snapshot of Boost throughout the development window. But that would require quite a bit more effort from our side and also consume quite a bit of our CI resources. But we could consider doing this if there is funding/help (we can do the before release check for free/ourselves). [1] The list of excluded libraries (and the rationale for excluding them) can be found here: https://github.com/build2-packaging/boost/blob/master/exclude Ironically, this list includes libboost-compute for the same reason: OpenCL dependency. But this can be addressed if desired by using a system-installed version of OpenCL (in build2 we have system package manager integration for Debian and Fedora- derived distributions). It will mean we only test libboost-compute in a small subset of build configurations, but it's better than nothing. [2] https://ci.cppget.org/?build-configs [3] We use a similar approach to test for regressions in build2 itself. That is, we rebuild all the packages in the repository with the staged version of build2 and compare the result to the released version. Currently this is done by crafting and running an SQL query but in the future we plan to add a web interface for diff'ing build results. [4] https://cppget.org/?builds=libboost-*&pv=1.83.0

вт, 27 авг. 2024 г. в 00:46, Alexander Grund via Boost
Some time ago I suggested that b2 supports compiling binaries but not running them. Not sure if this was implemented by now.
If you mean, disable running all or some tests, then there's
testing.execute feature. To disable running all tests (e.g. when
cross-compiling) you'd do
b2 testing.execute=off
To disable running a specific test in a specific situation you'd put
in a jamfile something like
run mytest.cpp : requirements <target-os>windows:

Am 27.08.24 um 04:14 schrieb Дмитрий Архипов via Boost:
I see so it IS a hard requirement. Maybe we could have an option (possibly even in B2) to have a "<build>no" alternative that errors when triggered. E.g. `b2 testing.execute=off require-compute=on` (or even `require-all`) This could then be used to do this build testing by release managers on a machine/VM/image that has all dependencies and avoid silently skipping some build tests if one is missing.

Hi all What about the following idea: We introduce a macro, something like "BOOST_COMPUTE_COMPILE_WITHOUT_OPENCL". In Boost.Compute we check for this macro, and when it is set we include a new stub headerfile instead of the regular OpenCL headerfile. The stub headerfile should contain all the necessary definitions so that Boost.Compute can be compiled, even when OpenCL is not actually installed. That would be step one and would make it possible to find at least non-compatible changes in the other Boost libraries. Step two would be to enhance the stub file so that the test programs also run without error. I can't say yet if this would even be possible, and how big the effort would be for that. Best regards René Am Di., 27. Aug. 2024 um 12:09 Uhr schrieb Alexander Grund via Boost < boost@lists.boost.org>:
-- “Dubito ergo cogito; cogito ergo sum. (I doubt, therefore I think; I think therefore I am)” René Descartes

Hi all
Best regards René
Could Intel's oneAPI compiler be used to provide OpenCL for free in GHA? Here's an example setup from Math: https://github.com/boostorg/math/blob/develop/.github/workflows/ci.yml#L549. Compute already has a CML so it should be quite easy to try and see if it works. Matt

On Thu, Aug 22, 2024 at 3:48 AM Peter Dimov wrote:
I'm leaning towards an official patch for 1.86 for Compute on https://www.boost.org/patches/ but I will discuss it with Marshall and Ion today. Glen
participants (10)
-
Alexander Grund
-
Andrey Semashev
-
Boris Kolpackov
-
Glen Fernandes
-
John Maddock
-
Matt Borland
-
Peter Dimov
-
René Eng
-
Ruben Perez
-
Дмитрий Архипов