[Cffi-devel] Fw: Fw: Help perfecting my GC finalizer/constructor
Joeish W
joeish80829 at yahoo.com
Sun Apr 27 21:25:12 UTC 2014
How do I work with the metaobjects(is that what they are called) output by the code you gave me...If you can show me how to mem-aref one I would really appreciate it
My example includes this function, the types are written exactly how you taught me
;; Point_()
<--C++
;; Point2##t * cv_create_Point2##t ( tn x, tn y) <--C
(defcfun ("cv_create_Point2i" point0) point
"Point constructor")
The output of (point0) is from my best research a metaobject, how do I mem-aref it.
LCV> (point0)
#<CV-POINT {1006CDD5B3}>
On Saturday, April 26, 2014 9:38 PM, Joeish W <joeish80829 at yahoo.com> wrote:
You have
been so kind helping me with these issues, If you don't mind I would
like to iclunde you in my contributions.lisp file with a Thank You. Can
you look over my suggested add on and let me know if the information is
correct and if there is a URL I can include. I like to include URL's as
an extra thank you. If you don't want to be included pls let me know.
Trust me no harm done.
>
>
>;;Thank you to Willem Rein Oudshoorn from CFFI-DEVEL who has made possible my inclusion of finalizers
>;;in this library. He has helped me to iron out a few bugs and has answered quite a few questions of
>;;mine. The knowledge I gained from those answers has really made this a much better library.
>
>
>
>On , Joeish W <joeish80829 at yahoo.com> wrote:
>
>I have 2 examples of how I was planning to call functions. 1 example is the function that just creates the mat. I changed the name to %mat instead of %cv-mat so it would match OpenCV's Mat class name better. The other example, add, I provide because it is an example of a function that would accept a mat as a parameter, I use add here as an example of all functions that would accept either my garbarge collected verion or my non garbage collected.
>>
>>I plan to provide both so, if you
absolutely need
to, you can get a speed increase. Also fnalizers seem to be twice as slow as manual memory management and 4 times slower than with-* macros, and I was advised by my tutor to include all 3 forms of MM. All of
the functions to create the %mat and %mat-expr type are written correctly for both. I was hoping you can give me a thumbs up on if the 2 examples are good, so I can go ahead and write all of my finalizers for all of my types.
>>
>>
>>Example 1:
>>
>>;; Mat::Mat()
>>;; Mat* cv_create_Mat()
>>(defcfun ("cv_create_Mat" %mat) %mat
>> "MAT constructor")
>>
>>;; Mat::Mat()
>>;; Mat* cv_create_Mat()
>>(defcfun ("cv_create_Mat" %%mat) (%mat :garbage-collect t))
>>
>>
>>(defun mat
(&rest args)
>> (cond ((eq (first args) nil) (%mat))
>> ((eq :t (car args)) (%%mat))
>> (t
nil)))
>>
>>
>>Example 2:
>>
>>;; MatExpr + operator
>>;; MatExpr* cv_Mat_add(Mat* m1, Mat* m2)
>>(defcfun ("cv_Mat_add" %add) (:pointer mat-expr)
>> (m1 %mat)
>> (m2 %mat))
>>
>>;; MatExpr + operator
>>;; MatExpr* cv_Mat_add(Mat* m1, Mat* m2)
>>(defcfun ("cv_Mat_add" %%add) (%mat-expr :garbage-collect t)
>> (m1 %mat)
>> (m2 %mat))
>>
>>
>>
>>(defun add (&rest args)
>> (cond ((eq :t (last args)) (%%add (first args) (second args)))
>> (t (%add (first args) (second
args)))))
>>
>>
>>
>>Btw you asked what my motivation for writing an OpenCV wrapper was and it's because of these 4 reasons:
>>
>>1. The libraries that exist are wrappers for the deprecated C OpenCV interface, mine is for the consistently updated C++ interface
>>
>>2: They are incomplete, mine is 3 times bigger or more than the two that exist now , and it aims to be complete within 3 months max
>>
>>3. Mine is aiming for inclusion in OpenCV proper, a generator is being built that will automatically generate all of my low-level functions/types/constants when OpenCV is built...so it will always be up to date
>>
>>4: I'm helping the C wrappers for the C++ interface that this library binds to so I will be at the forefront of
the knowledge needed to keep this library, supported and revolutionary as the first complete Lisp computer vision library
>>
>>
>>
>>
>>
>>On Saturday, April 26, 2014 5:55 AM, Joeish W <joeish80829 at yahoo.com> wrote:
>>
>>Some new exciting information...I ran the create-mat function a million times and my memory went up a slight bit, I ran a million more and it went up a gain..I ran a million more and it actually leveled off. After running a million more times it actually started going down. I was able to see the Lisp GC at work...It doesn't seem to kick in until memory becomes an issue, again sir ...it was an honor
>>>
>>>
>>>
>>>On Saturday, April 26, 2014 4:24 AM, Willem Rein Oudshoorn <woudshoo at xs4all.nl> wrote:
>>>
>>>Joeish W <joeish80829 at yahoo.com> writes:
>>>>
>>>>
>>>>> (defcfun ("cv_create_Mat" create-mat) (%cv-mat :garbage-collect t))
>>>>>
>>>>> a million times to bench mark it it was actually 4 times slower than
>>>>> my original code....I really do need this all to be fast code, since
>>>>> computer vision can benefit from the speed. Also I noticed when I
>>>>> ran the (create-mat) function 1,000,000
times my ram went up a tiny
>>>>> bit and didn't go down..Is that normal for finalizers.
>>>>
>>>>Well, that it is a bit slower is not really surprising because:
>>>>
>>>>1. CLOS classes are instantatied to wrap the pointer
>>>>2. The trivial garbage needs to keep track of the objects
>>>>3. The conversion code is done by generic functions.
>>>>
>>>>However, this is solvable. But I really would not focus on this right
>>>>now. I cannot really imagine that creating the matrix is the
>>>>bottleneck.
>>>>
>>>>With respect to the memory, as long as it
does not grow indefinitely I
>>>>would not worry about it. The trivial garbage package might introduce
>>>>some memory overhead which is not directly reclaimed by the garbage
>>>>collector.
>>>>
>>>>
>>>>> When I use
>>>>> with-* macros or manual MM I don't get an increase in ram on my
>>>>> system. I would like to include finalizers in my library but is there
>>>>> any way to
overcome these obstacles to make that happen...Again the
>>>>> time you took to help me on this is much appreciated. :)You really
>>>>> helped me to understand.
>>>>
>>>>Using `with-*` macros is a good idea. Inside these macros you can
>>>>do the manual garbage collection and avoid maybe the generic type
>>>>conversion. But to make it robust the `with-*` macros will not (I
>>>>expect) be faster than the code you have now.
>>>>
>>>>Making the code fast is certainly doable and not hard, but you should
>>>>first make it work and figure what needs to be fast and which
>>>>conveniences you are willing
to give up for the speed improvement.
>>>>
>>>>Wim Oudshoorn
>>>>
>>>>
>>>>_______________________________________________
>>>>Cffi-devel mailing list
>>>>Cffi-devel at common-lisp.net
>>>>http://common-lisp.net/cgi-bin/mailman/listinfo/cffi-devel
>>>>
>>>>
>>>>
>>>
>>>
>>
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.common-lisp.net/pipermail/cffi-devel/attachments/20140427/f8711173/attachment.html>
More information about the cffi-devel
mailing list