Open boegel opened 2 weeks ago
Instance eessi-bot-mc-azure
is configured to build for:
x86_64/amd/zen4
eessi.io-2023.06-software
, eessi-hpc.org-2023.06-compat
, eessi-hpc.org-2023.06-software
, eessi.io-2023.06-compat
bot: build repo:eessi.io-2023.06-software arch:x86_64/amd/zen4
eessi-bot-mc-aws
(click for details)eessi-bot-mc-azure
(click for details)New job on instance eessi-bot-mc-azure for architecture x86_64-amd-zen4 for repository eessi.io-2023.06-software in job dir /project/def-users/SHARED/jobs/2024.06/pr_613/114 |
date | job status | comment |
---|---|---|---|
Jun 15 07:26:30 UTC 2024 | submitted | job id 114 awaits release by job manager |
|
Jun 15 07:27:10 UTC 2024 | released | job awaits launch by Slurm scheduler | |
Jun 15 07:31:13 UTC 2024 | running | job 114 is running |
|
Jun 15 08:24:24 UTC 2024 | finished | :cry: FAILURE (click triangle for details)
|
|
Jun 15 08:24:24 UTC 2024 | test result | :cry: FAILURE (click triangle for details)
|
failed due to corrupt download, probably another job (like #614) was downloading that exact same file at the same time...
Checksum verification for /project/def-users/bot/shared/easybuild/sources/a/at-spi2-core/at-spi2-core-2.49.91.tar.xz using aa72bbb12188ee3d0152cc6ea935415e6dc623ffa751b6a7cc23e9025f0410fd failed
Tarball was indeed corrupt, trying to manually unpack it resulted in
xz: (stdin): Unexpected end of input
bot: build repo:eessi.io-2023.06-software arch:x86_64/amd/zen4
eessi-bot-mc-aws
(click for details)eessi-bot-mc-azure
(click for details)New job on instance eessi-bot-mc-azure for architecture x86_64-amd-zen4 for repository eessi.io-2023.06-software in job dir /project/def-users/SHARED/jobs/2024.06/pr_613/116 |
date | job status | comment |
---|---|---|---|
Jun 15 08:29:59 UTC 2024 | submitted | job id 116 awaits release by job manager |
|
Jun 15 08:30:34 UTC 2024 | released | job awaits launch by Slurm scheduler | |
Jun 15 09:29:49 UTC 2024 | running | job 116 is running |
|
Jun 15 10:23:00 UTC 2024 | finished | :cry: FAILURE (click triangle for details)
|
|
Jun 15 10:23:00 UTC 2024 | test result | :cry: FAILURE (click triangle for details)
|
Failed again due to another checksum failure:
Checksum verification for /project/def-users/bot/shared/easybuild/sources/g/GTK3/adwaita-icon-theme-44.0.tar.xz using 4889c5601bbfecd25d80ba342209d0a936dcf691ee56bd6eca4cde361f1a664c failed
I've removed the corrupt adwaita-icon-theme-44.0.tar.xz
, but we should try and figure out why this happens.
I also don't understand how job 116
could start while 115
(for #614) was still running, since there's only 1 zen4
node available currently...
Any ideas here @trz42 ?
bot: build repo:eessi.io-2023.06-software arch:x86_64/amd/zen4
eessi-bot-mc-azure
(click for details)New job on instance eessi-bot-mc-azure for architecture x86_64-amd-zen4 for repository eessi.io-2023.06-software in job dir /project/def-users/SHARED/jobs/2024.06/pr_613/117 |
date | job status | comment |
---|---|---|---|
Jun 15 12:01:04 UTC 2024 | submitted | job id 117 awaits release by job manager |
|
Jun 15 12:01:12 UTC 2024 | released | job awaits launch by Slurm scheduler | |
Jun 15 12:05:15 UTC 2024 | running | job 117 is running |
|
Jun 15 13:27:01 UTC 2024 | finished | :cry: FAILURE (click triangle for details)
|
|
Jun 15 13:27:01 UTC 2024 | test result | :cry: FAILURE (click triangle for details)
|
make check
in test step fails for Highway-1.0.4-GCCcore-12.3.0.eb
:
The following tests FAILED:
537 - HwyConvertTestGroup/HwyConvertTest.TestAllTruncate/AVX3_ZEN4 # GetParam() = 64 (Subprocess aborted)
537/1187 Test #537: HwyConvertTestGroup/HwyConvertTest.TestAllTruncate/AVX3_ZEN4 # GetParam() = 64 ........................................Subprocess aborted***Exception: 0.35 sec
Running main() from /tmp/bot/easybuild/build/googletest/1.13.0/GCCcore-12.3.0/googletest-1.13.0/googletest/src/gtest_main.cc
Note: Google Test filter = HwyConvertTestGroup/HwyConvertTest.TestAllTruncate/AVX3_ZEN4
[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from HwyConvertTestGroup/HwyConvertTest
[ RUN ] HwyConvertTestGroup/HwyConvertTest.TestAllTruncate/AVX3_ZEN4
u8x16 expect [0+ ->]:
0x00,0x01,0x02,0x03,0x04,0x05,0x06,
u8x16 actual [0+ ->]:
0x00,0x1A,0x02,0x1A,0x04,0x1A,0x06,
Abort at /tmp/bot/easybuild/build/Highway/1.0.4/GCCcore-12.3.0/highway-1.0.4/hwy/tests/convert_test.cc:423: AVX3_ZEN4, u8x16 lane 1 mismatch: expected '0x01', got '0x1A'.
@bedroge You have some experience here?
make check
in test step fails forHighway-1.0.4-GCCcore-12.3.0.eb
:The following tests FAILED: 537 - HwyConvertTestGroup/HwyConvertTest.TestAllTruncate/AVX3_ZEN4 # GetParam() = 64 (Subprocess aborted)
537/1187 Test #537: HwyConvertTestGroup/HwyConvertTest.TestAllTruncate/AVX3_ZEN4 # GetParam() = 64 ........................................Subprocess aborted***Exception: 0.35 sec Running main() from /tmp/bot/easybuild/build/googletest/1.13.0/GCCcore-12.3.0/googletest-1.13.0/googletest/src/gtest_main.cc Note: Google Test filter = HwyConvertTestGroup/HwyConvertTest.TestAllTruncate/AVX3_ZEN4 [==========] Running 1 test from 1 test suite. [----------] Global test environment set-up. [----------] 1 test from HwyConvertTestGroup/HwyConvertTest [ RUN ] HwyConvertTestGroup/HwyConvertTest.TestAllTruncate/AVX3_ZEN4 u8x16 expect [0+ ->]: 0x00,0x01,0x02,0x03,0x04,0x05,0x06, u8x16 actual [0+ ->]: 0x00,0x1A,0x02,0x1A,0x04,0x1A,0x06, Abort at /tmp/bot/easybuild/build/Highway/1.0.4/GCCcore-12.3.0/highway-1.0.4/hwy/tests/convert_test.cc:423: AVX3_ZEN4, u8x16 lane 1 mismatch: expected '0x01', got '0x1A'.
@bedroge You have some experience here?
Someone else reported the same issue, but it looks like there's no solution (other than trying a newer version): https://github.com/google/highway/issues/1913
@bedroge I guess we could try and pinpoint where the fix was made in between Highway 1.0.4 and 1.0.7, so we can come up with a patch, but I took a quick stab at that, and doesn't seem easy...
@bedroge I guess we could try and pinpoint where the fix was made in between Highway 1.0.4 and 1.0.7, so we can come up with a patch, but I took a quick stab at that, and doesn't seem easy...
I tried something similar for the issue I ran into, but also gave up at some point. In some versions quite a lot of code was changed, and backporting stuff was really not feasible...
@bedroge So how do you think we should proceed? Ignore the test failure? Disable that particular test? Do we have any idea whether it's a bug in the test or in the Highway code itself?
@boegel Perhaps we can try changing the optimization flags?
Analysed this a bit...
The failing test TestAllTruncate
in hwy/tests/convert_test.cc
seems to have been changed as follows from version 1.0.4 to 1.0.7:
@@ -432,15 +435,61 @@ struct TestTruncateTo {
};
HWY_NOINLINE void TestAllTruncate() {
- ForUnsignedTypes(ForPartialVectors<TestTruncateTo>());
+ ForU163264(ForDemoteVectors<TestTruncateTo>());
}
The change from ForUnsignedTypes
to ForU163264
seems minimal (both defined in tests/test_util-inl.h
)
ForUnsignedTypes
is defined as follows (in 1.0.4, no change in 1.0.7):
template <class Func>
void ForUnsignedTypes(const Func& func) {
func(uint8_t());
func(uint16_t());
func(uint32_t());
#if HWY_HAVE_INTEGER64
func(uint64_t());
#endif
}
ForU153264
is defined as follows (not defined in 1.0.4, first introduced in 1.0.5):
template <class Func>
void ForU163264(const Func& func) {
func(uint16_t());
func(uint32_t());
#if HWY_HAVE_INTEGER64
func(uint64_t());
#endif
}
ForPartialVectors
hasn't changed from version 1.0.4 to 1.0.7. However, ForPartialVectors
and ForDemoteVectors
are quite a bit different, particularly, between version 1.0.4 and 1.0.7.
ForPartialVectors
in 1.0.4:
// Calls Test for all power of two N in [1, Lanes(d)]. This is the default
// for ops that do not narrow nor widen their input, nor require 128 bits.
template <class Test>
class ForPartialVectors {
mutable bool called_ = false;
public:
~ForPartialVectors() {
if (!called_) {
HWY_ABORT("Test is incorrect, ensure operator() is called");
}
}
template <typename T>
void operator()(T t) const {
called_ = true;
#if HWY_TARGET == HWY_SCALAR
(void)t;
detail::ForeachCappedR<T, 1, 1, Test>::Do(1, 1);
#else
ForExtendableVectors<Test, 0>()(t);
#endif
}
};
ForDemoteVectors
in version 1.0.4:
// Calls Test for all N than can be demoted (not the same as Shrinkable because
// HWY_SCALAR has one lane).
template <class Test, int kPow2 = 1>
class ForDemoteVectors {
mutable bool called_ = false;
public:
~ForDemoteVectors() {
if (!called_) {
HWY_ABORT("Test is incorrect, ensure operator() is called");
}
}
template <typename T>
void operator()(T /*unused*/) const {
called_ = true;
constexpr size_t kMinLanes = size_t{1} << kPow2;
constexpr size_t kMaxCapped = HWY_LANES(T);
// For shrinking, an upper limit is unnecessary.
constexpr size_t max_lanes = kMaxCapped;
(void)kMinLanes;
(void)max_lanes;
(void)max_lanes;
#if HWY_TARGET == HWY_SCALAR
detail::ForeachCappedR<T, 1, 1, Test>::Do(1, 1);
#else
detail::ForeachCappedR<T, (kMaxCapped >> kPow2), kMinLanes, Test>::Do(
kMinLanes, max_lanes);
// TODO(janwas): call Extendable if kMinLanes check not required?
#if HWY_TARGET == HWY_RVV
// For each [MinPow2 + kPow2, 3]; counter is [MinPow2 + kPow2, 3].
detail::ForeachShiftR<T, detail::MinPow2<T>() + kPow2, 0, Test>::Do(
kMinLanes);
#elif HWY_HAVE_SCALABLE
// For each [MinPow2 + kPow2, 0]; counter is [MinPow2 + kPow2 + 3, 3].
detail::ForeachShiftR<T, detail::MinPow2<T>() + kPow2 + 3, -3, Test>::Do(
kMinLanes);
#endif
#endif // HWY_TARGET == HWY_SCALAR
}
};
ForDemoteVectors
in version 1.0.7:
// Calls Test for all N than can be demoted (not the same as Shrinkable because
// HWY_SCALAR has one lane and as a one-lane vector with a lane size of at least
// 2 bytes can always be demoted to a vector with a smaller lane type).
template <class Test, int kPow2 = 1>
class ForDemoteVectors {
mutable bool called_ = false;
public:
~ForDemoteVectors() {
if (!called_) {
HWY_ABORT("Test is incorrect, ensure operator() is called");
}
}
template <typename T>
void operator()(T /*unused*/) const {
called_ = true;
#if HWY_HAVE_SCALABLE
// kMinTVecPow2 is the smallest Pow2 for a vector with lane type T that is
// supported by detail::ForeachPow2Trim
constexpr int kMinTVecPow2 = detail::MinPow2<T>();
// detail::MinPow2<T>() + kMinPow2Adj is the smallest Pow2 for a vector with
// lane type T that can be demoted to a vector with a lane size of
// (sizeof(T) >> kPow2)
constexpr int kMinPow2Adj = HWY_MAX(-3 - kMinTVecPow2 + kPow2, 0);
detail::ForeachPow2Trim<T, kMinPow2Adj, 0, Test>::Do(1);
// On targets with scalable vectors, detail::ForeachCappedR below only
// needs to be executed for vectors that have less than
// Lanes(ScalableTag<T>()) as full vectors were already checked by the
// detail::ForeachPow2Trim above.
constexpr size_t kMaxCapped = HWY_LANES(T) >> 1;
const size_t max_lanes = Lanes(ScalableTag<T>()) >> 1;
#else
// On targets where HWY_HAVE_SCALABLE is 0, any vector with HWY_LANES(T)
// or fewer lanes can always be demoted to a vector with a smaller lane
// type.
constexpr size_t kMaxCapped = HWY_LANES(T);
const size_t max_lanes = kMaxCapped;
#endif
detail::ForeachCappedR<T, kMaxCapped, 1, Test>::Do(1, max_lanes);
}
};
diff for ForDemoteVectors
// Calls Test for all N than can be demoted (not the same as Shrinkable because
-// HWY_SCALAR has one lane).
+// HWY_SCALAR has one lane and as a one-lane vector with a lane size of at least
+// 2 bytes can always be demoted to a vector with a smaller lane type).
template <class Test, int kPow2 = 1>
class ForDemoteVectors {
mutable bool called_ = false;
@@ -467,31 +479,34 @@ class ForDemoteVectors {
template <typename T>
void operator()(T /*unused*/) const {
called_ = true;
- constexpr size_t kMinLanes = size_t{1} << kPow2;
- constexpr size_t kMaxCapped = HWY_LANES(T);
- // For shrinking, an upper limit is unnecessary.
- constexpr size_t max_lanes = kMaxCapped;
- (void)kMinLanes;
- (void)max_lanes;
- (void)max_lanes;
-#if HWY_TARGET == HWY_SCALAR
- detail::ForeachCappedR<T, 1, 1, Test>::Do(1, 1);
+#if HWY_HAVE_SCALABLE
+ // kMinTVecPow2 is the smallest Pow2 for a vector with lane type T that is
+ // supported by detail::ForeachPow2Trim
+ constexpr int kMinTVecPow2 = detail::MinPow2<T>();
+
+ // detail::MinPow2<T>() + kMinPow2Adj is the smallest Pow2 for a vector with
+ // lane type T that can be demoted to a vector with a lane size of
+ // (sizeof(T) >> kPow2)
+ constexpr int kMinPow2Adj = HWY_MAX(-3 - kMinTVecPow2 + kPow2, 0);
+
+ detail::ForeachPow2Trim<T, kMinPow2Adj, 0, Test>::Do(1);
+
+ // On targets with scalable vectors, detail::ForeachCappedR below only
+ // needs to be executed for vectors that have less than
+ // Lanes(ScalableTag<T>()) as full vectors were already checked by the
+ // detail::ForeachPow2Trim above.
+ constexpr size_t kMaxCapped = HWY_LANES(T) >> 1;
+ const size_t max_lanes = Lanes(ScalableTag<T>()) >> 1;
#else
- detail::ForeachCappedR<T, (kMaxCapped >> kPow2), kMinLanes, Test>::Do(
- kMinLanes, max_lanes);
-
-// TODO(janwas): call Extendable if kMinLanes check not required?
-#if HWY_TARGET == HWY_RVV
- // For each [MinPow2 + kPow2, 3]; counter is [MinPow2 + kPow2, 3].
- detail::ForeachShiftR<T, detail::MinPow2<T>() + kPow2, 0, Test>::Do(
- kMinLanes);
-#elif HWY_HAVE_SCALABLE
- // For each [MinPow2 + kPow2, 0]; counter is [MinPow2 + kPow2 + 3, 3].
- detail::ForeachShiftR<T, detail::MinPow2<T>() + kPow2 + 3, -3, Test>::Do(
- kMinLanes);
+ // On targets where HWY_HAVE_SCALABLE is 0, any vector with HWY_LANES(T)
+ // or fewer lanes can always be demoted to a vector with a smaller lane
+ // type.
+ constexpr size_t kMaxCapped = HWY_LANES(T);
+ const size_t max_lanes = kMaxCapped;
#endif
-#endif // HWY_TARGET == HWY_SCALAR
+
+ detail::ForeachCappedR<T, kMaxCapped, 1, Test>::Do(1, max_lanes);
}
};
The changes to ForDemoteVectors
may be ok or not ... in the sense that they just fix a non-working test.
ForU163264
and used that instead of ForUnsignedTypes
as well as replacing ForPartialVectors
with the original ForDemoteVectors
(version 1.0.4) hit a out of memory error when recompiling Highway.Generally, possible ways forward:
@trz42 Isn't the change from ForUnsignedTypes
to ForU163264
for TestAllTruncate
a sign that they simply stopped running that test for uint8_t
?
If so, that seems like an acceptable patch to apply for Highway 1.0.4 (maybe even without changing ForPartialVectors
to ForDemoteVectors
)?
https://github.com/easybuilders/easybuild-easyconfigs/pull/20942 should fix the issue, however, the patch has been only tested for zen4
(it may not apply to other architectures we have been building for so far).
Instance
eessi-bot-mc-aws
is configured to build for:x86_64/generic
,x86_64/intel/haswell
,x86_64/intel/skylake_avx512
,x86_64/amd/zen2
,x86_64/amd/zen3
,aarch64/generic
,aarch64/neoverse_n1
,aarch64/neoverse_v1
eessi.io-2023.06-compat
,eessi-hpc.org-2023.06-software
,eessi.io-2023.06-software
,eessi-hpc.org-2023.06-compat