Hi, I would like to know if there is a build-in mechanism (or a typical Go paradigm) to address message passing interfaces.
Good question.
I was wondering about the following issues :
1. In which cases a cluster of say 4 (or 10 or 100 for instance) Raspberry Pi mini computers can be more cost-effective than a single computer with the same amount of cores (does the cost of communicating the data between the computers via the network not outweigh the fact that they car run tasks simultaneously) ?
2. More generally if N is the Number of computers in a network, who does the comparison hold when N increases ?
3. Are clusters of computers only better at improving availability (in network bound applications as opposed to CPU bound applications) or can they actually add raw computing power when used in parallel and using the adequate data communicating (or data-sharing) method.
A concrete example of a subject that puzzles me is the following.
Some people claim (e.g. in videos on YouTube) that they have build a "super-computer" using networks of computers (typically "Raspberry Pi") containing from 4 to sometimes 64 or more Raspberry Pi. Does that make any sense ? Would a single computer with 64 cores not perform much faster (and have more RAM, etc ...), in particular to solve number crunching problems or large text processing problems (as opposed to IO bound problems).
Or stated otherwise:
The rise of the mini-computers (Raspberry Pi etc...) allows one to build relatively cheap clusters of computers, but what area of technology could theoretically benefit from the use of such clusters:
1. Only IO-bound applications (high-availability servers) ?
2. Also purely CPU-Bound applications and if yes, why ? and how ? (hence my initial question "can Go help in that respect ?"). Last but not least : if yes does Go have some built-in libraries (or methodology) which might prove useful in this context (trying improve the crunching power of a system by using a cluster of cheap computers).
What makes these questions rather delicate is that there seems to be a huge lot of confusion in the literature and the web about (related, but different) concepts like : Concurrency, availability, parallelism, network computing, clusters, muti-core, mulch-threading, parallelism of processes on a single computer and parallelizing a task across a cluster. Even in recent books (mostly books about Python...) concurrency seems to be used as a synonym for parallelism and threads, processes and co-routines are treated as synonyms whereas they are in fact totally different subjects.
2. Also purely CPU-Bound applications and if yes, why ? and how ? (hence my initial question "can Go help in that respect ?"). Last but not least : if yes does Go have some built-in libraries (or methodology) which might prove useful in this context (trying improve the crunching power of a system by using a cluster of cheap computers).
2. Also purely CPU-Bound applications and if yes, why ? and how ? (hence my initial question "can Go help in that respect ?"). Last but not least : if yes does Go have some built-in libraries (or methodology) which might prove useful in this context (trying improve the crunching power of a system by using a cluster of cheap computers).Do MPI implementations deal with reliability? I assume ones intended for huge supercomputers must, but I haven’t seen any articles on it. I’d be curious to know how they do it.
Good question.
I was wondering about the following issues :
1. In which cases a cluster of say 4 (or 10 or 100 for instance) Raspberry Pi mini computers can be more cost-effective than a single computer with the same amount of cores (does the cost of communicating the data between the computers via the network not outweigh the fact that they car run tasks simultaneously) ?The general answer is Amdahl's Law (http://en.wikipedia.org/wiki/Amdahl%27s_law), of course it's not always applicable (http://www.futurechips.org/thoughts-for-researchers/parallel-programming-gene-amdahl-said.html). When moving things to multiple-computers you'll get a larger overhead in communication when compared to a single-computer, at the same time you may reduce resource-contention for disk, RAM (or other resources). So depending where your bottlenecks are, it could go either way...