Hi, and thanks for your reply. How difficult would you consider it to be to write such domain map? I looked at the already available distributions and was surprised by how much code was needed, I would have thought that all that would be needed would be functions to map between global indices and rank, local index-pairs....
Also, do you think there is some other language, library or framework that would suit my needs better? 02.11.2014, 19:15, "Brad Chamberlain" <[email protected]>: > 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
