Hi Karl, Attached and below is the the matrix and vector setup that I'm using from scala.
I've also attached it as DenseVectorMmul.cpp. When i the snippet below, I get the following error: terminate called after throwing an instance of 'viennacl::memory_exception' what(): ViennaCL: Internal memory error: not initialised! Aborted (core dumped) Thanks, Andy #include "viennacl/matrix.hpp" #include "viennacl/compressed_matrix.hpp" #include "viennacl/vector.hpp" #include "viennacl/tools/random.hpp" #include "viennacl/context.hpp" // C_vec = A_dense_matrix %*% B_vec. // compile line w/o OpenMP: g++ DenseVectorMmul.cpp -I/usr/include/viennacl/ -o denseVec int main() { // trying to recreate javacpp wrapper functionalliy as closely as possible // so not using typedef, unsigned ints, etc, and defining templates as doubles // creating buffers as int/double arrays and then setting pointers to them. // (not 100% sure that this is how javacpp passes pointers but should be close.) //typedef double ScalarType; // using unsigned ints here to suppress warnings/errors w/o using -fpermissive` // in acuallity, we cast `int`s from jni/javacpp. unsigned int m = 200; unsigned int n = 100; // create an OpenCL context which we will pass directly to the constructors // of the Matrix and vector viennacl::context oclCtx(viennacl::OPENCL_MEMORY); double A_values[m * n] = {0}; viennacl::tools::uniform_random_numbers<double> randomNumber; for (int i = 0; i < m * n; i++) { A_values[i] = randomNumber(); } double* A_values_ptr = A_values; // this is currently the constructor that we're using through scala/javacpp. const viennacl::matrix<double,viennacl::row_major> A_dense_matrix(A_values_ptr, oclCtx.memory_type() , m, n); double B_values[n] = {0}; for (int i = 0; i < n; i++) { B_values[i] = randomNumber(); } double* B_values_ptr = B_values; // this is currently the constructor that we're using through scala/javacpp. viennacl::vector<double> B_vec(B_values_ptr, oclCtx.memory_type(), n, 0, 1); // perform multiplication and pass result to a vector constructor viennacl::vector<double> C_vec(viennacl::linalg::prod(A_dense_matrix , B_vec)); // print out vec std::cout << "ViennaCL: " << C_vec << std::endl; // just exit with success for now if there are no runtime errors. return EXIT_SUCCESS; } ________________________________ From: Andrew Palumbo <ap....@outlook.com> Sent: Wednesday, September 14, 2016 9:49:32 PM To: Karl Rupp; ViennaCL-devel@lists.sourceforge.net Subject: Re: [ViennaCL-devel] Matrix * Vector CL_OUT_OF_RESOURCES error Hi Karl, Thanks, Yeah I'll try to mock one up in C++ and see if i can reproduce it. (still working in java via javacpp so it can be tough to debug on my end). Will send you a C++ snippit soon. Thanks, Andy ________________________________ From: Karl Rupp <r...@iue.tuwien.ac.at> Sent: Wednesday, September 14, 2016 7:09:13 PM To: Andrew Palumbo; ViennaCL-devel@lists.sourceforge.net Subject: Re: [ViennaCL-devel] Matrix * Vector CL_OUT_OF_RESOURCES error Hi Andrew, > I've been getting a CL_OUT_OF_RESOURCES error when I try to do (somthing > like) the following with A OpenCL Contex in a unit testt: > > > viennacl::matrix<double,viennacl::row_major> mxA > > viennacl::vector<double> vecB > > > // add some data to both mxA and vecB > > > viennacl::vector<double> vecB = viennacl::linalg::prod(mxA, vecB) > > This seems right and everything works when using an OpenMP Context, but > when I try to read the data off of the GPU in (with in an openCL > Context) using backend::memory_read, I get the CL_OUT_OF_RESOURCES error. You get a CL_OUT_OF_RESOURCES error if one of the previous kernels or data manipulations seg-faulted. Although unlikely, it may also be a problem with the matrix-vector product kernel. Is there any chance you can send a working code snippet to reproduce the problem? Best regards, Karli > > > If I dont make the backend::memory_read call, that test will pass, but > my next unit test; A Matrix * Matrix test will fail. > > > Does the Vector product or memory_read seem wrong to you? > > > Thanks, > > > Andy > > > > > > > ------------------------------------------------------------------------------ > > > > _______________________________________________ > ViennaCL-devel mailing list > ViennaCL-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/viennacl-devel >
#include "viennacl/matrix.hpp" #include "viennacl/compressed_matrix.hpp" #include "viennacl/vector.hpp" #include "viennacl/tools/random.hpp" #include "viennacl/context.hpp" // C_vec = A_dense_matrix %*% B_vec. // compile line w/o OpenMP: g++ DenseVectorMmul.cpp -I/usr/include/viennacl/ -o denseVec int main() { // trying to recreate javacpp wrapper functionalliy as closely as possible // so not using typedef, unsigned ints, etc, and defining templates as doubles // creating buffers as int/double arrays and then setting pointers to them. // (not 100% sure that this is how javacpp passes pointers but should be close.) //typedef double ScalarType; // using unsigned ints here to suppress warnings/errors w/o using -fpermissive` // in acuallity, we cast `int`s from jni/javacpp. unsigned int m = 200; unsigned int n = 100; // create an OpenCL context which we will pass directly to the constructors // of the Matrix and vector viennacl::context oclCtx(viennacl::OPENCL_MEMORY); double A_values[m * n] = {0}; viennacl::tools::uniform_random_numbers<double> randomNumber; for (int i = 0; i < m * n; i++) { A_values[i] = randomNumber(); } double* A_values_ptr = A_values; // this is currently the constructor that we're using through scala/javacpp. const viennacl::matrix<double,viennacl::row_major> A_dense_matrix(A_values_ptr, oclCtx.memory_type() , m, n); double B_values[n] = {0}; for (int i = 0; i < n; i++) { B_values[i] = randomNumber(); } double* B_values_ptr = B_values; // this is currently the constructor that we're using through scala/javacpp. viennacl::vector<double> B_vec(B_values_ptr, oclCtx.memory_type(), n, 0, 1); // perform multiplication and pass result to a vector constructor viennacl::vector<double> C_vec(viennacl::linalg::prod(A_dense_matrix , B_vec)); // print out vec std::cout << "ViennaCL: " << C_vec << std::endl; // just exit with success for now if there are no runtime errors. return EXIT_SUCCESS; }
------------------------------------------------------------------------------
_______________________________________________ ViennaCL-devel mailing list ViennaCL-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/viennacl-devel