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 <ro...@eecs.northwestern.edu>wrote: > > > > On Thu, Feb 21, 2013 at 4:47 PM, James Swaine < > james.swa...@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 <dcherkas...@gmail.com> >>> To: users@racket-lang.org >>> Subject: [racket] values primitive blocks future execution >>> Message-ID: >>> <CAN0j1dRCGY7A2WxXBYXP= >>> jblntw_-l3o7eoyjvd1vtab+qd...@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 >> >> >
____________________ Racket Users list: http://lists.racket-lang.org/users