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 <[email protected]>
Sent: Wednesday, September 14, 2016 9:49:32 PM
To: Karl Rupp; [email protected]
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 <[email protected]>
Sent: Wednesday, September 14, 2016 7:09:13 PM
To: Andrew Palumbo; [email protected]
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
> [email protected]
> 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
[email protected]
https://lists.sourceforge.net/lists/listinfo/viennacl-devel