arrayfire: Lapack tests fail if CBlast is used

A couple of BLAS-related tests (e.g. cholesky_dense, solve_dense,inverse_dense and LU) fail on a GTX Titan using OpenCL if compiled with CLBlast on Windows. Cholesky_dense gives errors like “Matrix C’s OpenCL buffer is too small” , so I added some printf debugging to ClBlast’s TestMatrixC:

printf("ld          == %d\n", ld);
printf("one         == %d\n", one);
printf("two         == %d\n", two);
printf("offset      == %d\n", offset);
printf("buffer.size == %d\n", buffer.GetSize());
printf("req size   == %d\n", required_size); 

and Arrayfire’s gpu_blas_herk_func in magma_blast_cblast.h:

printf("triangle      == %d\n", triangle);
printf("transpose     == %d\n", a_transpose);
printf("n             == %d\n", n);
printf("k             == %d\n", k);
printf("a_buffer      == %d\n", a_buffer);
printf("a_offset      == %d\n", a_offset);
printf("a_ld          == %d\n", a_ld);
printf("c_buffer      == %d\n", c_buffer);
printf("c_offset      == %d\n", c_offset);
printf("c_ld          == %d\n", c_ld);'

with this, cholesky_dense_opencl produced the following output

cholesky.txt

I don’t know if this is caused by an error in CLBlast (probably not, CLBlast’s test all pass) or by the integration in arrayfire.

Maybe @CNugteren could take a look at it?

inverse_LU_solve.txt

About this issue

  • Original URL
  • State: closed
  • Created 7 years ago
  • Comments: 35 (35 by maintainers)

Most upvoted comments

Thank you, this solves all the Opencl issues on the systems I have access to!

I will leave this issue open until your changes are merged and arrayfire pulls in a fixed version of clblast

Yes, that could well be the issue. I never understood what this overwrite of herk to syrk was, but now I get it. I’ll try to reproduce the issue later today on my machine and I’ll work on a fix.