At Fri, 6 Nov 2020 20:14:51 +0100, Dominik Pantůček wrote: > I assume that CS' unsafe-flvector-set! is actually pretty safe when it > comes to flonum-convertible numbers. It might be a bit faster because it > lacks the contract, but definitely it is not a "low level" variant.
Hm, right --- it's implemented by `bytevector-ieee-double-native-set!`, which is defined to convert its last argument to a flonum (so the conversion applies even in unsafe mode). I hadn't noticed that before, so thanks for pointing it out! I will investigate faster option. A primitive without conversion could make the safe `flvector-set!` slightly faster, too, by avoiding a redundant check. > Also given the fact that unsafe-fl+ and others give no performance > advantage I think `unsafe-fl+` can still be faster. For example, the second loop below is the unsafe one, and it's 10-20% faster. I constructed this program carefully, though, to avoid flonum inference and to avoid allocating flonum results (which swamps the cost of checks). The performance guide is pretty conservative about suggesting performance improvements via unsafe operations, already, but suggestions are welcome. Mathew ---------------------------------------- #lang racket/base (require racket/unsafe/ops racket/flonum) (define N 100000000) (define (f x) (fl< (fl+ x x) 0.0)) (define (u-f x) (fl< (unsafe-fl+ x x) 0.0)) (set! f f) (set! u-f u-f) (collect-garbage) (time (for/fold ([v #f]) ([i (in-range N)]) (f 1.0))) (collect-garbage) (time (for/fold ([v #f]) ([i (in-range N)]) (u-f 1.0))) -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/20201106124546.1c8%40sirmail.smtps.cs.utah.edu.