From 1467c48039cbf6b83dcb88c572f18dbb78ad41c1 Mon Sep 17 00:00:00 2001 From: github-actions Date: Sat, 10 Aug 2024 13:24:15 +0000 Subject: [PATCH] Automatic update from GitHub Actions workflow --- issue4134.html | 303 ++++++++++++++++++++++++++++++++++++ lwg-active.html | 250 ++++++++++++++++++++++++++++- lwg-closed.html | 12 +- lwg-defects.html | 12 +- lwg-immediate.html | 2 +- lwg-index-open.html | 13 +- lwg-index.html | 13 +- lwg-ready.html | 2 +- lwg-status-date.html | 13 +- lwg-status.html | 13 +- lwg-tentative.html | 2 +- lwg-toc.html | 11 +- lwg-unresolved.html | 240 +++++++++++++++++++++++++++- unresolved-index.html | 13 +- unresolved-prioritized.html | 269 ++++++++++++++++---------------- unresolved-status-date.html | 13 +- unresolved-status.html | 13 +- unresolved-toc.html | 11 +- votable-index.html | 2 +- votable-status-date.html | 2 +- votable-status.html | 2 +- votable-toc.html | 2 +- 22 files changed, 1041 insertions(+), 172 deletions(-) create mode 100644 issue4134.html diff --git a/issue4134.html b/issue4134.html new file mode 100644 index 0000000000..617b8db03b --- /dev/null +++ b/issue4134.html @@ -0,0 +1,303 @@ + + + + +Issue 4134: Issue with Philox algorithm specification + + + + + + + + + +
+

This page is a snapshot from the LWG issues list, see the Library Active Issues List for more information and the meaning of New status.

+

4134. Issue with Philox algorithm specification

+

Section: 28.5.4.5 [rand.eng.philox] Status: New + Submitter: Ilya A. Burylov Opened: 2024-08-06 Last modified: 2024-08-10

+

Priority: Not Prioritized +

+

View all issues with New status.

+

Discussion:

+

+The P2075R6 proposal introduced the Philox engine and described the algorithm closely +following the original paper +(further Random123sc11). +

+Matt Stephanson implemented P2075R6 and the 10000'th number did not match. Further investigation revealed +several places in Random123sc11 algorithm description, which either deviate from the reference implementation +written by Random123sc11 authors or loosely defined, which opens the way for different interpretations. +

+All major implementations of the Philox algorithm (NumPy, Intel MKL, Nvidia cuRAND, etc.) match the +reference implementation written by Random123sc11 authors and we propose to align wording with that. +

+The rationale of proposed changes: +

+
    +
  1. Random123sc11 refers to the permutation step as "the inputs are permuted using the Threefish +N-word P-box", thus the P2075R6 permutation table ([tab:rand.eng.philox.f]) is taken from +Threefish algorithm. But the permutation for N=4 in this table does not match the reference +implementations. It's worth noting that while Random123sc11 described the Philox algorithm for N=8 +and N=16, there are no known reference implementations of it either provided by authors or +implemented by other libraries. We proposed to drop N=8 and N=16 for now and update +the permutation indices for N=4 to match the reference implementation. Note: the proposed resolution +allows extending N > 4 cases in the future.

  2. +
  3. The original paper describes the S-box update for X values in terms of L' and +R' but does not clarify their ordering as part of the counter. In order to match Random123sc11 +reference implementation the ordering should be swapped.

  4. +
  5. Philox alias templates should be updated, because the current ordering of constants matches the +specific optimization in the reference Random123sc11 implementation and not the generic algorithm +description.

  6. +
+

+All proposed modifications below are confirmed by: +

+ + + +

Proposed resolution:

+

+This wording is relative to N4988. +

+ +
    +
  1. Modify 28.5.4.5 [rand.eng.philox], [tab:rand.eng.philox.f] as indicated (This effectively reduces +16 data columns to 4 data columns and 4 data rows to 2 data rows):

    + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Table 101 — Values for the word permutation fn(j) [tab:rand.eng.philox.f]
    fn(j)j
    0123456789101112131415
    n
    201
    420130231
    821476503
    160921361141510712314581
    + +
    +
  2. + +
  3. Modify 28.5.4.5 [rand.eng.philox] as indicated:

    + +
    +

    +-4- […] +

    +
      +
    1. (4.1) — […]

    2. +
    3. (4.2) — The following computations are applied to the elements of the V sequence:

      +
      +

      +X2k+0 = mulhimullo(V2k+1,Mk,w) +xor keyqk xor V2k+1 +

      +X2k+1 = mullomulhi(V2k+1,Mk,w) + xor keyqk xor V2k +

      +
      +
    4. +
    +

    +-5- […] +

    +-6- Mandates: +

    +
      +
    1. (6.1) — […]

    2. +
    3. (6.2) — n == 2 || n == 4 || n == 8 || n == 16 is true, and

    4. +
    5. (6.3) — […]

    6. +
    7. (6.4) — […]

    8. +
    + +
    +
  4. + +
  5. Modify 28.5.6 [rand.predef] as indicated:

    + +
    +
    +using philox4x32 =
    +      philox_engine<uint_fast32_t, 32, 4, 10,
    +       0xCD9E8D570xD2511F53, 0x9E3779B9, 0xD2511F530xCD9E8D57, 0xBB67AE85>;
    +
    +
    +

    +-11- Required behavior: The 10000th consecutive invocation a default-constructed +object of type philox4x32 produces the value 1955073260. +

    +
    +
    +using philox4x64 =
    +      philox_engine<uint_fast64_t, 64, 4, 10,
    +       0xCA5A8263951211570xD2E7470EE14C6C93, 0x9E3779B97F4A7C15, 0xD2E7470EE14C6C930xCA5A826395121157, 0xBB67AE8584CAA73B>;
    +
    +
    +

    +-12- Required behavior: The 10000th consecutive invocation a default-constructed +object of type philox4x64 produces the value 3409172418970261260. +

    +
    +
    +
  6. + +
+ + + + + + + diff --git a/lwg-active.html b/lwg-active.html index cf9bc35bff..e14fb12d53 100644 --- a/lwg-active.html +++ b/lwg-active.html @@ -67,7 +67,7 @@ Date: - 2024-08-06 + 2024-08-10 Project: @@ -79,7 +79,7 @@

C++ Standard Library Active Issues List (Revision D125)

-

Revised 2024-08-06 at 17:42:00 UTC +

Revised 2024-08-10 at 13:24:08 UTC

Reference ISO/IEC IS 14882:2020(E)

Also see:

@@ -199,22 +199,22 @@

Revision History