[PyCuda] Python 2.6: longobject.c: bad argument to internal function
Andreas Klöckner
lists at informa.tiker.net
Mon May 18 16:26:05 PDT 2009
Hi Bryan,
first off, please make sure your replies stay on-list.
On Montag 18 Mai 2009, Bryan Catanzaro wrote:
> I'm using Python 2.6.2, Numpy 1.3.0, Boost 1.35, PyCUDA 0.93rc1 (which
> I got from your git repository last week).
>
> The error comes from the pack() function - it seems to stem from
> packing a numpy integer (signed or unsigned) into a C struct with an
> unsigned integer element. For example, this code fails with the same
> error:
>
> ----------
> import numpy
> import struct
>
> format = "L"
> args = [numpy.uint32(1000000)]
> print(struct.pack(format, *args))
> ----------
>
> First, I get a deprecation error:
> sys:1: DeprecationWarning: struct integer overflow masking is deprecated
Ah, I've gotten this warning before--and wondered what it was--but never the
error you got. Thanks for tracking this down.
It appears that the issue is mainly between struct.pack() and numpy then.
PyCUDA is only peripherally involved. Your numpy is newer than mine--I'm still
on 1.2.1. Maybe this was introduced in 1.3? What do you get from
long(numpy.uint32(1000000))
? Does that throw the same error?
> And then the system error
> SystemError: Objects/longobject.c:336: bad argument to internal function
>
> I can get around this error with some ugliness:
> In elementwise.get_elwise_kernel_and_types, if I add a line to filter
> out any upper case 'I' or 'L' elements from the struct string:
>
> arg_types = [get_arg_type(arg) for arg in arguments.split(",")]
> arg_types = [x.lower() if ((x.lower() == 'i') or (x.lower() ==
> 'l')) else x for x in arg_types]
> func.prepare("".join(arg_types), (1,1,1))
The difference here may be whether the conversion goes via long() or not.
> I'm not sure what the right way to pack numpy integers into unsigned
> integer elements in a C struct, but that seems to be where the problem
> is.
The right course of action is probably to bring this up with the numpy
developers. I'd suggest you file a numpy ticket. Once you do, please report
the URL so that I can keep track of it.
Andreas
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: This is a digitally signed message part.
URL: <http://lists.tiker.net/pipermail/pycuda/attachments/20090518/25a767f0/attachment-0001.pgp>
More information about the PyCUDA
mailing list