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
