Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Test failures and segfaults when building with Visual Studio 2022 compiler v14.38.33130 #222

Open
cgohlke opened this issue Dec 16, 2023 · 6 comments

Comments

@cgohlke
Copy link
Contributor

cgohlke commented Dec 16, 2023

Heads-up: this may not be an issue with the ZFP source code, but I get many test failures when compiling zfp 1.0.1 from source with the current/latest Visual Studio 2022 compiler version 14.38.33130 on Windows 11. This is for the AMD64-bit build (32-bit and ARM64 pass):

(December 15, 2023)
library version 4112
CODEC version 5
data model LLP64

testing 1D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.626e+01 <= 1.627e+01                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 8.276e-02 <= 8.277e-02                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio=  7.447 [2200 != 2192]                 FAIL
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio=  5.120 [3200 != 3280]                 FAIL
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  2.491 [6576 != 6328]                 FAIL
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  2.643 [6200 != 6328]          FAIL
  decompress: tolerance=9.766e-04 [1.230e+36 > 9.766e-04]               FAIL
  compress:   tolerance=2.384e-07 ratio=  1.227 [13352 != 11944]        FAIL
  decompress: tolerance=2.384e-07 [1.626e+01 > 2.384e-07]               FAIL
  compress:   tolerance=0.000e+00 ratio=  1.061 [15440 != 13720]        FAIL
  decompress: tolerance=0.000e+00 (1.626e+01 > 0)                        OK
  compress:   reversible ratio=  2.365 [6928 != 7272]                   FAIL
  decompress: reversible [reconstruction differs]                       FAIL
  construct:  4.578e-05 <= 4.578e-05                                     OK
  update:     2.155e-02 ~ 2.155e-02                                      OK

testing 1D array of doubles
  compress:   rate= 3                                                    OK
  decompress: rate= 3 1.626e+01 <= 1.627e+01                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 1.600e+01 <= 1.601e+01                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 1.831e-04 <= 1.832e-04                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio=  8.660 [3784 != 3664]                 FAIL
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  4.467 [7336 != 6712]                 FAIL
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.558 [12808 != 14104]               FAIL
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  4.686 [6992 != 6712]          FAIL
  decompress: tolerance=9.766e-04 [1.229e+135 > 9.766e-04]              FAIL
  compress:   tolerance=4.441e-16 ratio=  1.397 [23456 != 25888]        FAIL
  decompress: tolerance=4.441e-16 [1.626e+01 > 4.441e-16]               FAIL
  compress:   tolerance=0.000e+00 ratio=  1.242 [26376 != 29064]        FAIL
  decompress: tolerance=0.000e+00 (1.626e+01 > 0)                        OK
  compress:   reversible ratio=  4.486 [7304 != 7784]                   FAIL
  decompress: reversible [reconstruction differs]                       FAIL
  construct:  1.831e-04 <= 1.832e-04                                     OK
  update:     2.155e-02 ~ 2.155e-02                                      OK

testing 2D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.500e+00 <= 1.500e+00                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 3.662e-03 <= 3.663e-03                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio= 25.600 [640 != 592]                   FAIL
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio= 11.636 [1408 != 1328]                 FAIL
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  4.171 [3928 != 4384]                 FAIL
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  3.103 [5280 != 4936]          FAIL
  decompress: tolerance=9.766e-04 [1.652e+01 > 9.766e-04]               FAIL
  compress:   tolerance=2.384e-07 ratio=  1.471 [11136 != 11064]        FAIL
  decompress: tolerance=2.384e-07 [1.652e+01 > 2.384e-07]               FAIL
  compress:   tolerance=0.000e+00 ratio=  1.302 [12584 != 12520]        FAIL
  decompress: tolerance=0.000e+00 (1.934e+25 > 0)                        OK
  compress:   reversible ratio=  3.185 [5144 != 5104]                   FAIL
  decompress: reversible [reconstruction differs]                       FAIL
  construct:  7.629e-06 <= 7.630e-06                                     OK
  update:     3.755e-01 ~ 3.755e-01                                      OK

testing 2D array of doubles
  compress:   rate= 1                                                    OK
  decompress: rate= 1 2.376e+01 <= 2.376e+01                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 1.797e-01 <= 1.797e-01                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 8.583e-06 <= 8.584e-06                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio= 19.230 [1704 != 1424]                 FAIL
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  7.907 [4144 != 4480]                 FAIL
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.539 [12904 != 12616]               FAIL
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  6.596 [4968 != 5032]          FAIL
  decompress: tolerance=9.766e-04 [1.652e+01 > 9.766e-04]               FAIL
  compress:   tolerance=4.441e-16 ratio=  1.252 [26168 != 26016]        FAIL
  decompress: tolerance=4.441e-16 [7.605e+264 > 4.441e-16]              FAIL
  compress:   tolerance=0.000e+00 ratio=  1.119 [29288 != 28984]        FAIL
  decompress: tolerance=0.000e+00 (1.652e+01 > 0)                        OK
  compress:   reversible ratio=  6.617 [4952 != 5232]                   FAIL
  decompress: reversible [reconstruction differs]                       FAIL
  construct:  8.583e-06 <= 8.584e-06                                     OK
  update:     3.756e-01 ~ 3.755e-01                                      OK

testing 3D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.500e+00 <= 1.500e+00                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 9.583e-03 <= 9.583e-03                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio= 89.043 [184 != 152]                   FAIL
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio= 15.634 [1048 != 1040]                 FAIL
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  3.587 [4568 != 4600]                 FAIL
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  2.684                          OK
  decompress: tolerance=9.766e-04 [1.122e+29 > 9.766e-04]               FAIL
  compress:   tolerance=2.384e-07 ratio=  1.385 [11832 != 11752]        FAIL
  decompress: tolerance=2.384e-07 [3.988e+01 > 2.384e-07]               FAIL
  compress:   tolerance=0.000e+00 ratio=  1.274 [12864 != 12784]        FAIL
  decompress: tolerance=0.000e+00 (3.988e+01 > 0)                        OK
  compress:   reversible ratio=  2.660 [6160 != 6096]                   FAIL
  decompress: reversible [reconstruction differs]                       FAIL
  construct:  3.147e-05 <= 3.148e-05                                     OK
  update:     1.846e+00 ~ 1.846e+00                                      OK

testing 3D array of doubles
  compress:   rate= 1                                                    OK
  decompress: rate= 1 5.210e+00 <= 5.210e+00                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 2.002e-01 <= 2.002e-01                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 3.338e-05 <= 3.338e-05                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio= 28.845 [1136 != 1064]                 FAIL
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  7.275 [4504 != 4624]                 FAIL
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.579 [12704 != 12808]               FAIL
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  5.095 [6432 != 6128]          FAIL
  decompress: tolerance=9.766e-04 [9.920e+234 > 9.766e-04]              FAIL
  compress:   tolerance=4.441e-16 ratio=  1.213 [27016 != 27120]        FAIL
  decompress: tolerance=4.441e-16 [1.491e+163 > 4.441e-16]              FAIL
  compress:   tolerance=0.000e+00 ratio=  1.127 [29088 != 29192]        FAIL
  decompress: tolerance=0.000e+00 (1.749e+190 > 0)                       OK
  compress:   reversible ratio=  5.347                                   OK
  decompress: reversible [reconstruction differs]                       FAIL
  construct:  3.338e-05 <= 3.338e-05                                     OK
  update:     1.846e+00 ~ 1.846e+00                                      OK

testing 4D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.372e+01 <= 1.373e+01                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 6.632e-01 <= 6.633e-01                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio=227.556 [72 != 64]                     FAIL
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio=  9.267 [1768 != 1760]                 FAIL
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  2.794 [5864 != 5856]                 FAIL
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  1.734 [9448 != 9440]          FAIL
  decompress: tolerance=9.766e-04 [1.447e+01 > 9.766e-04]               FAIL
  compress:   tolerance=2.384e-07 ratio=  1.166 [14056 != 14048]        FAIL
  decompress: tolerance=2.384e-07 [1.553e+01 > 2.384e-07]               FAIL
  compress:   tolerance=0.000e+00 ratio=  1.166 [14056 != 14048]        FAIL
  decompress: tolerance=0.000e+00 (1.553e+01 > 0)                        OK
  compress:   reversible ratio=  2.384 [6872 != 6864]                   FAIL
  decompress: reversible [reconstruction differs]                       FAIL
  construct:  3.598e-03 <= 3.598e-03                                     OK
  update:     4.842e+01 ~ 4.843e+01                                      OK

testing 4D array of doubles
  compress:   rate= 1                                                    OK
  decompress: rate= 1 1.016e+01 <= 1.016e+01                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 8.984e+00 <= 8.985e+00                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 3.312e-03 <= 3.312e-03                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio= 18.450 [1776 != 1768]                 FAIL
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  5.580 [5872 != 5864]                 FAIL
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.330 [14064 != 14056]               FAIL
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  3.465 [9456 != 9448]          FAIL
  decompress: tolerance=9.766e-04 [1.579e+01 > 9.766e-04]               FAIL
  compress:   tolerance=4.441e-16 ratio=  1.076 [30448 != 30440]        FAIL
  decompress: tolerance=4.441e-16 [1.592e+01 > 4.441e-16]               FAIL
  compress:   tolerance=0.000e+00 ratio=  1.076 [30448 != 30440]        FAIL
  decompress: tolerance=0.000e+00 (1.592e+01 > 0)                        OK
  compress:   reversible ratio=  4.763 [6880 != 6872]                   FAIL
  decompress: reversible [reconstruction differs]                       FAIL
  construct:  3.312e-03 <= 3.312e-03                                     OK
  update:     4.843e+01 ~ 4.844e+01                                      OK

78 test(s) failed

CMake output

-- Building for: NMake Makefiles
-- The C compiler identification is MSVC 19.38.33133.0
-- The CXX compiler identification is MSVC 19.38.33133.0
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Tools/MSVC/14.38.33130/bin/Hostx64/x64/cl.exe - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Compiling with C standard: 90
-- Compiling with C++ standard: 98
-- Found OpenMP_C: -openmp (found version "2.0")
-- Found OpenMP: TRUE (found version "2.0") found components: C
-- Performing Test HAVE_MATH
-- Performing Test HAVE_MATH - Success
-- Configuring done (2.1s)
-- Generating done (0.1s)

Reverting to the previous compiler version 14.37.32822 fixes the issue:

zfp version 1.0.1 (December 15, 2023)
library version 4112
CODEC version 5
data model LLP64

testing 1D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.626e+01 <= 1.627e+01                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 8.276e-02 <= 8.277e-02                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio=  7.474                                 OK
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio=  4.995                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  2.589                                 OK
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  2.589                          OK
  decompress: tolerance=9.766e-04 3.662e-04 <= 9.766e-04                 OK
  compress:   tolerance=2.384e-07 ratio=  1.372                          OK
  decompress: tolerance=2.384e-07 0.000e+00 <= 2.384e-07                 OK
  compress:   tolerance=0.000e+00 ratio=  1.194                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  2.253                                   OK
  decompress: reversible                                                 OK
  construct:  4.578e-05 <= 4.578e-05                                     OK
  update:     2.155e-02 ~ 2.155e-02                                      OK

testing 1D array of doubles
  compress:   rate= 3                                                    OK
  decompress: rate= 3 1.626e+01 <= 1.627e+01                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 1.600e+01 <= 1.601e+01                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 1.831e-04 <= 1.832e-04                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio=  8.943                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  4.882                                 OK
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.323                                 OK
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  4.882                          OK
  decompress: tolerance=9.766e-04 3.662e-04 <= 9.766e-04                 OK
  compress:   tolerance=4.441e-16 ratio=  1.266                          OK
  decompress: tolerance=4.441e-16 0.000e+00 <= 4.441e-16                 OK
  compress:   tolerance=0.000e+00 ratio=  1.127                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  4.210                                   OK
  decompress: reversible                                                 OK
  construct:  1.831e-04 <= 1.832e-04                                     OK
  update:     2.155e-02 ~ 2.155e-02                                      OK

testing 2D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.500e+00 <= 1.500e+00                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 3.662e-03 <= 3.663e-03                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio= 27.676                                 OK
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio= 12.337                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  3.737                                 OK
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  3.319                          OK
  decompress: tolerance=9.766e-04 3.395e-04 <= 9.766e-04                 OK
  compress:   tolerance=2.384e-07 ratio=  1.481                          OK
  decompress: tolerance=2.384e-07 0.000e+00 <= 2.384e-07                 OK
  compress:   tolerance=0.000e+00 ratio=  1.309                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  3.210                                   OK
  decompress: reversible                                                 OK
  construct:  7.629e-06 <= 7.630e-06                                     OK
  update:     3.755e-01 ~ 3.755e-01                                      OK

testing 2D array of doubles
  compress:   rate= 1                                                    OK
  decompress: rate= 1 2.376e+01 <= 2.376e+01                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 1.797e-01 <= 1.797e-01                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 8.583e-06 <= 8.584e-06                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio= 23.011                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  7.314                                 OK
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.597                                 OK
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  6.512                          OK
  decompress: tolerance=9.766e-04 3.395e-04 <= 9.766e-04                 OK
  compress:   tolerance=4.441e-16 ratio=  1.260                          OK
  decompress: tolerance=4.441e-16 0.000e+00 <= 4.441e-16                 OK
  compress:   tolerance=0.000e+00 ratio=  1.131                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  6.263                                   OK
  decompress: reversible                                                 OK
  construct:  8.583e-06 <= 8.584e-06                                     OK
  update:     3.756e-01 ~ 3.755e-01                                      OK

testing 3D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.500e+00 <= 1.500e+00                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 9.583e-03 <= 9.583e-03                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio=107.789                                 OK
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio= 15.754                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  3.562                                 OK
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  2.684                          OK
  decompress: tolerance=9.766e-04 2.203e-04 <= 9.766e-04                 OK
  compress:   tolerance=2.384e-07 ratio=  1.394                          OK
  decompress: tolerance=2.384e-07 0.000e+00 <= 2.384e-07                 OK
  compress:   tolerance=0.000e+00 ratio=  1.282                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  2.688                                   OK
  decompress: reversible                                                 OK
  construct:  3.147e-05 <= 3.148e-05                                     OK
  update:     1.846e+00 ~ 1.846e+00                                      OK

testing 3D array of doubles
  compress:   rate= 1                                                    OK
  decompress: rate= 1 5.210e+00 <= 5.210e+00                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 2.002e-01 <= 2.002e-01                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 3.338e-05 <= 3.338e-05                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio= 30.797                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  7.087                                 OK
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.558                                 OK
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  5.347                          OK
  decompress: tolerance=9.766e-04 2.201e-04 <= 9.766e-04                 OK
  compress:   tolerance=4.441e-16 ratio=  1.208                          OK
  decompress: tolerance=4.441e-16 0.000e+00 <= 4.441e-16                 OK
  compress:   tolerance=0.000e+00 ratio=  1.122                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  5.347                                   OK
  decompress: reversible                                                 OK
  construct:  3.338e-05 <= 3.338e-05                                     OK
  update:     1.846e+00 ~ 1.846e+00                                      OK

testing 4D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.372e+01 <= 1.373e+01                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 6.632e-01 <= 6.633e-01                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio=256.000                                 OK
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio=  9.309                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  2.798                                 OK
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  1.736                          OK
  decompress: tolerance=9.766e-04 1.359e-04 <= 9.766e-04                 OK
  compress:   tolerance=2.384e-07 ratio=  1.166                          OK
  decompress: tolerance=2.384e-07 0.000e+00 <= 2.384e-07                 OK
  compress:   tolerance=0.000e+00 ratio=  1.166                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  2.387                                   OK
  decompress: reversible                                                 OK
  construct:  3.598e-03 <= 3.598e-03                                     OK
  update:     4.842e+01 ~ 4.843e+01                                      OK

testing 4D array of doubles
  compress:   rate= 1                                                    OK
  decompress: rate= 1 1.016e+01 <= 1.016e+01                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 8.984e+00 <= 8.985e+00                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 3.312e-03 <= 3.312e-03                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio= 18.534                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  5.588                                 OK
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.331                                 OK
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  3.468                          OK
  decompress: tolerance=9.766e-04 1.360e-04 <= 9.766e-04                 OK
  compress:   tolerance=4.441e-16 ratio=  1.076                          OK
  decompress: tolerance=4.441e-16 0.000e+00 <= 4.441e-16                 OK
  compress:   tolerance=0.000e+00 ratio=  1.076                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  4.768                                   OK
  decompress: reversible                                                 OK
  construct:  3.312e-03 <= 3.312e-03                                     OK
  update:     4.843e+01 ~ 4.844e+01                                      OK

all tests passed

Most ZFP related tests in imagecodecs also fail or segfault when linked with zfp.lib compiled with the 14.38.33130 compiler.

@lindstro
Copy link
Member

@cgohlke Thanks for reporting this issue. Although I don't expect any difference, do earlier versions of zfp pass with 14.38.33130?

It's possible that the data model is not detected properly, even though both compilers report LLP64. Can you please build with

-DZFP_INT64="long long" -DZFP_INT64_SUFFIX=ll -DZFP_UINT64="unsigned long long" -DZFP_UINT64_SUFFIX=ull

and see if that fixes the issue?

@cgohlke
Copy link
Contributor Author

cgohlke commented Dec 17, 2023

do earlier versions of zfp pass with 14.38.33130

No, but I only tried with 1.0.0 and 1.0.1 git tags so far.

see if that fixes the issue?

No, unfortunately not.

@cgohlke
Copy link
Contributor Author

cgohlke commented Dec 17, 2023

zfp-0.5.5 passes with 14.38.33130

zfp version 0.5.5 (May 5, 2019)
library version 85
CODEC version 5
data model LLP64

testing 1D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.626e+01 <= 1.627e+01                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 8.276e-02 <= 8.277e-02                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio=  7.474                                 OK
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio=  4.995                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  2.589                                 OK
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  2.589                          OK
  decompress: tolerance=9.766e-04 3.662e-04 <= 9.766e-04                 OK
  compress:   tolerance=2.384e-07 ratio=  1.372                          OK
  decompress: tolerance=2.384e-07 0.000e+00 <= 2.384e-07                 OK
  compress:   tolerance=0.000e+00 ratio=  1.194                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  2.253                                   OK
  decompress: reversible                                                 OK
  construct:  4.578e-05 <= 4.578e-05                                     OK
  update:     2.155e-02 ~ 2.155e-02                                      OK

testing 1D array of doubles
  compress:   rate= 3                                                    OK
  decompress: rate= 3 1.626e+01 <= 1.627e+01                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 1.600e+01 <= 1.601e+01                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 1.831e-04 <= 1.832e-04                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio=  8.943                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  4.882                                 OK
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.323                                 OK
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  4.882                          OK
  decompress: tolerance=9.766e-04 3.662e-04 <= 9.766e-04                 OK
  compress:   tolerance=4.441e-16 ratio=  1.266                          OK
  decompress: tolerance=4.441e-16 0.000e+00 <= 4.441e-16                 OK
  compress:   tolerance=0.000e+00 ratio=  1.127                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  4.210                                   OK
  decompress: reversible                                                 OK
  construct:  1.831e-04 <= 1.832e-04                                     OK
  update:     2.155e-02 ~ 2.155e-02                                      OK

testing 2D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.500e+00 <= 1.500e+00                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 3.662e-03 <= 3.663e-03                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio= 27.676                                 OK
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio= 12.337                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  3.737                                 OK
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  3.319                          OK
  decompress: tolerance=9.766e-04 3.395e-04 <= 9.766e-04                 OK
  compress:   tolerance=2.384e-07 ratio=  1.481                          OK
  decompress: tolerance=2.384e-07 0.000e+00 <= 2.384e-07                 OK
  compress:   tolerance=0.000e+00 ratio=  1.309                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  3.210                                   OK
  decompress: reversible                                                 OK
  construct:  7.629e-06 <= 7.630e-06                                     OK
  update:     3.755e-01 ~ 3.755e-01                                      OK

testing 2D array of doubles
  compress:   rate= 1                                                    OK
  decompress: rate= 1 2.376e+01 <= 2.376e+01                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 1.797e-01 <= 1.797e-01                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 8.583e-06 <= 8.584e-06                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio= 23.011                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  7.314                                 OK
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.597                                 OK
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  6.512                          OK
  decompress: tolerance=9.766e-04 3.395e-04 <= 9.766e-04                 OK
  compress:   tolerance=4.441e-16 ratio=  1.260                          OK
  decompress: tolerance=4.441e-16 0.000e+00 <= 4.441e-16                 OK
  compress:   tolerance=0.000e+00 ratio=  1.131                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  6.263                                   OK
  decompress: reversible                                                 OK
  construct:  8.583e-06 <= 8.584e-06                                     OK
  update:     3.756e-01 ~ 3.755e-01                                      OK

testing 3D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.500e+00 <= 1.500e+00                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 9.583e-03 <= 9.583e-03                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio=107.789                                 OK
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio= 15.754                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  3.562                                 OK
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  2.684                          OK
  decompress: tolerance=9.766e-04 2.203e-04 <= 9.766e-04                 OK
  compress:   tolerance=2.384e-07 ratio=  1.394                          OK
  decompress: tolerance=2.384e-07 0.000e+00 <= 2.384e-07                 OK
  compress:   tolerance=0.000e+00 ratio=  1.282                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  2.688                                   OK
  decompress: reversible                                                 OK
  construct:  3.147e-05 <= 3.148e-05                                     OK
  update:     1.846e+00 ~ 1.846e+00                                      OK

testing 3D array of doubles
  compress:   rate= 1                                                    OK
  decompress: rate= 1 5.210e+00 <= 5.210e+00                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 2.002e-01 <= 2.002e-01                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 3.338e-05 <= 3.338e-05                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio= 30.797                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  7.087                                 OK
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.558                                 OK
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  5.347                          OK
  decompress: tolerance=9.766e-04 2.201e-04 <= 9.766e-04                 OK
  compress:   tolerance=4.441e-16 ratio=  1.208                          OK
  decompress: tolerance=4.441e-16 0.000e+00 <= 4.441e-16                 OK
  compress:   tolerance=0.000e+00 ratio=  1.122                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  5.347                                   OK
  decompress: reversible                                                 OK
  construct:  3.338e-05 <= 3.338e-05                                     OK
  update:     1.846e+00 ~ 1.846e+00                                      OK

testing 4D array of floats
  compress:   rate= 2                                                    OK
  decompress: rate= 2 1.372e+01 <= 1.373e+01                             OK
  compress:   rate= 8                                                    OK
  decompress: rate= 8 6.632e-01 <= 6.633e-01                             OK
  compress:   rate=32                                                    OK
  decompress: rate=32 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 4 ratio=256.000                                 OK
  decompress: precision= 4                                               OK
  compress:   precision= 8 ratio=  9.309                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  2.798                                 OK
  decompress: precision=16                                               OK
  compress:   tolerance=9.766e-04 ratio=  1.736                          OK
  decompress: tolerance=9.766e-04 1.359e-04 <= 9.766e-04                 OK
  compress:   tolerance=2.384e-07 ratio=  1.166                          OK
  decompress: tolerance=2.384e-07 0.000e+00 <= 2.384e-07                 OK
  compress:   tolerance=0.000e+00 ratio=  1.166                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  2.387                                   OK
  decompress: reversible                                                 OK

testing 4D array of doubles
  compress:   rate= 1                                                    OK
  decompress: rate= 1 1.016e+01 <= 1.016e+01                             OK
  compress:   rate= 4                                                    OK
  decompress: rate= 4 8.984e+00 <= 8.985e+00                             OK
  compress:   rate=16                                                    OK
  decompress: rate=16 3.312e-03 <= 3.312e-03                             OK
  compress:   rate=64                                                    OK
  decompress: rate=64 0.000e+00 <= 0.000e+00                             OK
  compress:   precision= 8 ratio= 18.534                                 OK
  decompress: precision= 8                                               OK
  compress:   precision=16 ratio=  5.588                                 OK
  decompress: precision=16                                               OK
  compress:   precision=32 ratio=  2.331                                 OK
  decompress: precision=32                                               OK
  compress:   tolerance=9.766e-04 ratio=  3.468                          OK
  decompress: tolerance=9.766e-04 1.360e-04 <= 9.766e-04                 OK
  compress:   tolerance=4.441e-16 ratio=  1.076                          OK
  decompress: tolerance=4.441e-16 0.000e+00 <= 4.441e-16                 OK
  compress:   tolerance=0.000e+00 ratio=  1.076                          OK
  decompress: tolerance=0.000e+00 0.000e+00 <= 0.000e+00                 OK
  compress:   reversible ratio=  4.768                                   OK
  decompress: reversible                                                 OK

all tests passed

@cgohlke
Copy link
Contributor Author

cgohlke commented Dec 17, 2023

As a workaround, compile with the /Ob1 instead of the default /Ob2 compiler switch, for example using -DCMAKE_C_FLAGS_RELEASE:STRING=/MD /O2 /Ob1 /DNDEBUG for release builds.

/Ob1 "allows expansion only of functions marked inline, __inline, or __forceinline, or in a C++ member function defined in a class declaration", while /Ob2 "allows the compiler to expand any function not explicitly marked for no inlining" (https://learn.microsoft.com/en-us/cpp/build/reference/ob-inline-function-expansion?view=msvc-170).

@lindstro
Copy link
Member

Thanks for the suggestion. I doubt that we have access to the same compiler/OS/hardware setup, so debugging this from our end will be challenging. AppVeyor supports Visual Studio Community 2022 version 17.5.0. We can take a look and see if the issue can be reproduced with that compiler, though it seems unlikely as the issue seems confined to one particular compiler version and system.

By the way, zfp 1.0.x is not ABI compatible with 0.5.y. I assume you've rebuilt any binaries that depend on zfp.

@cgohlke
Copy link
Contributor Author

cgohlke commented Dec 17, 2023

Yes, it could be a compiler bug introduced by the latest VS update. This issue is meant as a "heads-up" in case someone else runs into it. The workaround, to build with /Ob1, is good enough for now. I think the issue can be closed (?)

By the way, zfp 1.0.x is not ABI compatible with 0.5.y. I assume you've rebuilt any binaries that depend on zfp.

Sure, I was just rebuilding 0.5.5 temporarily for testing this issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants