You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
*Release date: September 12, 2024. Release manager: Riley Murray.*
16
+
17
+
Today marks RandBLAS' second-ever release, its first *stable* release,
18
+
and its first release featuring the contributions of someone who showed
19
+
up entirely out of the blue (shoutout to Rylie Weaver)!
20
+
21
+
Overview of changes
22
+
~~~~~~~~~~~~~~~~~~~
23
+
24
+
**New features for core functionality**
25
+
26
+
The semantics of :cpp:any:`RandBLAS::SparseDist::major_axis` have changed in RandBLAS 1.0.
27
+
As a result of this change, SparseSkOps can represent
28
+
LESS-Uniform operators and operators for plain row or column sampling with replacement.
29
+
(This is in addition to hashing-style operators like CountSketch, which we've supported since version 0.2.)
30
+
31
+
We have four new functions for sampling from index sets.
32
+
33
+
* :cpp:any:`RandBLAS::weights_to_cdf`
34
+
* :cpp:any:`RandBLAS::sample_indices_iid`
35
+
* :cpp:any:`RandBLAS::sample_indices_iid_uniform`
36
+
* :cpp:any:`RandBLAS::repeated_fisher_yates`
37
+
38
+
We have two new functions for getting low-level data for a sketching operator's explicit representation:
39
+
:cpp:any:`RandBLAS::fill_dense_unpacked` and :cpp:any:`RandBLAS::fill_sparse_unpacked_nosub`.
40
+
These are useful if you want to incorporate RandBLAS' sketching functionality into other frameworks,
41
+
like Kokkos, cuBLAS, or MKL.
42
+
43
+
Finally, there's :cpp:any:`RandBLAS::sketch_symmetric`, overloaded for sketching from the left or right.
44
+
45
+
**Quality-of-life improvements**
46
+
47
+
* We've significantly expanded the tutorial part of our web docs. It now has details on updating sketches and
48
+
some advice on choosing parameters for sketching distributions.
49
+
* :cpp:any:`RandBLAS::Error` is now in the public API.
50
+
* :cpp:any:`RandBLAS::print_buff_to_stream` is for writing MATLAB-style or NumPy-style string representations of matrices to a provided stream, like std::cout.
51
+
* We settled on a unified memory-management / memory-ownership policy. There's no difference between DenseSkOp, SparseSkOp, or any of the sparse matrix types. The abstract policy is described in our web documentation. The consequences of the policy for each of the aforementioned types is documented in source code and on our website.
52
+
* We added a few utility functions for working with dense matrices: symmetrize, overwrite_triangle, and transpose_square.
53
+
54
+
**Significantly revised APIs for sketching distributions and operators**
55
+
56
+
* Added new :cpp:any:`RandBLAS::SketchingDistribution` and :cpp:any:`RandBLAS::SketchingOperator` C++20 concepts.
57
+
* API revisions to DenseDist/DenseSkOp and SparseDist/SparseSkOp were mostly about taking quantities which we would compute from an object's const members with free-functions,
58
+
and instead making those quantities const members themselves. Good examples of this are :cpp:any:`RandBLAS::DenseDist::isometry_scale`
59
+
and :cpp:any:`RandBLAS::SparseDist::isometry_scale`, whose meanings are explained in the SketchingDistribution docs.
60
+
* :cpp:any:`RandBLAS::DenseSkOp::next_state` and :cpp:any:`RandBLAS::SparseSkOp::next_state` are computed at construction time,
61
+
without actually performing any random sampling. This means that one can define a sequence of independent sketching without
62
+
changing an RNGState's "key" and without realizing any of them explicitly.
63
+
64
+
**New statistical tests**
65
+
66
+
* Kolmogorov–Smirnov tests for distributional correctness of sample_indices_iid, sample_indices_iid_uniform, repeated_fisher_yates, and the scalar distributions that can be used with DenseSkOp (standard-normal and uniform over [-1,1]).
67
+
* Tests for subspace embedding properties of DenseSkOp. A forthcoming paper will describe how these tests cover a wide range of relevant parameter values at very mild computational cost.
68
+
* We've incorporated select tests from Random123 into our testing framework.
69
+
70
+
71
+
Contributors
72
+
~~~~~~~~~~~~
73
+
74
+
I'd like to start by acknowledging the contributions of `Parth Nobel <https://ptnobel.github.io/>`_ to RandBLAS' development.
75
+
Parth and I have worked on-and-off on several projects involving RandNLA algorithms.
76
+
None of these projects has been published yet, but they've had a significant role in uncovering
77
+
bugs and setting development priorities for RandBLAS. (As a recent example in the latter category,
78
+
I probably wouldn't have added the "sample_indices_iid" function were it not for its relevance to
79
+
one of our projects.) This led me to be quite surprised when I noticed that Parth technically hasn't
80
+
made a commit to the RandBLAS repository! Let this statement set the record straight: Parth has
81
+
made very real contributions to RandBLAS, even if the commit history doesn't currently reflect that.
82
+
83
+
Rylie Weaver, the aforementioned out-of-the-blue contributor, helped write our Kolmogorov–Smirnov tests for repeated Fisher–Yates.
84
+
85
+
I wrote a lot of code (as one might imagine).
86
+
87
+
Funding acknowledgements
88
+
~~~~~~~~~~~~~~~~~~~~~~~~
89
+
90
+
This work was wholly supported by LDRD funding from Sandia National Laboratories.
91
+
92
+
Sandia National Laboratories is a multi-mission laboratory managed and operated by
93
+
National Technology and Engineering Solutions of Sandia, LLC., a wholly owned subsidiary
94
+
of Honeywell International, Inc., for the U.S. Department of Energy’s National Nuclear
95
+
Security Administration under contract DE-NA-0003525.
0 commit comments