Hi Andy,

thanks for the reminder and sorry for not getting back to you sooner.

After replacing the dynamically-sized arrays with std::vector<double>, I compiled the code you provided and can execute it without problems. The code is also valgrind-clean, so I don't know what could possibly be the problem.

Can you please verify two things:
 a) you use the latest code from the master branch?
b) does the error show up with the attached code? It contains the fixes for std::vector<>. The reason for the change is that my compiler (GCC 4.6) did error out with the following:

DenseVectorMmul.cpp: In function ‘int main()’:
DenseVectorMmul.cpp:32:30: error: variable-sized object ‘A_values’ may not be initialized DenseVectorMmul.cpp:45:26: error: variable-sized object ‘B_values’ may not be initialized


Best regards,
Karli


On 10/11/2016 07:15 AM, Andrew Palumbo wrote:
Hi Karl, I was wondering if you'd had a chance to take a look at this?


Any help would be much appreciated.  We're looking to do a mahout
release shortly and it would be great to have a ViennaCL vector
implementation included.


Thank you,


Andy


------------------------------------------------------------------------
*From:* Andrew Palumbo <ap....@outlook.com>
*Sent:* Thursday, September 15, 2016 7:08:49 PM
*To:* Karl Rupp; viennacl-devel@lists.sourceforge.net
*Subject:* Re: [ViennaCL-devel] Fw: Matrix * Vector CL_OUT_OF_RESOURCES
error



Thank you I apologize for the sloppiness.


with the correct compile line, I get:

$ g++ DenseVectorMmul.cpp  -I/usr/include/viennacl/ -lOpenCL -o denseVecs

$ ./denseVecs
terminate called after throwing an instance of 'viennacl::memory_exception'
  what():  ViennaCL: Internal memory error: not initialised!
Aborted (core dumped)

Thanks,

Andy


------------------------------------------------------------------------
*From:* Karl Rupp <r...@iue.tuwien.ac.at>
*Sent:* Thursday, September 15, 2016 6:46:40 PM
*To:* Andrew Palumbo; viennacl-devel@lists.sourceforge.net
*Subject:* Re: [ViennaCL-devel] Fw: Matrix * Vector CL_OUT_OF_RESOURCES
error

Hi,

these are linker errors. Add -lOpenCL.
If the OpenCL library is not available system-wide, also pass the the
location with the -L flag.

:-)

Best regards,
Karli


On 09/16/2016 12:08 AM, Andrew Palumbo wrote:

Apologies for accidentally not replying to the list last email....




Thank you, Karl, I'd forgotten that because we have that Definition as
part of the java cpp setup.


With #define VIENNACL_WITH_OPENCL, though now I'm getting compile
errors. Are there possibly missing includes?  I've checked this against
the blas2.cpp example, and don't see any missing.  As well I cant seem
to find the suggested imports that you recommended several weeks back.
 I've attached theu pdated .cpp file with the correct #define as well as
pasted it below the partial error dump.


Thanks again for your time,

Andy



g++ DenseVectorMmul.cpp  -I/usr/include/viennacl/ -o denseVec
/tmp/ccSoGpk2.o: In function
`viennacl::ocl::handle_inc_dec_helper<_cl_mem*>::dec(_cl_mem*&)':
DenseVectorMmul.cpp:(.text._ZN8viennacl3ocl21handle_inc_dec_helperIP7_cl_memE3decERS3_[_ZN8viennacl3ocl21handle_inc_dec_helperIP7_cl_memE3decERS3_]+0x17):
undefined reference to `clReleaseMemObject'
/tmp/ccSoGpk2.o: In function
`viennacl::ocl::handle_inc_dec_helper<_cl_program*>::dec(_cl_program*&)':
DenseVectorMmul.cpp:(.text._ZN8viennacl3ocl21handle_inc_dec_helperIP11_cl_programE3decERS3_[_ZN8viennacl3ocl21handle_inc_dec_helperIP11_cl_programE3decERS3_]+0x17):
undefined reference to `clReleaseProgram'
/tmp/ccSoGpk2.o: In function
`viennacl::ocl::handle_inc_dec_helper<_cl_kernel*>::dec(_cl_kernel*&)':
DenseVectorMmul.cpp:(.text._ZN8viennacl3ocl21handle_inc_dec_helperIP10_cl_kernelE3decERS3_[_ZN8viennacl3ocl21handle_inc_dec_helperIP10_cl_kernelE3decERS3_]+0x17):
undefined reference to `clReleaseKernel'
/tmp/ccSoGpk2.o: In function
`viennacl::ocl::handle_inc_dec_helper<_cl_command_queue*>::inc(_cl_command_queue*&)':
DenseVectorMmul.cpp:(.text._ZN8viennacl3ocl21handle_inc_dec_helperIP17_cl_command_queueE3incERS3_[_ZN8viennacl3ocl21handle_inc_dec_helperIP17_cl_command_queueE3incERS3_]+0x17):
undefined reference to `clRetainCommandQueue'
/tmp/ccSoGpk2.o: In function
`viennacl::ocl::handle_inc_dec_helper<_cl_command_queue*>::dec(_cl_command_queue*&)':
DenseVectorMmul.cpp:(.text._ZN8viennacl3ocl21handle_inc_dec_helperIP17_cl_command_queueE3decERS3_[_ZN8viennacl3ocl21handle_inc_dec_helperIP17_cl_command_queueE3decERS3_]+0x17):
undefined reference to `clReleaseCommandQueue'
/tmp/ccSoGpk2.o: In function
`viennacl::ocl::handle_inc_dec_helper<_cl_context*>::inc(_cl_context*&)':
DenseVectorMmul.cpp:(.text._ZN8viennacl3ocl21handle_inc_dec_helperIP11_cl_contextE3incERS3_[_ZN8viennacl3ocl21handle_inc_dec_helperIP11_cl_contextE3incERS3_]+0x17):
undefined reference to `clRetainContext'
/tmp/ccSoGpk2.o: In function
`viennacl::ocl::handle_inc_dec_helper<_cl_context*>::dec(_cl_context*&)':
{....snip.....}



DenseVectorMmul.cpp:



#define VIENNACL_WITH_OPENCL
#include "viennacl/context.hpp"
#include "viennacl/matrix.hpp"
#include "viennacl/tools/random.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:* Karl Rupp <r...@iue.tuwien.ac.at>
*Sent:* Thursday, September 15, 2016 5:14:36 PM
*To:* Andrew Palumbo; ViennaCL-devel@lists.sourceforge.net
*Subject:* Re: [ViennaCL-devel] Matrix * Vector CL_OUT_OF_RESOURCES error

Hi,

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)

you need to either
  #define VIENNACL_WITH_OPENCL
at the very top or add
  -DVIENNACL_WITH_OPENCL
to your compiler call.

Best regards,
Karli










#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





------------------------------------------------------------------------------



_______________________________________________
ViennaCL-devel mailing list
ViennaCL-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/viennacl-devel



#define VIENNACL_WITH_OPENCL
#include "viennacl/context.hpp"
#include "viennacl/matrix.hpp"
#include "viennacl/tools/random.hpp"

#include <vector>

// C_vec = A_dense_matrix %*% B_vec.

// compile line: g++ DenseVectorMmul.cpp  -I/usr/include/viennacl/ -lOpenCL -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);
 
  std::vector<double> A_values(m * n);

  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[0]);

  // 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);

  std::vector<double> B_values(n);

  for (int i = 0; i < n; i++) { 
    B_values[i] = randomNumber();
  }

  double* B_values_ptr = &(B_values[0]);
           
  // 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;
}
------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most 
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
ViennaCL-devel mailing list
ViennaCL-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/viennacl-devel

Reply via email to