I'm in the process of working my way through Julia's support for parallel computing. After reading the Julia manual ("latest" version accessed this morning), I had a few quick questions:
1. The Julia manual makes the statement that it's parallel programming model is unlike MPI:
Julia’s implementation of message passing is different from other
environments such as MPI. Communication in Julia is generally
“one-sided”, meaning that the programmer needs to explicitly manage only
one process in a two-process operation. Furthermore, these
operations typically do not look like “message send” and “message
receive” but rather resemble higher-level operations like calls to user
functions.
However, MPI-2 introduced Remote Memory Access, which includes mechanisms such as "memory windows" and various types of synchronization mechanisms (e.g. fences, locks, etc). The MPI-2 documentation then goes on to outline how these mechanisms can be used for "one-sided communication". That said, would it be fair to interpret the above statement from the Julia manual as follows:
Julia's implementation of message passing is different from traditional message passing. Communication in Julia is generally "one-sided", meaning that the programmer needs to explicitly manage only one process in a two-process operation. Furthermore, these operations typically do not look like “message send” and “message receive” but rather resemble higher-level operations like calls to user functions. Julia's one-sided communication is conceptually similar to the MPI-2's one-sided communication model (cf MPI-2 Remote Memory Access), but allows one to program at a higher level, as well as providing additional features such as remote function calls.
2. I'm also wondering what kind of support Julia currently provides for high-speed "computation" networks based on infiniband, myrinet, and similar technologies? My understanding is that these networks do not use traditional TCP communication protocols? That is, if Julia's implementation only uses TCP socket communication, then all parallel communication would be over the lower-speed "management" network (which would not likely have been designed to carry heavy loads)? (Optimized MPI implementations already exist for many different clusters. Is Julia ready to compete?)
Thanks,
Ben