Thanks for the quick reply Bryan. Indeed, I'm not using CUDA 3.0b - in fact the fact that it had come out totally passed me by! Does this mean that for the next release of PyCUDA we will be able to have BLAS access working with PyCUDA? I seem to remember this driver/runtime API was the issue there. And I think you must be right that it's the problem here too. Thanks!

Dan

On 03/02/2010 19:13, Bryan Catanzaro wrote:
> Are you using CUDA 3.0b? PyCUDA uses the driver API, while chag:pp probably uses the runtime API. Before CUDA 3.0b, trying to interoperate between the two causes segmentation faults like what you seem to be seeing.
>
> - bryan
>
> On Feb 3, 2010, at 9:18 AM, Dan Goodman wrote:
>
>> Hi all,
>>
>> I have a problem and almost a solution, but my program crashes after running and giving the right output. The problem is to use an external library, in this case chag:pp [1] which is a header file only library, along with PyCUDA. What I'm trying to do is to use their compaction algorithm on a pycuda array. I've successfully built a DLL from a C++ file which basically does this:
>>
>> struct Predicate
>> {
>>     __device__ bool operator() (double value) const
>>     {
>>         return value>0.0;
>>     }
>> };
>> void find_positive(
>>         int x_gpu_start,
>>         int x_gpu_end,
>>         int y_gpu_start,
>>         int count_start
>>         )
>> {
>>     pp::compact(
>>         (double *)x_gpu_start, /* Input start pointer */
>>         (double *)x_gpu_end,   /* Input end pointer */
>>         (double *)y_gpu_start, /* Output start pointer */
>>         (size_t *)count_start, /* Storage for valid element count */
>>         Predicate()            /* Predicate */
>>         );
>> }
>>
>> I'm then using ctypes to load this library and call that function, like this:
>>
>> lib = cdll.LoadLibrary('testchagpp')
>> find_positive = lib.find_positive
>> x = randn(100)
>> y = to_gpu(x)
>> out = to_gpu(zeros(len(x)))
>> count = to_gpu(array([0], dtype=int))
>> find_positive(int(y.gpudata), int(y.gpudata)+len(x)*8,
>>               int(out.gpudata), int(count.gpudata))
>>
>>
>> The program works, in that it correctly compacts the array x into the array y, but afterwards I get the error:
>>
>> This application has requested the Runtime to terminate it in an unusual way.
>> Please contact the application's support team for more information.
>>
>> I'm on 64 bit Windows 7, but using a 32 bit build of Python, PyCuda, etc.
>>
>> I see two possibilities. Possibility 1: I've just made a mistake somewhere about something obvious, and this approach should work. Possibility 2: I can't pass pycuda data to the DLL file and this causes something to break somewhere.
>>
>> Any ideas?
>>
>> Many thanks,
>> Dan Goodman
>>
>> [1] http://www.cse.chalmers.se/~billeter/pub/pp/
>>
>> _______________________________________________
>> PyCUDA mailing list
>> [email protected]
>> http://host304.hostmonster.com/mailman/listinfo/pycuda_tiker.net
>


_______________________________________________
PyCUDA mailing list
[email protected]
http://host304.hostmonster.com/mailman/listinfo/pycuda_tiker.net

Reply via email to