diff options
| author | silvanshade <[email protected]> | 2025-02-08 05:28:20 -0700 |
|---|---|---|
| committer | Jack O'Connor <[email protected]> | 2025-03-09 16:00:11 -0700 |
| commit | d9b49df0757f8bdfaa542e7181013fbf1555ff89 (patch) | |
| tree | b0b3323bd07e22d39fb032e53b019386be9fb640 /c/blake3_tbb.cpp | |
| parent | a31e519869d5751370f50c39a99340660ee95bf7 (diff) | |
Implement TBB-based parallelism for C lib
Diffstat (limited to 'c/blake3_tbb.cpp')
| -rw-r--r-- | c/blake3_tbb.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/c/blake3_tbb.cpp b/c/blake3_tbb.cpp new file mode 100644 index 0000000..c2bc2db --- /dev/null +++ b/c/blake3_tbb.cpp @@ -0,0 +1,37 @@ +#include <cstddef> +#include <cstdint> + +#include <oneapi/tbb/parallel_invoke.h> + +#include "blake3_impl.h" + +static_assert(TBB_USE_EXCEPTIONS == 0, + "This file should be compiled with C++ exceptions disabled."); + +extern "C" void blake3_compress_subtree_wide_join_tbb( + // shared params + const uint32_t key[8], uint8_t flags, bool use_tbb, + // left-hand side params + const uint8_t *l_input, size_t l_input_len, uint64_t l_chunk_counter, + uint8_t *l_cvs, size_t *l_n, + // right-hand side params + const uint8_t *r_input, size_t r_input_len, uint64_t r_chunk_counter, + uint8_t *r_cvs, size_t *r_n) noexcept { + if (!use_tbb) { + *l_n = blake3_compress_subtree_wide(l_input, l_input_len, key, + l_chunk_counter, flags, l_cvs, use_tbb); + *r_n = blake3_compress_subtree_wide(r_input, r_input_len, key, + r_chunk_counter, flags, r_cvs, use_tbb); + return; + } + + oneapi::tbb::parallel_invoke( + [=]() { + *l_n = blake3_compress_subtree_wide( + l_input, l_input_len, key, l_chunk_counter, flags, l_cvs, use_tbb); + }, + [=]() { + *r_n = blake3_compress_subtree_wide( + r_input, r_input_len, key, r_chunk_counter, flags, r_cvs, use_tbb); + }); +} |
