Repository navigation
UCP: Split an SGL put between the lanes by bytes - #11947
Conversation
|
🤖 Starting review — findings will be posted here when done. |
f457961 to
2c9bd49
Compare
|
🤖 Starting review — findings will be posted here when done. |
|
🤖 CI Triage Agent — TL;DR: The aarch64 build failed to compile Full analysisSummary: Root cause: Signature/call-site mismatch introduced by this PR's series. but the gtest still calls it with only 6 arguments ( Implicated commit: File: Suggested fix: Pass the total byte length in the test's size_t total_length = std::accumulate(m_lengths.begin(), m_lengths.end(),
size_t(0));
ASSERT_UCS_OK(ucp_datatype_iter_sgl_init(m_ucph.get(), &m_dt_iter,
&m_local, &m_remote, count,
total_length, ¶m));(include Related: PR #11947 (this PR); earlier SGL work: #11344, #11761, #11647, #11888
|
|
🤖 Starting review — findings will be posted here when done. |
|
Residual coverage gap: no test exercises an SGL with zero-length elements, where Residual coverage gap: the new |
|
🤖 Starting review — findings will be posted here when done. |
3891fa7 to
70240ca
Compare
|
🤖 Starting review — findings will be posted here when done. |
|
Residual coverage gap: no test uses an SGL whose elements are all zero-length, where Residual coverage gap: |
|
🤖 Starting review — findings will be posted here when done. |
|
Residual coverage gap: the removed lines in Residual coverage gap: |
|
🤖 Starting review — findings will be posted here when done. |
|
🤖 CI Triage Agent — TL;DR: The "gpu prebuild" job died because Full analysisSummary: Step "Build for tests" of job Root cause: The build and install phases completed cleanly ( Neither Implicated commit: 390a30e — Alexey Rivkin, "AZP/TESTS: Build once per GPU test row and share the tree with the workers (#11896)" (environment/image gap exposed by it; PR #11947 commit ffb0b72 is unrelated) File: contrib/test_jenkins.sh:670 ( Suggested fix:
Related: #11896 (introduced the gpu prebuild job); PR under test: #11947 |
# Conflicts: # test/gtest/ucp/test_ucp_rma.cc
|
🤖 Starting review — findings will be posted here when done. |
|
🤖 CI Triage Agent — TL;DR: The Coverity gate failed with 2 new Full analysisSummary: Root cause: The defect is new to this branch: the alloc/free pair was introduced when the key arrays were made dynamically sized. The sibling function Implicated commit: File: Suggested fix: Pick one:
/* coverity[incorrect_free] */
ucs_free_on_stack(uct_memhs, uct_memhs_size);
/* coverity[incorrect_free] */
ucs_free_on_stack(uct_rkeys, uct_rkeys_size);Note the error-path free at line 538 will likely be flagged too once this path becomes reachable in a future analysis, so annotate it as well.
size_t max_elem_count = ucs_min(ucs_min(lpriv->max_sgl_zcopy_count, UCP_MAX_IOV),
dt_iter->length - start_index);
...
uct_mem_h uct_memhs[UCP_MAX_IOV];
uct_rkey_t uct_rkeys[UCP_MAX_IOV];This makes the function consistent with
Related: PR #11947 (this change); macro introduced by commit
|
|
🤖 Starting review — findings will be posted here when done. |
|
Residual coverage gap (unchanged from earlier rounds): no e2e |
What?
Split one SGL between the lanes by bytes instead of by element count, so every lane gets an equal share of the message, splitting elements where a share ends.
Why?
Elements were distributed by count, so a single element used one lane only and lost ~50% of the WRITE bandwidth, and any element count which is not a multiple of the lane count left the lanes unevenly loaded.
How?
The request keeps the total byte length of the SGL, and every lane derives its share from it like a multi-lane contiguous message, in
ucp_proto_put_sgl_max_payload(). A batch of fragments is limited by its total length, so one post covers the whole lane payload.