[racket] values primitive blocks future execution

From: James Swaine (james.swaine at eecs.northwestern.edu)
Date: Thu Feb 21 20:12:57 EST 2013

No, I made a mistake there -- I removed a for by accident, when the real
problem was that the original for loop wasn't using 'in-range'.  But Dmitry
figured that out with the latest version of his code.


On Thu, Feb 21, 2013 at 7:02 PM, Robby Findler
<robby at eecs.northwestern.edu>wrote:

>
>
>
> On Thu, Feb 21, 2013 at 4:47 PM, James Swaine <
> james.swaine at eecs.northwestern.edu> wrote:
>
>> I think the problem (in addition to the ones I mentioned in my previous
>> message) is the use of let*, etc. inside your future thunk.
>>
>
>
> This seems suspicious to me. Probably if that is really the case, we
> should fix it.
>
> Robby
>
>
>>  These were expanding to define-values, which seemed to be the source of
>> the `values' barricading.  If you rewrite `render-scene-dummy' like so:
>>
>> (define (render-scene-dummy object-list)
>>   (let* ([f (future
>>              (lambda ()
>>                (define x (/ screen-width 2))
>>                (define y screen-height)
>>                (define ray-res (ray-cast x y sph-vec))
>>                (define pix-col (point-col (int-res-p ray-res)))
>>                #t))])
>>     (for* ([x (in-range (/ screen-width 2) screen-width)]
>>    [y screen-height])
>>       (let* ([ray-res (ray-cast x y sph-vec)]
>>      [pix-col (point-col (int-res-p ray-res))])
>>  #t))
>>     (touch f))
>> )
>>
>> I don't see any blocks on my machine.  Are you still in experimentation
>> mode with futures?  It seems there won't be much parallelism in this
>> program because you are only creating the one future.
>>
>> In general, it's better to restrict the use of futures to the hottest
>> parts of your program; variables that will be uniform across all parallel
>> tasks should be defined outside the thunk.
>>
>>
>>  Date: Fri, 22 Feb 2013 00:03:28 +0300
>>> From: Dmitry Cherkassov <dcherkassov at gmail.com>
>>> To: users at racket-lang.org
>>> Subject: [racket] values primitive blocks future execution
>>> Message-ID:
>>>         <CAN0j1dRCGY7A2WxXBYXP=
>>> JbLntw_-L3O7eoYJvD1VTAb+qDLYQ at mail.gmail.com>
>>> Content-Type: text/plain; charset="utf-8"
>>>
>>> Hi list.
>>> I've been doing a simple ray tracer[1] and decided to parallelize it
>>> using
>>> futures.
>>>
>>> I've tried to use flonums everywhere and added (in-range) to loops [3]
>>> (over x and y coordinates).
>>>
>>> The problem is that execution of future is blocked seriously.
>>> (apparently by the value primitive) [2]
>>>
>>> Are there any ideas why it doesn't work?
>>>
>>> I use racket v5.3.3.
>>>
>>> [1] Complete source code: http://pastebin.com/EGSzR1Tv
>>>
>>> [2] Future visualizer screenshot: http://ompldr.org/vaGpiaQ
>>>     Invoked via
>>>     (require future-visualizer)
>>>     (visualize-futures (run-no-render))
>>>
>>> [3] Source code for main loop:
>>> (define (render-scene-dummy object-list)
>>>   (let* ([f (future
>>>            (lambda ()
>>>              (for* ([x (in-range (/ screen-width 2))]
>>>                     [y (in-range screen-height)])
>>>                (let* ([ray-res (ray-cast x y object-list)]
>>>                       [pix-col (point-col (int-res-p ray-res))])
>>>                  #t))
>>>              ))])
>>>
>>>     (for* ([x (in-range (/ screen-width 2) screen-width)]
>>>            [y (in-range screen-height)])
>>>       (let* ([ray-res (ray-cast x y object-list)]
>>>              [pix-col (point-col (int-res-p ray-res))])
>>>         #t))
>>>     (touch f)))
>>>
>>>
>>>
>>> --
>>> With best regards,
>>> Dmitry
>>> -------------- next part --------------
>>> An HTML attachment was scrubbed...
>>> URL: <
>>> http://lists.racket-lang.org/users/archive/attachments/20130222/6e2262a8/attachment-0001.html
>>> >
>>>
>>
>> ____________________
>>   Racket Users list:
>>   http://lists.racket-lang.org/users
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130221/c596fed1/attachment-0001.html>

Posted on the users mailing list.