#1068199 librocfft0: callback test failures on gfx900 and gfx1030

Package:
librocfft0
Source:
librocfft0
Description:
ROCm library for computing Fast Fourier Transforms - library
Submitter:
Cordell Bloor
Date:
2024-04-04 22:03:03 UTC
Severity:
normal
#1068199#5
Date:
2024-04-01 17:24:49 UTC
From:
To:
Dear Maintainer,

The rocfft callback tests were passing with rocfft 5.5.1 on hip 5.2.3,
but began failing when hip was updated to 5.7.1. These failures are
specific to gfx900 and gfx1030 to gfx1036. The failures are not observed on
gfx803, gfx906, gfx1010, gfx1100 or gfx1101. This problem remains
unchanged by the update of rocfft to 5.7.1.

This is a sample of the failing test output [1]:

161s [ RUN      ] rocfft_UnitTest.default_load_callback_complex_single
161s clients/tests/default_callbacks_test.cpp:280: Failure
161s Expected equality of these values:
161s   rocfft_execute(plan, &in_ptr, &out_ptr, info)
161s     Which is: 1
161s   rocfft_status_success
161s     Which is: 0
161s
161s clients/tests/default_callbacks_test.cpp:310: Failure
161s Expected: (diff.l_inf) < (type_epsilon<Tbound>()), actual: 32.230823516845703 vs 3.75e-05
161s
161s [  FAILED  ] rocfft_UnitTest.default_load_callback_complex_single (349 ms)

It would be good to capture output with AMD_LOG_LEVEL=4 set in the
environment to view more information about the calls that are being made
to the HIP runtime.

Sincerely,
Cory Bloor

[1] https://ci.rocm.debian.net/data/autopkgtest/unstable/amd64+gfx1030/r/rocfft/9454/log.gz

#1068199#12
Date:
2024-04-01 22:35:05 UTC
From:
To:
I tried to reproduce the rocfft callback bug with a W6800 (gfx1030). I
used a Debian Unstable docker container on an Ubuntu Noble host, but the
tests all passed. This made me realize that the test failure pattern on
the CI is that all the qemu-based workers are failing and all the
podman-based workers are passing.

This issue seems to be somehow related to the qemu+rocm autopkgtest
environment.

Sincerely,
Cory Bloor

#1068199#17
Date:
2024-04-02 07:37:12 UTC
From:
To:
Hey Cory,

thank you for the analysis. I'll try to reproduce and lock this down on
my end, too.

Best,
Christian

#1068199#22
Date:
2024-04-04 07:05:01 UTC
From:
To:
The issue is already visible with AMD_LOG_LEVEL=1, it's the lack of PCIe
atomics:
additional causes, too.)

In an older ROCm ticket, a workaround to enable PCIe atomics in the
guest was discussed [1], but I never got this to work. The relevant bit
is not set after invoking setpci.

I don't know how to best address this. A workaround would be to skip
these tests if the host is a guest VM, but that would reduce coverage.
However, switching everything to podman would reduce coverage even more
if we only use the latest kernel.

Best,
Christian

PS: Full AMD_LOG_LEVEL=4 attached, for reference.

[1] https://github.com/ROCm/ROCK-Kernel-Driver/issues/26#issuecomment-313857180

#1068199#27
Date:
2024-04-04 10:30:20 UTC
From:
To:
In a more recent issue [2], a lack of PCIe atomics was also discovered
on physical hardware (it can depend on the CPU and/or the PCIe slot).

In that issue, it was stated that updating to ROCm 6.0 (and PyTorch)
resolved the issue.

I just rebuilt rocfft to 6.0.2 but the issue is still present. But that
was naive, there are other < 6.0 components in the stack that could
affect this.

[2] https://github.com/ROCm/ROCm/issues/2429

#1068199#32
Date:
2024-04-04 21:58:46 UTC
From:
To:
Ah. That makes sense. Thanks, Christian!

The problem appeared in rocfft 5.5.1 when rocm-hipamd was updated from
5.2.3 to 5.7.1. It was working fine even when every package in the stack
below it aside from rocm-compilersupport and rocm-hipamd were on 5.7.1.

I suspect that rocm-hipamd alone determines whether rocfft requires PCIe
atomics.