Closed dneto0 closed 2 days ago
Sample failure for Pixel 6
Sample failure:
Traceback (most recent call last):
File "/b/swarming/w/ir/content/test/gpu/gpu_tests/gpu_integration_test.py", line 624, in _RunGpuTest
self.RunActualGpuTest(url, args)
File "/b/swarming/w/ir/content/test/gpu/gpu_tests/webgpu_cts_integration_test_base.py", line 371, in RunActualGpuTest
self.fail(self._query + ' failed\n' + log_str)
File "/b/swarming/w/ir/.task_template_vpython_cache/vpython/store/cpython+kp5sf4ggj3quhveqf2mb3pane0/contents/lib/python3.8/unittest/case.py", line 753, in fail
raise self.failureException(msg)
AssertionError: webgpu:shader,execution,expression,call,builtin,determinant:f16:inputSource="storage_r";dim=4 failed
- EXPECTATION FAILED: (mat4x4<f16>(7.0 (0x4700), -7.0 (0xc700), 7.0 (0x4700), -7.0 (0xc700), -7.0 (0xc700), 7.0 (0x4700), -7.0 (0xc700), 10.0 (0x4900), 7.0 (0x4700), -7.0 (0xc700), 7.0 (0x4700), -7.0 (0xc700), -7.0 (0xc700), 7.0 (0x4700), -7.0 (0xc700), 7.0 (0x4700)))
returned: 3.0 (0x4200)
expected: { 'f16', [0.0 (0x0000 subnormal)] }
Error
at GPUTest.eventualAsyncExpectation (http://127.0.0.1:42115/third_party/webgpu-cts/src/common/framework/fixture.js:167:28)
at GPUTest.expectGPUBufferValuesPassCheck (http://127.0.0.1:42115/third_party/webgpu-cts/src/webgpu/gpu_test.js:339:14)
at http://127.0.0.1:42115/third_party/webgpu-cts/src/webgpu/shader/execution/expression/expression.js:311:11
at processBatch (http://127.0.0.1:42115/third_party/webgpu-cts/src/webgpu/shader/execution/expression/expression.js:239:9)
at async Promise.all (index 0)
at async run (http://127.0.0.1:42115/third_party/webgpu-cts/src/webgpu/shader/execution/expression/expression.js:255:5)
at async RunCaseSpecific.fn (http://127.0.0.1:42115/third_party/webgpu-cts/src/webgpu/shader/execution/expression/call/builtin/determinant.spec.js:43:5)
Sample failure for Intel UHD 630
webgpu:shader,execution,expression,call,builtin,determinant:f16:inputSource="uniform";dim=2 failed
- EXPECTATION FAILED: (mat2x2<f16>(1.0 (0x3c00), -10.0 (0xc900), -1.0 (0xbc00), 1.0 (0x3c00)))
returned: -11.0 (0xc980)
expected: { 'f16', [-9.0 (0xc880)] }
Fixed by #3789
webgpu:shader,execution,expression,call,builtin,determinant:f16 fails on some GPUs, including:
The existing test computes the determinant using input matrices that are designed to not lose any accuracy bits, by bounding the magnitude of the matrix elements. The analysis was done for f32, and taking the worst case from 4x4 matrices. It bounded the elements by the 4th root of the maximum integer that would fit in 23-ish bits (the number of significand bits); that turns out to be "bound elements by 38". That works for f32. But the analysis doesn't work for f16, where only 10 mantissa bits are represented, and there are 11 bits in the significand for normal numbers.
Redoing the analysis, only 2 bits of precision are allowed per element, roughly speaking, for f16. The failing cases go way beyond that, and we get errors in the last two bits of the result. This is not surprising in retrospect.