casacore
Loading...
Searching...
No Matches
Sisco.h
Go to the documentation of this file.
1#ifndef SISCO_SISCO_H_
2#define SISCO_SISCO_H_
3
4#include <optional>
5#include <span>
6#include <vector>
7
8#include "BitFloat.h"
9
10namespace casacore::sisco {
11
13 std::vector<BitFloat> previous4;
14 std::vector<BitFloat> previous3;
15 std::vector<BitFloat> previous2;
16 std::vector<BitFloat> previous1;
17 std::vector<BitFloat> scratch;
18};
19
20constexpr size_t kCompressedMantissaSize = sizeof(uint32_t);
21constexpr size_t kCompressedExponentSize = sizeof(int8_t);
22
23void DifferenceCompress1D(std::span<const BitFloat> input,
24 std::span<std::byte> mantissa_data,
25 std::span<std::byte> exponent_data);
26
27void Average2Compress1D(std::span<const BitFloat> input,
28 std::span<std::byte> mantissa_data,
29 std::span<std::byte> exponent_data);
30
31void LinearCompress1D(std::span<const BitFloat> input,
32 std::span<std::byte> mantissa_data,
33 std::span<std::byte> exponent_data);
34
35void Linear3Compress1D(std::span<const BitFloat> input,
36 std::span<std::byte> mantissa_data,
37 std::span<std::byte> exponent_data);
38
39void QuadraticCompress1D(std::span<const BitFloat> input,
40 std::span<std::byte> mantissa_data,
41 std::span<std::byte> exponent_data);
42
43void Quadratic4Compress1D(std::span<const BitFloat> input,
44 std::span<std::byte> mantissa_data,
45 std::span<std::byte> exponent_data);
46
47void CubicCompress1D(std::span<const BitFloat> input,
48 std::span<std::byte> mantissa_data,
49 std::span<std::byte> exponent_data);
50
51void DifferenceDecompress1D(std::span<const std::byte> mantissa_data,
52 std::span<const std::byte> exponent_data,
53 std::span<BitFloat> output);
54
55void Average2Decompress1D(std::span<const std::byte> mantissa_data,
56 std::span<const std::byte> exponent_data,
57 std::span<BitFloat> output);
58
59void LinearDecompress1D(std::span<const std::byte> mantissa_data,
60 std::span<const std::byte> exponent_data,
61 std::span<BitFloat> output);
62
63void Linear3Decompress1D(std::span<const std::byte> mantissa_data,
64 std::span<const std::byte> exponent_data,
65 std::span<BitFloat> output);
66
67void QuadraticDecompress1D(std::span<const std::byte> mantissa_data,
68 std::span<const std::byte> exponent_data,
69 std::span<BitFloat> output);
70
71void Quadratic4Decompress1D(std::span<const std::byte> mantissa_data,
72 std::span<const std::byte> exponent_data,
73 std::span<BitFloat> output);
74
75void CubicDecompress1D(std::span<const std::byte> mantissa_data,
76 std::span<const std::byte> exponent_data,
77 std::span<BitFloat> output);
78
79void DirectCompress2D(std::span<const float> row,
80 std::span<std::byte> mantissa_data,
81 std::span<std::byte> exponent_data);
82
83void DifferenceCompress2D(CompressorState& state, std::span<const float> row,
84 std::span<std::byte> mantissa_data,
85 std::span<std::byte> exponent_data);
86
87void Average2Compress2D(CompressorState& state, std::span<const float> row,
88 std::span<std::byte> mantissa_data,
89 std::span<std::byte> exponent_data);
90
91void LinearCompress2D(CompressorState& state, std::span<const float> row,
92 std::span<std::byte> mantissa_data,
93 std::span<std::byte> exponent_data);
94
96 std::span<const float> row,
97 std::span<std::byte> mantissa_data,
98 std::span<std::byte> exponent_data);
99
100void Linear3Compress2D(CompressorState& state, std::span<const float> row,
101 std::span<std::byte> mantissa_data,
102 std::span<std::byte> exponent_data);
103
104void QuadraticCompress2D(CompressorState& state, std::span<const float> row,
105 std::span<std::byte> mantissa_data,
106 std::span<std::byte> exponent_data);
107
108void Quadratic4Compress2D(CompressorState& state, std::span<const float> row,
109 std::span<std::byte> mantissa_data,
110 std::span<std::byte> exponent_data);
111
112void CubicCompress2D(CompressorState& state, std::span<const float> row,
113 std::span<std::byte> mantissa_data,
114 std::span<std::byte> exponent_data);
115
116void DirectDecompress2D(std::span<std::byte> mantissa_data,
117 std::span<std::byte> exponent_data,
118 std::span<float> row);
119
121 std::span<std::byte> mantissa_data,
122 std::span<std::byte> exponent_data,
123 std::span<float> row);
124
126 std::span<std::byte> mantissa_data,
127 std::span<std::byte> exponent_data,
128 std::span<float> row);
129
131 std::span<std::byte> mantissa_data,
132 std::span<std::byte> exponent_data,
133 std::span<float> row);
134
136 std::span<std::byte> mantissa_data,
137 std::span<std::byte> exponent_data,
138 std::span<float> row);
139
141 std::span<std::byte> mantissa_data,
142 std::span<std::byte> exponent_data,
143 std::span<float> row);
144
146 std::span<std::byte> mantissa_data,
147 std::span<std::byte> exponent_data,
148 std::span<float> row);
149
151 std::span<std::byte> mantissa_data,
152 std::span<std::byte> exponent_data,
153 std::span<float> row);
154
156 std::span<std::byte> mantissa_data,
157 std::span<std::byte> exponent_data,
158 std::span<float> row);
159
161
162inline void Compress1D(int level, std::span<const BitFloat> row,
163 std::span<std::byte> mantissa_data,
164 std::span<std::byte> exponent_data) {
165 switch (level) {
166 case 0:
167 DifferenceCompress1D(row, mantissa_data, exponent_data);
168 return;
169 case 1:
170 LinearCompress1D(row, mantissa_data, exponent_data);
171 return;
172 case 2:
173 QuadraticCompress1D(row, mantissa_data, exponent_data);
174 return;
175 case 3:
176 CubicCompress1D(row, mantissa_data, exponent_data);
177 return;
178 case 10:
179 Average2Compress1D(row, mantissa_data, exponent_data);
180 return;
181 case 11:
182 Linear3Compress1D(row, mantissa_data, exponent_data);
183 return;
184 case 12:
185 Quadratic4Compress1D(row, mantissa_data, exponent_data);
186 return;
187 }
188 throw std::runtime_error("Invalid compression level");
189}
190
191inline void Decompress1D(int level, std::span<std::byte> mantissa_data,
192 std::span<std::byte> exponent_data,
193 std::span<BitFloat> row) {
194 switch (level) {
195 case 0:
196 DifferenceDecompress1D(mantissa_data, exponent_data, row);
197 return;
198 case 1:
199 LinearDecompress1D(mantissa_data, exponent_data, row);
200 return;
201 case 2:
202 QuadraticDecompress1D(mantissa_data, exponent_data, row);
203 return;
204 case 3:
205 CubicDecompress1D(mantissa_data, exponent_data, row);
206 return;
207 case 10:
208 Average2Decompress1D(mantissa_data, exponent_data, row);
209 return;
210 case 11:
211 Linear3Decompress1D(mantissa_data, exponent_data, row);
212 return;
213 case 12:
214 Quadratic4Decompress1D(mantissa_data, exponent_data, row);
215 return;
216 }
217 throw std::runtime_error("Invalid compression level");
218}
219
220inline void Compress2D(int level, CompressorState& state,
221 std::span<const float> row,
222 std::span<std::byte> mantissa_data,
223 std::span<std::byte> exponent_data) {
224 switch (level) {
225 case -1:
226 DirectCompress2D(row, mantissa_data, exponent_data);
227 return;
228 case 0:
229 DifferenceCompress2D(state, row, mantissa_data, exponent_data);
230 return;
231 case 1:
232 LinearCompress2D(state, row, mantissa_data, exponent_data);
233 return;
234 case 2:
235 QuadraticCompress2D(state, row, mantissa_data, exponent_data);
236 return;
237 case 3:
238 CubicCompress2D(state, row, mantissa_data, exponent_data);
239 return;
240 case 10:
241 Average2Compress2D(state, row, mantissa_data, exponent_data);
242 return;
243 case 11:
244 Linear3Compress2D(state, row, mantissa_data, exponent_data);
245 return;
246 case 12:
247 Quadratic4Compress2D(state, row, mantissa_data, exponent_data);
248 return;
249 case 21:
250 LinearQuadraticCompress2D(state, row, mantissa_data, exponent_data);
251 return;
252 }
253 throw std::runtime_error("Invalid compression level");
254}
255
256inline void Decompress2D(int level, CompressorState& state,
257 std::span<std::byte> mantissa_data,
258 std::span<std::byte> exponent_data,
259 std::span<float> row) {
260 switch (level) {
261 case -1:
262 DirectDecompress2D(mantissa_data, exponent_data, row);
263 return;
264 case 0:
265 DifferenceDecompress2D(state, mantissa_data, exponent_data, row);
266 return;
267 case 1:
268 LinearDecompress2D(state, mantissa_data, exponent_data, row);
269 return;
270 case 2:
271 QuadraticDecompress2D(state, mantissa_data, exponent_data, row);
272 return;
273 case 3:
274 CubicDecompress2D(state, mantissa_data, exponent_data, row);
275 return;
276 case 10:
277 Average2Decompress2D(state, mantissa_data, exponent_data, row);
278 return;
279 case 11:
280 Linear3Decompress2D(state, mantissa_data, exponent_data, row);
281 return;
282 case 12:
283 Quadratic4Decompress2D(state, mantissa_data, exponent_data, row);
284 return;
285 case 21:
286 LinearQuadraticDecompress2D(state, mantissa_data, exponent_data, row);
287 return;
288 }
289 throw std::runtime_error("Invalid compression level");
290}
291
298inline constexpr BitFloat PredictThreshold(const BitFloat& value) {
299 if (value.Mantissa() & 0xFE000000)
300 return BitFloat(0, value.Exponent(), false);
301 else
302 return value;
303}
304
305inline constexpr BitFloat Predict(const BitFloat& previous,
306 int8_t value_exponent) {
307 if (!previous.AllowsMath()) {
308 return BitFloat(0, value_exponent, false);
309 } else if (previous.Exponent() == value_exponent) {
310 return previous;
311 } else if (previous.Exponent() > value_exponent) {
312 // Shift predicted mantissa left to have same exponent
313 const uint8_t shift = previous.Exponent() - value_exponent;
314 if (shift > 1)
315 return BitFloat(0, value_exponent, false);
316 else {
317 const BitFloat result(previous.Mantissa() << shift, value_exponent,
318 previous.Sign());
319 return PredictThreshold(result);
320 }
321 } else {
322 // Shift predicted mantissa right to have same exponent
323 const uint8_t shift = value_exponent - previous.Exponent();
324 if (shift > 24)
325 return BitFloat(0, value_exponent, false);
326 else
327 return BitFloat(previous.Mantissa() >> shift, value_exponent,
328 previous.Sign());
329 }
330}
331
332inline constexpr BitFloat Residual(const BitFloat& previous,
333 const BitFloat& value) {
334 const BitFloat predict = Predict(previous, value.Exponent());
335 BitFloat residual = value;
336 residual -= predict;
337 return residual;
338}
339
340inline constexpr BitFloat Predict(const BitFloat& previous2,
341 const BitFloat& previous1,
342 int8_t value_exponent) {
343 if (!previous1.AllowsMath()) {
344 return Predict(previous2, value_exponent);
345 } else if (!previous2.AllowsMath()) {
346 return Predict(previous1, value_exponent);
347 } else if (!BitFloat::AllowsMath(value_exponent)) {
348 return BitFloat(0, value_exponent, false);
349 } else {
350 const std::optional<BitFloat> matched_p2 = Match(previous2, value_exponent);
351 if (!matched_p2) return BitFloat(0, value_exponent, false);
352 std::optional<BitFloat> result = Match(previous1, value_exponent);
353 if (!result) return BitFloat(0, value_exponent, false);
354 (*result) *= 2;
355 (*result) -= *matched_p2;
356 return PredictThreshold(*result);
357 }
358}
359
360inline constexpr BitFloat Residual(const BitFloat& previous2,
361 const BitFloat& previous1,
362 const BitFloat& value) {
363 const BitFloat predict = Predict(previous2, previous1, value.Exponent());
364 BitFloat residual = value;
365 residual -= predict;
366 return residual;
367}
368
369inline constexpr BitFloat AveragePredict(const BitFloat& previous2,
370 const BitFloat& previous1,
371 int8_t value_exponent) {
372 if (!previous1.AllowsMath()) {
373 return Predict(previous2, value_exponent);
374 } else if (!previous2.AllowsMath()) {
375 return Predict(previous1, value_exponent);
376 } else if (!BitFloat::AllowsMath(value_exponent)) {
377 return BitFloat(0, value_exponent, false);
378 } else {
379 const std::optional<BitFloat> matched_p2 = Match(previous2, value_exponent);
380 if (!matched_p2) return BitFloat(0, value_exponent, false);
381 std::optional<BitFloat> result = Match(previous1, value_exponent);
382 if (!result) return BitFloat(0, value_exponent, false);
383 (*result) += *matched_p2;
384 (*result) /= 2;
385 return PredictThreshold(*result);
386 }
387}
388
389inline constexpr BitFloat Predict(const BitFloat& previous3,
390 const BitFloat& previous2,
391 const BitFloat& previous1,
392 int8_t value_exponent) {
393 if (!previous1.AllowsMath()) {
394 return Predict(previous2, value_exponent);
395 } else if (!previous2.AllowsMath()) {
396 return Predict(previous1, value_exponent);
397 } else if (!previous3.AllowsMath()) {
398 return Predict(previous2, previous1, value_exponent);
399 } else if (!BitFloat::AllowsMath(value_exponent)) {
400 return BitFloat(0, value_exponent, false);
401 } else {
402 const std::optional<BitFloat> matched_p3 = Match(previous3, value_exponent);
403 if (!matched_p3) return Predict(previous2, previous1, value_exponent);
404 std::optional<BitFloat> matched_p2 = Match(previous2, value_exponent);
405 if (!matched_p2) return Predict(previous1, value_exponent);
406 std::optional<BitFloat> result = Match(previous1, value_exponent);
407 if (!result) return Predict(previous2, value_exponent);
408 // We have to calculate:
409 // p1 + dp12 + (dp12 - dp23)
410 // = p1 + (p1 - p2) + (p1 - p2) - (p2 - p3)
411 // = 3p1 - 3p2 + p3
412 (*result) *= 3;
413 (*matched_p2) *= 3;
414 (*result) -= *matched_p2;
415 (*result) += *matched_p3;
416 return PredictThreshold(*result);
417 }
418}
419
420inline constexpr BitFloat LinearPredict(const BitFloat& previous3,
421 const BitFloat& previous2,
422 const BitFloat& previous1,
423 int8_t value_exponent) {
424 if (!previous1.AllowsMath()) {
425 return Predict(previous2, value_exponent);
426 } else if (!previous2.AllowsMath()) {
427 return Predict(previous1, value_exponent);
428 } else if (!previous3.AllowsMath()) {
429 return Predict(previous2, previous1, value_exponent);
430 } else if (!BitFloat::AllowsMath(value_exponent)) {
431 return BitFloat(0, value_exponent, false);
432 } else {
433 std::optional<BitFloat> matched_p3 = Match(-previous3, value_exponent);
434 if (!matched_p3) return Predict(previous2, previous1, value_exponent);
435 const std::optional<BitFloat> matched_p2 = Match(previous2, value_exponent);
436 if (!matched_p2) return Predict(previous1, value_exponent);
437 std::optional<BitFloat> result = Match(previous1, value_exponent);
438 if (!result) return Predict(previous2, value_exponent);
439 // We have to calculate:
440 // ( -2 p3 + p2 + 4 p1 ) / 3
441 // Note that sign of p3 was already flipped
442 (*result) *= 4;
443 (*result) += *matched_p2;
444 (*matched_p3) *= 2;
445 (*result) += *matched_p3;
446 (*result) /= 3;
447 return PredictThreshold(*result);
448 }
449}
450
451inline constexpr BitFloat Predict(const BitFloat& previous4,
452 const BitFloat& previous3,
453 const BitFloat& previous2,
454 const BitFloat& previous1,
455 int8_t value_exponent) {
456 if (!previous1.AllowsMath()) {
457 return Predict(previous2, value_exponent);
458 } else if (!previous2.AllowsMath()) {
459 return Predict(previous1, value_exponent);
460 } else if (!previous3.AllowsMath()) {
461 return Predict(previous2, previous1, value_exponent);
462 } else if (!previous4.AllowsMath()) {
463 return Predict(previous3, previous2, previous1, value_exponent);
464 } else if (!BitFloat::AllowsMath(value_exponent)) {
465 return BitFloat(0, value_exponent, false);
466 } else {
467 const std::optional<BitFloat> matched_p4 = Match(previous4, value_exponent);
468 if (!matched_p4)
469 return Predict(previous3, previous2, previous1, value_exponent);
470 std::optional<BitFloat> matched_p3 = Match(previous3, value_exponent);
471 if (!matched_p3) return Predict(previous2, previous1, value_exponent);
472 std::optional<BitFloat> matched_p2 = Match(previous2, value_exponent);
473 if (!matched_p2) return Predict(previous1, value_exponent);
474 std::optional<BitFloat> result = Match(previous1, value_exponent);
475 if (!result) return Predict(previous2, value_exponent);
476 // We have to calculate:
477 // p_next = -p4 + 4p3 - 6p2 + 4p1
478 (*result) *= 4;
479 (*matched_p2) *= 6;
480 (*result) -= *matched_p2;
481 (*matched_p3) *= 4;
482 (*result) += *matched_p3;
483 (*result) -= *matched_p4;
484 return PredictThreshold(*result);
485 }
486}
487
488inline constexpr BitFloat QuadraticPredict(const BitFloat& previous4,
489 const BitFloat& previous3,
490 const BitFloat& previous2,
491 const BitFloat& previous1,
492 int8_t value_exponent) {
493 if (!previous1.AllowsMath()) {
494 return Predict(previous2, value_exponent);
495 } else if (!previous2.AllowsMath()) {
496 return Predict(previous1, value_exponent);
497 } else if (!previous3.AllowsMath()) {
498 return Predict(previous2, previous1, value_exponent);
499 } else if (!previous4.AllowsMath()) {
500 return Predict(previous3, previous2, previous1, value_exponent);
501 } else if (!BitFloat::AllowsMath(value_exponent)) {
502 return BitFloat(0, value_exponent, false);
503 } else {
504 std::optional<BitFloat> matched_p4 = Match(previous4, value_exponent);
505 if (!matched_p4)
506 return Predict(previous3, previous2, previous1, value_exponent);
507 std::optional<BitFloat> matched_p3 = Match(previous3, value_exponent);
508 if (!matched_p3) return Predict(previous2, previous1, value_exponent);
509 std::optional<BitFloat> matched_p2 = Match(previous2, value_exponent);
510 if (!matched_p2) return Predict(previous1, value_exponent);
511 std::optional<BitFloat> result = Match(previous1, value_exponent);
512 if (!result) return Predict(previous2, value_exponent);
513 // We have to calculate:
514 // p_next = ( 3p4 - 5p3 - 3p2 + 9p1 ) / 4
515 (*result) *= 9;
516 (*matched_p2) *= 3;
517 (*result) -= *matched_p2;
518 (*matched_p3) *= 5;
519 (*result) -= *matched_p3;
520 (*matched_p4) *= 3;
521 (*result) += *matched_p4;
522 (*result) /= 4;
523 return PredictThreshold(*result);
524 }
525}
526
527} // namespace casacore::sisco
528
529#endif
Class that understands the bit-representation of single-precision floating point numbers,...
Definition BitFloat.h:54
constexpr bool Sign() const
Definition BitFloat.h:122
constexpr int8_t Exponent() const
Definition BitFloat.h:75
static constexpr bool AllowsMath(int8_t exponent)
Based on the exponent, determines if this is a special value and should not be used in mathematical o...
Definition BitFloat.h:216
constexpr uint32_t Mantissa() const
Definition BitFloat.h:73
void DirectCompress2D(std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void LinearQuadraticDecompress2D(CompressorState &state, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
void Linear3Decompress1D(std::span< const std::byte > mantissa_data, std::span< const std::byte > exponent_data, std::span< BitFloat > output)
void CubicCompress2D(CompressorState &state, std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
constexpr BitFloat Predict(const BitFloat &previous, int8_t value_exponent)
Definition Sisco.h:305
void Compress2D(int level, CompressorState &state, std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
Definition Sisco.h:220
void DirectDecompress2D(std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
void Linear3Decompress2D(CompressorState &state, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
constexpr BitFloat QuadraticPredict(const BitFloat &previous4, const BitFloat &previous3, const BitFloat &previous2, const BitFloat &previous1, int8_t value_exponent)
Definition Sisco.h:488
void DifferenceDecompress2D(CompressorState &state, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
constexpr size_t kCompressedExponentSize
Definition Sisco.h:21
void QuadraticDecompress2D(CompressorState &state, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
constexpr BitFloat Residual(const BitFloat &previous, const BitFloat &value)
Definition Sisco.h:332
void DifferenceCompress2D(CompressorState &state, std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void CubicDecompress1D(std::span< const std::byte > mantissa_data, std::span< const std::byte > exponent_data, std::span< BitFloat > output)
void QuadraticCompress2D(CompressorState &state, std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
constexpr BitFloat AveragePredict(const BitFloat &previous2, const BitFloat &previous1, int8_t value_exponent)
Definition Sisco.h:369
void Quadratic4Decompress1D(std::span< const std::byte > mantissa_data, std::span< const std::byte > exponent_data, std::span< BitFloat > output)
size_t DefaultThreadCount()
void Compress1D(int level, std::span< const BitFloat > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
Definition Sisco.h:162
constexpr size_t kCompressedMantissaSize
Definition Sisco.h:20
void LinearCompress1D(std::span< const BitFloat > input, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void Linear3Compress1D(std::span< const BitFloat > input, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void QuadraticDecompress1D(std::span< const std::byte > mantissa_data, std::span< const std::byte > exponent_data, std::span< BitFloat > output)
constexpr BitFloat LinearPredict(const BitFloat &previous3, const BitFloat &previous2, const BitFloat &previous1, int8_t value_exponent)
Definition Sisco.h:420
void LinearQuadraticCompress2D(CompressorState &state, std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void QuadraticCompress1D(std::span< const BitFloat > input, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void Decompress2D(int level, CompressorState &state, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
Definition Sisco.h:256
constexpr BitFloat PredictThreshold(const BitFloat &value)
If the predicted value is approximately twice as large as the target value (based on its exponent onl...
Definition Sisco.h:298
void Quadratic4Compress1D(std::span< const BitFloat > input, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void LinearDecompress2D(CompressorState &state, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
void Quadratic4Compress2D(CompressorState &state, std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void Decompress1D(int level, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< BitFloat > row)
Definition Sisco.h:191
void DifferenceDecompress1D(std::span< const std::byte > mantissa_data, std::span< const std::byte > exponent_data, std::span< BitFloat > output)
void LinearDecompress1D(std::span< const std::byte > mantissa_data, std::span< const std::byte > exponent_data, std::span< BitFloat > output)
void Average2Decompress1D(std::span< const std::byte > mantissa_data, std::span< const std::byte > exponent_data, std::span< BitFloat > output)
void Linear3Compress2D(CompressorState &state, std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void CubicCompress1D(std::span< const BitFloat > input, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void CubicDecompress2D(CompressorState &state, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
void Average2Decompress2D(CompressorState &state, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
void DifferenceCompress1D(std::span< const BitFloat > input, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void LinearCompress2D(CompressorState &state, std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void Average2Compress1D(std::span< const BitFloat > input, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
void Quadratic4Decompress2D(CompressorState &state, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data, std::span< float > row)
void Average2Compress2D(CompressorState &state, std::span< const float > row, std::span< std::byte > mantissa_data, std::span< std::byte > exponent_data)
NewDelAllocator< T > NewDelAllocator< T >::value
Definition Allocator.h:368
std::vector< BitFloat > previous1
Definition Sisco.h:16
std::vector< BitFloat > scratch
Definition Sisco.h:17
std::vector< BitFloat > previous2
Definition Sisco.h:15
std::vector< BitFloat > previous3
Definition Sisco.h:14
std::vector< BitFloat > previous4
Definition Sisco.h:13