Hi John --

> I would need to distribute execution across multiple consumer-grade 
> desktop computers. All computers will be x86 architecture machines. It 
> would be nice if I could mix 32 and 64 bit machines, however it's not 
> necessary.

Currently Chapel creates a single binary that it executes across all 
machines, so if you had a mix of 32- and 64-bit machines, you'd probably 
need to compile for 32-bit in order to use both together.  Other than 
that, the differences between machines shouldn't be a problem as long as 
you compile for an ISA that works across all of them.


> Ability to use OpenCL and possibly CUDA would be rather 
> important.

At present, Chapel doesn't have any integrated support for OpenCL and 
CUDA.  A past academic project from UIUC did a proof-of-concept to map 
Chapel to GPUs, but that code never firmed up enough to make it into the 
trunk of the project.  Doing so remains future work.  As a result, the 
best way to make use of OpenCL and CUDA at present in Chapel would be to 
create such code as a library that exports a C interface and call into 
those C routines using Chapel's support for extern procedures and types. I 
don't personally have enough experience with OpenCL or CUDA to know how 
easy or hard this would be.


> Machines will have very different kinds of processors and 
> GPUs, so an ability to balance loads will be paramount.

Chapel does not have any built-in load balancing capabilities across 
locales (nodes).  Tasks execute where they are placed, either explicitly 
via on-clauses or implicitly via parallel operations over distributed 
domains (index sets) or arrays.  To do dynamic load balancing, one would 
either need to explicitly write it by creating something like task queues 
and moving work around themselves using on-clauses, or by creating a 
domain map (distribution for a domain and its arrays) that managed the 
load balancing.  (Probably the domain map would be doing the same kind of 
task queueing management under the covers, so would just be abstracting it 
away from user code for things like distributed iterations or array 
operations.


> Computers are 
> connected via LAN and applications will exhibit fine-grained parallelism 
> (Solving Navier-Stokes equations would be one application).
>
> If Chapel would suit my needs, my first question would be how can I 
> distribute array so that computers can get different sized chunks of 
> data? Ability to dynamically change the distribution would be nice, 
> however I think it would be just fine to be able to choose the 
> distribution at the beginning of the execution.

Because the machines we are most focused on are not as heterogeneous as 
you are describing, we have not yet written any domain maps that partition 
different amounts of work/data to different locales.  The domain map 
framework should be sufficient to do this, but to my knowledge, nobody has 
written such a domain map as of yet.  We were recently challenged to write 
such a domain map based not on architectural diversity, but rather 
workload diversity, but have not yet found the time to take on that 
challenge, unfortunately.

Best wishes,
-Brad


------------------------------------------------------------------------------
_______________________________________________
Chapel-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/chapel-users

Reply via email to