On Sep 14, 2012, at 5:04 PM, Vincent St-Amour wrote:

> I can't reproduce what you describe.
> 
> With `flvector-set!':
> cpu time: 3404 real time: 3405 gc time: 0
> 
> Without:
> cpu time: 548 real time: 546 gc time: 64
> 
> Are you running the two versions in the same way?

I'm running out the door. Short answer: yes. I repeatedly commented the 
flvector-set! in and out, and ran it in DrR. I'll try to reproduce it again 
when I get home (perhaps many hours from now).

Thanks!

John

> 
> Vincent
> 
> 
> At Fri, 14 Sep 2012 16:19:56 -0700,
> John Clements wrote:
>> 
>> [1  <multipart/signed (7bit)>]
>> [1.1  <text/plain; windows-1252 (quoted-printable)>]
>> Okay, I think I have to start this e-mail with a big wow and thanks. This 
>> program runs about 4-5x faster in TR:
>> 
>> #lang typed/racket
>> 
>> (require racket/flonum)
>> 
>> (define f (make-flvector (* 10 44100)))
>> 
>> (define k (* 440.0 1/44100 2 pi))
>> (time 
>> (for ([j 100])
>>   (for ([i (* 10 44100)]) 
>>     (define i#i (exact->inexact i))
>>     (void)
>>     (flvector-set! f i 
>>                    (sin (fl* k i#i))))))
>> 
>> This performs 44 million sine computations in about 4 seconds. So.. it's 
>> pretty quick. 
>> 
>> Here's the weird thing, though. When I comment out the whole flvector-set!, 
>> including the computation of the sine, it gets… slower. And performs lots of 
>> gc. Here's that program:
>> 
>> #lang typed/racket
>> 
>> (require racket/flonum)
>> 
>> (define f (make-flvector (* 10 44100)))
>> 
>> (define k (* 440.0 1/44100 2 pi))
>> (time 
>> (for ([j 100])
>>   (for ([i (* 10 44100)]) 
>>     (define i#i (exact->inexact i))
>>     (void)
>>     #;(flvector-set! f i 
>>                    (sin (fl* k i#i))))))
>> 
>> This one runs in about 4.2 seconds, including almost 2 seconds of GC. And it 
>> doesn't compute a single sine!
>> 
>> I'm guessing that the first one somehow triggers an unboxing optimization 
>> that eliminates the allocation, but the size of this effect still 
>> flabbergasts me. I suppose at the end of the day I may just be asking for 
>> some dead code elimination, but it also seems problematic to me that 
>> eliminating uses of a variable would ever make the code run more slowly[*].
>> 
>> [*] Okay, I can think of one corner case: if the commented-out use of the 
>> variable could be shown to eliminate (through exceptional control flow) some 
>> of the possible values taken on by the variable. That can't be happening 
>> here, because there's no use of the variable after the commented-out one.
>> 
>> John
>> 
>> 
>> 
>> [1.2 smime.p7s <application/pkcs7-signature (base64)>]
>> 
>> [2  <text/plain; us-ascii (7bit)>]
>> ____________________
>>  Racket Users list:
>>  http://lists.racket-lang.org/users

Attachment: smime.p7s
Description: S/MIME cryptographic signature

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to