guile-user
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Unsafe Conversions and Inlining


From: Ludovic Courtès
Subject: Re: Unsafe Conversions and Inlining
Date: Sun, 23 Feb 2020 18:08:34 +0100
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/26.3 (gnu/linux)

Hi Christopher,

Christopher Howard <address@hidden> skribis:

> Hi, I'm doing a project with SDR involving a lot of number crunching,
> as SDR usually does, with Guile 3.0 embedded in a C application. Of
> course,  the idea is to have the C functions handle the low-level
> number crunching. But it some places it is difficult to get around
> performance hits from required scheme conversions, e.g.: scheme
> bytevector -> scheme pointer -> C pointer. Of course, working on
> reducing those, but wondering...
>
> (1) Do I have any options for unsafe conversions, e.g., some guile
> library out there which would convert bytevector to C pointer without
> typechecking?

Nope.  Unfortunately, ‘bytevector->pointer’ is currently relatively
expensive because it allocates memory:

  https://lists.gnu.org/archive/html/guile-devel/2019-11/msg00019.html

Now, you could write a C function that takes a bytevector and then uses
‘SCM_BYTEVECTOR_CONTENTS’ on it.  That’d allow you to sidestep
‘bytevector->pointer’ altogether.

> (2) Is there anything I can do as far as inlining those core conversion
> functions that might be useful?

I don’t think so.

However, note that Guile 3.0 should be good at number crunching: it can
unbox floats and integers, and there’s whole-module inlining too, so all
in all, it should work well and allow crossing the C/Scheme border.
Worth a try!

Ludo’.



reply via email to

[Prev in Thread] Current Thread [Next in Thread]