

The sensitivity to parallels in the simple texture of Bach's chorale style means that even similar motion to a fifth or octave can give the impression of parallels. In the example below, A is not allowed, but in B the fifths are not consecutive, and in C they are not moving in parallel (this is the end of one phrase and the beginning of the next): in two chords that are next to each other) You must not write fifths or octaves that are both: What exactly is not allowed? Consecutive parallel consecutive fifths and octaves The 'ban' on parallel fifths and octaves is therefore bound up with other less easily defined aspects of music - learning how to avoid them also guides your writing in the right direction in terms of both harmonic progressions and part-writing in general. Avoiding parallel fifths helps to eliminate this type of voice-leading.



There is MPI interface for distributed computation (multithreading/parallelism on multiple computers). Given the above description there are lot in the FOSS world for each one of these. Basically like a mom cooking and cleaning and taking care of its kid at the same time but doing only one job at the time :) Concurrent or asynchronous is when you have just one computational unit, but it does multiple jobs at the same time, without blocking the processor unconditionally. There is also task parallelism which mostly refers to ruing a task on multiple threads, each processed by a separate CPU core. Parallel computation, mostly used for GPU computing (data paralleism), is when you run massive amount of arithmetic on big arrays, using GPU computational units. It is the way you write the code not necesarily how it is being handled by the computer. For example map function and list comprehension on Python is vectorised computation. Without going much into the details vectorized programing is a way to avoid ugly for-loops. Something you should consider is the difference between vectorized, parallel, concurrent, asynchronous and multithreaded computing. Specifically for SIMULINK alternatives see this post. To see a list of Free and Open Source alternatives to MATLAB-SIMULINK please check its Alternativeto page or my answer here.
