Hi,
I am trying to extend the sample code for 2D rotation from https://wiki.tiker.net/PyCuda/Examples/Rotate to 3D. Equation #2 on http://mathworld.wolfram.com/RotationMatrix.html represents the sample implementation, I implemented equations #3, #4 and #5 to make it work with 3D data. Here is summary what I tried so far: - Set 'texture<float, 3> tex;' - I am not sure about the offset, I put it as 'int didx = z*newih*newid + y * newiw + x;' - Changed all text2D for text3D - The original code uses: 'cuda.matrix_to_texref(a, texref, order="C")' to generate the 2D cuda texture, but as I want to work with 3D data, this method does not work. I checked that matrix_to_texref calls the function matrix_to_array that is explicitly implemented for 2D as you can see here: 'h, w = matrix.shape'. I tried to adapt the code to 3D: def matrix3D_to_texref(matrix, texref, order): bind_array_to_texref(matrix3D_to_array(matrix, order), texref) def matrix3D_to_array(matrix, order, allow_double_hack=False): if order.upper() == "C": d, h, w = matrix.shape#TODO: I am not sure about this, it was previously without 'd', now it should work with 3D data stride = 0 elif order.upper() == "F": d, w, h = matrix.shape stride = -1 else: raise LogicError("order must be either F or C") matrix = np.asarray(matrix, order=order) descr = ArrayDescriptor3D()#TODO: I am not sure about this, it was previously ArrayDescriptor() descr.width = w descr.height = h descr.depth = d #TODO: I am not sure about this, this was not there previously if matrix.dtype == np.float64 and allow_double_hack: descr.format = array_format.SIGNED_INT32 descr.num_channels = 3 else: descr.format = dtype_to_array_format(matrix.dtype) descr.num_channels = 1 ary = Array(descr) copy = Memcpy3D() #TODO: I am not sure about this, originally it was Memcpy2D() copy.set_src_host(matrix) copy.set_dst_array(ary) copy.width_in_bytes = copy.src_pitch = copy.dst_pitch = \ matrix.strides[stride] copy.height = h copy.depth = d #TODO: I am not sure about this, this was not there previously copy(aligned=True) return ary Is there another way to generate a 3D pycuda texture? Or maybe I am close to fix the issue, for now I am getting the following error: Boost.Python.ArgumentError: Python argument types in Memcpy3D.__call__(Memcpy3D) did not match C++ signature: __call__(struct pycuda::memcpy_3d {lvalue}, class pycuda::stream) __call__(struct pycuda::memcpy_3d {lvalue}) Best regards, Gabriel |
ghum <[hidden email]> writes:
> copy(aligned=True) > > return ary > > Is there another way to generate a 3D pycuda texture? Or maybe I am close to > fix the issue, for now I am getting the following error: > > Boost.Python.ArgumentError: Python argument types in > Memcpy3D.__call__(Memcpy3D) > did not match C++ signature: > __call__(struct pycuda::memcpy_3d {lvalue}, class pycuda::stream) > __call__(struct pycuda::memcpy_3d {lvalue}) I think your main issue might be that Memcpy3D doesn't support the 'aligned' kwarg. Andreas _______________________________________________ PyCUDA mailing list [hidden email] https://lists.tiker.net/listinfo/pycuda |
Free forum by Nabble | Edit this page |