Re: Anyone understand this?

"David McClain (as dbm at refined-audiometrics dot com)" <[email protected]>
Newsgroups gmane.lisp.lispworks.general
Message-ID <[email protected]>
… and so I tried using :TYPE ‘(:UNSIGNED :LONGLONG). But that didn’t work either, still getting the base address of the array, regardless of the :START arg value.

The examples in the LW Man pages work as indicated. Which tells me that this really only works for now with :BYTE arguments.



> On Jan 22, 2025, at 12:32, David McClain <[email protected]> wrote:
> 
> I had the idea that, if the LW Manual is correct and it works there, perhaps I can fake the system out by declaring the type as ‘(:UNSIGNED :BYTE) and use an index multiplied by 8 for the :START argument.
> 
> But this does not work, because the underlying system looks at the array argument, and decides my :START arg is out of bounds.
> 
> 
>> On Jan 22, 2025, at 12:22, David McClain (as dbm at refined-audiometrics dot com) <[email protected]> wrote:
>> 
>> So one error of use seems to be that the type should be :DOUBLE, not :DOUBLE-FLOAT (although no complaints were registered). But using :DOUBLE does not fix anything. The routine FLI:SET-DYNAMIC-LISP-ARRAY-POINTER still produces identical results, regardless of the :START argument.
>> 
>> 
>> 
>>> On Jan 22, 2025, at 12:15, David McClain (as dbm at refined-audiometrics dot com) <[email protected]> wrote:
>>> 
>>> Indeed, going back to the examples in the LW Manual,
>>> 
>>> This produces 10.0 instead of 30.0.
>>> 
>>> (let* ((arr (make-array 3
>>>                         :element-type 'double-float
>>>                         :allocation :pinnable
>>>                         :initial-contents '(10d0 20d0 30d0))))
>>>   (hcl:with-pinned-objects (arr)
>>>     (fli:with-dynamic-lisp-array-pointer (parr arr :start 2 :type :double-float)
>>>       (fli:dereference parr))))
>>> 
>>> 
>>>> On Jan 22, 2025, at 12:11, David McClain (as dbm at refined-audiometrics dot com) <[email protected]> wrote:
>>>> 
>>>> More properly, it appears to be a bug in FLI::SET-DYNAMIC-LISP-ARRAY-POINTER, which is part of the macro expansion.
>>>> 
>>>> 
>>>> 
>>>> 
>>>>> On Jan 22, 2025, at 12:10, David McClain <[email protected]> wrote:
>>>>> 
>>>>> It appears now that the fault actually lies with FLI:WITH-DYNAMIC-LISP-ARRAY-POINTER. 
>>>>> 
>>>>> Using this code to produce a dummy second pointer with explicit :START 0, alongside the actual pointer of interest with a non-zero :START parameter, and then stepping through this code with a breakpoint set where the pointers are created, shows that both pointers produce identical FLI:POINTER objects. There is no base + offset in a composite object. The POINTER is expected to have a reduced direct address. And the two pointers do not differ when they ought to be different.
>>>>> 
>>>>> So looks like a bug in FLI:WITH-DYNAMIC-LISP-ARRAY-POINTER.
>>>>> 
>>>>> (defun vdot (arr1 arr2 &key (start2 0))
>>>>>   ;; intended for pre-decimation FIR filtering, where:
>>>>>   ;;   arr1 = FIR filter kernel
>>>>>   ;;   arr2 = input data buffer
>>>>>   ;;   nel  = length of FIR filter (ntaps)
>>>>>   ;;   start2 = starting position in data buffer for filtering,
>>>>>   ;;            as kernel steps along by ndec
>>>>>   (declare (array (double-float *) arr1 arr2))
>>>>>   (fli:with-dynamic-foreign-objects ()
>>>>>     (let ((ans (fli:allocate-dynamic-foreign-object :type :double-float)))
>>>>>       (hcl:with-pinned-objects (arr2)
>>>>>         (fli:with-dynamic-lisp-array-pointer (parr arr2 :type :double-float :start start2)
>>>>>           (fli:with-dynamic-lisp-array-pointer (parrx arr2 :type :double-float :start 0)
>>>>>             (_vdsp-dotprd arr1 1 parr 1 ans (length arr1))
>>>>>             (inspect (list parr parrx))
>>>>>             (fli:dereference ans)))
>>>>>         ))))
>>>>> 
>>>>> #|
>>>>> (let* ((arr2 (make-array 5
>>>>>                          :element-type 'double-float
>>>>>                          :allocation :pinnable
>>>>>                          :initial-contents '(1d0 2d0 3d0 4d0 5d0)))
>>>>>        (arr1 (make-array 3
>>>>>                          :element-type 'double-float
>>>>>                          :allocation :pinnable
>>>>>                          :initial-contents '(10d0 20d0 30d0))))
>>>>>   (vdot arr1 arr2 :start2 1)) ;; should produce 200.0, but produces 140.0.
>>>>> |#
>>>>> 
>>>>> 
>>>>>> On Jan 22, 2025, at 11:57, Yuri Davidovsky (as work at disclosure dot ie) <[email protected]> wrote:
>>>>>> 
>>>>>> That’s some classy email formatting. 
>>>>>> 
>>>>>>> On 22 Jan 2025, at 18:52, David McClain (as dbm at refined-audiometrics dot com) <[email protected]> wrote…
>>>>>> 
>>>>>> 
>>>>>> _______________________________________________
>>>>>> Lisp Hug - the mailing list for LispWorks users
>>>>>> [email protected]
>>>>>> http://www.lispworks.com/support/lisp-hug.html
>>>>> 
>>>> 
>>> 
>> 
>
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.