umar456 · GitHub

test_svd_opencl.exe is failing on Radeon R7, although passes on GTX 750 Ti.

Description

Output:
ArrayFire v3.9.0 (OpenCL, 64-bit Windows, build 64586e0 )
[0] AMD: Spectre, 6571 MB -- OpenCL 2.0 AMD-APP (3224.5) -- Device driver 3224.5 -- FP64 Support: True
-1- NVIDIA: NVIDIA GeForce GTX 750 Ti, 2047 MB -- OpenCL 3.0 CUDA -- Device driver 531.61 -- FP64 Support:

svd/2.Square, where TypeParam = struct af::af_cfloat
svd.cpp(150): LAPACKE Error (-5)
svd/2.Rect0, where TypeParam = struct af::af_cfloat
svd.cpp(150): LAPACKE Error (-5)
svd/2.Rect1, where TypeParam = struct af::af_cfloat
svd.cpp(150): LAPACKE Error (-5)
svd/2.InPlaceSquare, where TypeParam = struct af::af_cfloat
svd.cpp(150): LAPACKE Error (-5)
svd/2.InPlaceRect0, where TypeParam = struct af::af_cfloat
svd.cpp(150): LAPACKE Error (-5)

Cause:
The magma gebrd function, functions in an hybrid mode having host buffers and device buffers in sync.
A new device buffer dwork is created for the corresponding host buffer work.
The host buffer result from a vector object, which initializes all elements to 0.0
The corresponding device buffer is not initialized.
On the AMD, this resulted in NAN values produced by the gebrd function, which is detected in the following
lapacke copy function resulting in an error -5.

Additional information about the PR answering following questions:

  • Can this PR be backported to older versions? yes

Fixes: #3147

Changes to Users

Fixed occasional bug

Checklist

  • Rebased on latest master
  • Code compiles
  • Tests pass
  • Functions added to unified API
  • Functions documented

Read the original on github.com ↗