[gambit-list] newbie: bitwise and arithmetic runtime speed for u64

Marc Feeley feeley at iro.umontreal.ca
Sun Apr 26 22:23:03 EDT 2020


With a c-lambda the procedure itself and the conversion functions have to be called, and this adds considerable overhead on such a tiny piece of code.  A ##c-code has no overhead.

Marc



> On Apr 26, 2020, at 7:14 PM, Lucier, Bradley J <bradley.j.lucier.1 at purdue.edu> wrote:
> 
>> On Apr 26, 2020, at 6:20 PM, Marc Feeley <feeley at iro.umontreal.ca> wrote:
>> 
>> (c-declare "#define ELEM0(u64vect) ___BODY_AS(u64vect,___tSUBTYPED)[0]")
>> 
>> (define-macro (u64-xor! v1 v2) ;; v1[0] = v1[0] ^ v2[0]
>> `(##c-code "ELEM0(___ARG1) ^= ELEM0(___ARG2);" v1 v2))
> 
> He originally had similar code:
> 
> ; (define u64c-and
> ; (c-lambda (unsigned-int64 unsigned-int64)
> ; unsigned-int64 "___return(___arg1 & ___arg2);”))
> 
> Would inlining the code as you did give better performance instead of using a c-lambda?
> 
> Brad





More information about the Gambit-list mailing list