[racket] OpenCL module macro errors

From: Dane Larsen (dane at larsendt.com)
Date: Mon Aug 26 22:44:06 EDT 2013

Ah! That makes a lot of sense (oops). Thanks for the help!

Dane

On 08/26/2013 02:34 AM, Tobias Hammer wrote:
> I guess you should replace it in the function body too
>
> diff --git a/opencl/c/syntax.rkt b/opencl/c/syntax.rkt
> index 909b2c8..3848e1b 100644
> --- a/opencl/c/syntax.rkt
> +++ b/opencl/c/syntax.rkt
> @@ -216,13 +216,13 @@
>              (define (id:selector arg_id ... _param_type)
>                (case (hash-ref id-selector-map _param_type #f)
>                  [(_vtype)
> -                (local [(define len (id:length _arg_type ...
> _param_type))]
> +                (local [(define len (id:length arg_id ... _param_type))]
>                     (if (zero? len)
>                         _vtype-default
> -                      (id:_vtype _arg_type ... _param_type len)))]
> +                      (id:_vtype arg_id ... _param_type len)))]
>                  ...
>                  [(_ftype)
> -                (id:_ftype _arg_type ... _param_type)]
> +                (id:_ftype arg_id ... _param_type)]
>                  ...
>                  [else
>                   (error 'id:selector "Invalid parameter: ~e"
> _param_type)]))
>
>
> On Sun, 25 Aug 2013 04:02:54 +0200, Dane Larsen <dane at larsendt.com> wrote:
>
>> Hmm. I think I almost have it, but there's one error I can't seem to
>> track down.
>>
>> Switching from _arg_type to arg_id seems to have almost worked, but
>> now I'm stuck. When I try to run my context sharing test program
>> (https://github.com/larsendt/cl-gl-context-sharing/) I get the following:
>>
>> vector-length: contract violation
>>    expected: vector?
>>    given: #<ctype>
>>    context...:
>>  /home/dane/chematox/local/racket-5.90.0.6/collects/ffi/unsafe.rkt:27:27:
>> vector->cblock
>>     /home/dane/git/opencl/opencl/c/syntax.rkt:160:13
>>     /home/dane/git/opencl/opencl/c/syntax.rkt:216:11:
>> clGetGLContextInfoKHR:generic
>>     /home/dane/git/opencl/opencl/sinemesh/sinemesh-gl.rkt:30:6
>>     /home/dane/git/opencl/opencl/sinemesh/sinemesh-gl.rkt:18:2
>>  /home/dane/chematox/local/racket-5.90.0.6/collects/racket/private/class-internal.rkt:4070:0:
>> continue-make-object
>>  /home/dane/chematox/local/racket-5.90.0.6/collects/racket/private/class-internal.rkt:4051:0:
>> do-make-object
>>     /home/dane/git/opencl/opencl/sinemesh/sinemesh-gl.rkt: [running body]
>>
>> It looks like the error is happening in the definition of _vector,
>> which calls vector->cblock. I assumed that would be in the conversion
>> of the input 'properties' vector
>> (https://github.com/larsendt/cl-gl-context-sharing/blob/master/sinemesh-gl.rkt#L46),
>> but that's definitely a vector, not a ctype. There aren't any other
>> inputs being passed to _vector, so I honestly have no idea what's
>> causing it.
>>
>> I put up my fork of the opencl module with the changes at
>> https://github.com/larsendt/opencl/. The definition of
>> clGetGLContextInfoKHR lives at
>> https://github.com/larsendt/opencl/blob/master/opencl/c/9-7.rkt#L19.
>>
>> Thanks for the help so far. I'm still getting my bearings in
>> macro-world, and it's definitely showing today.
>>
>> Dane
>>
>>
>> On 08/23/2013 09:29 AM, Jay McCarthy wrote:
>>> Hi Dane,
>>>
>>> Thanks for working on this.
>>>
>>> If you look at line 106 of the definition of define-opencl-info, it
>>> uses the _arg_type as the name of the selector's arguments. I think
>>> you could safely replace that with arg_id, if not, then you would want
>>> to create new ids with generate-temporaries, but try arg_id first.
>>>
>>> Since this looks like a simple change, try it on your end and we can
>>> just include it in the pull request/patch you send me.
>>>
>>> Jay
>>>
>>>
>>> On Thu, Aug 22, 2013 at 7:54 PM, Dane Larsen <dane at larsendt.com> wrote:
>>>> Hi all,
>>>>
>>>> I'm a little new to Racket (and Lispy languages in general). I'm
>>>> working on
>>>> extending the OpenCL module to add support for OpenGL context sharing.
>>>>
>>>> My questions are somewhat specific to the OpenCL module, but
>>>> hopefully I can
>>>> provide enough context to minimize that.
>>>>
>>>> Right now I'm working on clGetGLContextInfoKHR in, and it's been a
>>>> bit more
>>>> challenging than I anticipated. It's a CL extension function, so
>>>> get-ffi-obj
>>>> fails to find it. This hasn't been a huge problem. I ended up
>>>> creating an
>>>> alternate version of define-opencl (
>>>> https://github.com/jeapostrophe/opencl/blob/master/opencl/c/lib.rkt#L17)
>>>>
>>>> which I've called define-opencl-extension. Rather than calling
>>>> get-ffi-obj,
>>>> it calls clGetExtensionFunctionAddress. That part works great.
>>>>
>>>> The big problem that I'm having right now is with define-opencl-info (
>>>> https://github.com/jeapostrophe/opencl/blob/master/opencl/c/syntax.rkt#L18),
>>>>
>>>> which essentially provides a convenient interface for the clGet*Info
>>>> functions (which all have similar arguments). clGetGLContextInfoKHR
>>>> follows
>>>> that pattern with one exception. It's primary input argument takes a
>>>> vector
>>>> of values, rather than a single value.
>>>>
>>>> A call to define-opencl-info looks like this:
>>>> https://github.com/jeapostrophe/opencl/blob/master/opencl/c/5-3.rkt#L76
>>>>
>>>> I thought I had the correct syntax by essentially replacing line 79
>>>> with the
>>>> following:
>>>>
>>>> (args [properties : (_vector i _cl_context_properties)
>>>> _cl_context_properties_vector/c])
>>>>
>>>> (I've also replaced the other types and argument names and whatnot,
>>>> but that
>>>> all seems to work).
>>>> Anyway, with the (_vector ...) call, I get the following error:
>>>>
>>>> ; c/9-7.rkt:26:22: define: not an identifier, identifier with
>>>> default, or
>>>> ;   keyword for procedure argument
>>>> ;   at: (_vector i _cl_context_properties)
>>>> ;   in: (define (clGetGLContextInfoKHR:generic (_vector i
>>>> ;     _cl_context_properties) _cl_gl_context_info) (case (hash-ref
>>>> ;     id-selector-map _cl_gl_context_info #f) ((_cl_device_id*) (local
>>>> ((define
>>>> ;     len (clGetGLContextInfoKHR:length (_vector i
>>>> _cl_context_properties)...
>>>> ; [,bt for context]
>>>>
>>>> I'm not sure what that error is referring to, or how to fix it.
>>>> Here's the backtrack, but it's not terribly helpful (that I can see,
>>>> anyway):
>>>>
>>>> ; c/9-7.rkt:26:22: define: not an identifier, identifier with
>>>> default, or
>>>> keyword for procedure argument
>>>> ;   at: (_vector i _cl_context_properties)
>>>> ;   in: (define (clGetGLContextInfoKHR:generic (_vector i
>>>> _cl_context_properties) _cl_gl_context_info) (case (hash-ref
>>>> id-selector-map
>>>> _cl_gl_context_info #f) ((_cl_device_id*) (local ((define len
>>>> (clGetGLContextInfoKHR:length (_vector i _cl_context_properties)...
>>>> ;   context...:
>>>> ;
>>>> /home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/norm-define.rkt:46:33:
>>>>
>>>> simple-proto
>>>> ;
>>>> /home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/norm-define.rkt:134:33:
>>>>
>>>> general-proto
>>>> ;    try-next
>>>> ;
>>>> /home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/kw.rkt:804:2
>>>>
>>>> ;
>>>> /home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/modbeg.rkt:46:4
>>>>
>>>> ;
>>>> /home/dane/encrypted/work/chematox/local/racket-5.90.0.6/share/pkgs/xrepl-lib/xrepl/xrepl.rkt:1346:0
>>>>
>>>> ;    standard-module-name-resolver
>>>> ;
>>>> /home/dane/encrypted/work/chematox/local/racket-5.90.0.6/share/pkgs/xrepl-lib/xrepl/xrepl.rkt:1346:0
>>>>
>>>> ;    standard-module-name-resolver
>>>> ;
>>>> /home/dane/encrypted/work/chematox/local/racket-5.90.0.6/share/pkgs/xrepl-lib/xrepl/xrepl.rkt:1346:0
>>>>
>>>> ;    standard-module-name-resolver
>>>> ;
>>>> /home/dane/encrypted/work/chematox/local/racket-5.90.0.6/share/pkgs/xrepl-lib/xrepl/xrepl.rkt:1346:0
>>>>
>>>> ;
>>>> /home/dane/encrypted/work/chematox/local/racket-5.90.0.6/collects/racket/private/misc.rkt:87:7
>>>>
>>>>
>>>> In addition, when I replace the (_vector ...) stuff with a plain old
>>>> _cl_context_properties, everything works fine (but the contract
>>>> fails when I
>>>> actually try to call clGetGLContextInfoKHR, as expected).
>>>>
>>>> What am I doing wrong? It looks like (_vector i
>>>> _cl_context_properties) is
>>>> just as much of a ctype as _cl_context_properties, so why does it
>>>> fail when
>>>> I make it a vector?
>>>>
>>>> Thanks a ton,
>>>> Dane Larsen
>>>>
>>>> ____________________
>>>>    Racket Users list:
>>>>    http://lists.racket-lang.org/users
>>>>
>>>
>>>
>>>
>>
>> ____________________
>>   Racket Users list:
>>   http://lists.racket-lang.org/users
>
>


Posted on the users mailing list.