Parallel package: Difference between revisions

Jump to navigation Jump to search
1,258 bytes added ,  10 June 2019
m
Remove redundant Category:Packages. Categories at bottom.
m (Remove redundant Category:Packages. Categories at bottom.)
(7 intermediate revisions by 4 users not shown)
Line 8: Line 8:




See also the [[NDpar]] package, for an extension of these functions to N-dimensional arrays
See also the [[NDpar package]], for an extension of these functions to N-dimensional arrays


=== calculation on a single array ===
=== calculation on a single array ===
Line 21: Line 21:
</pre>
</pre>
}}
}}
should output
should output


<code>
<code><pre>
<pre>
parcellfun: 10/10 jobs done
parcellfun: 10/10 jobs done


Line 30: Line 30:


     1    4    9    16    25    36    49    64    81  100
     1    4    9    16    25    36    49    64    81  100
</pre>
</pre></code>
</code>


{{Codeline|nproc}} returns the number of cpus available (number of cores or twice as much with hyperthreading). One can use {{Codeline|nproc - 1}} instead, in order to leave one cpu free for instance.
{{Codeline|nproc}} returns the number of cpus available (number of cores or twice as much with hyperthreading). One can use {{Codeline|nproc - 1}} instead, in order to leave one cpu free for instance.
Line 51: Line 50:
should output
should output


<code>
<code><pre>
<pre>
parcellfun: 4/4 jobs done
parcellfun: 4/4 jobs done
vector_y =
vector_y =


     1    4    9    16    25    36    49    64    81  100
     1    4    9    16    25    36    49    64    81  100
</pre></code>
The {{Codeline|"ChunksPerProc"}} option is mandatory with {{Codeline|"Vectorized", true}}. {{Codeline|1}} means that each proc will do its job in one shot (chunk). This number can be increased to use less memory for instance. A higher number of {{Codeline|"ChunksPerProc"}} allows also more flexibility in case of long calculations on a busy machine. If one cpu has finished all its jobs, it can take over the pending jobs of another.
=== Output in cell arrays ===
The following sample code was an answer to [http://stackoverflow.com/questions/27422219/for-every-row-reshape-and-calculate-eigenvectors-in-a-vectorized-way this question]. The goal was to diagonalize 2x2 matrices contained as rows of a 2d array (each row of the array being a flattened 2x2 matrix).
{{code|diagonalize NxN matrices contained in an array|
<pre>
A = [0.6060168 0.8340029 0.0064574 0.7133187;
0.6325375 0.0919912 0.5692567 0.7432627;
0.8292699 0.5136958 0.4171895 0.2530783;
0.7966113 0.1975865 0.6687064 0.3226548;
0.0163615 0.2123476 0.9868179 0.1478827];
N = 2;
[eigenvectors, eigenvalues] = pararrayfun(nproc,
                                @(row_idx) eig(reshape(A(row_idx, :), N, N)),
                                1:rows(A), "UniformOutput", false)
</pre>
</pre>
</code>
}}
The {{Codeline|"ChunksPerProc"}} option is mandatory with {{Codeline|"Vectorized", true}}. {{Codeline|1}} means that each proc will do its job in one shot (chunk). This number can be increased to use less memory for instance. A higher number of {{Codeline|"ChunksPerProc"}} allows also more flexibility in case of long calculations on a busy machine. If one cpu has finished all its jobs, it can take over the pending jobs of another.
 
With {{codeline|"UniformOutput", false}}, the outputs are contained in cell arrays (one cell per slice). In the sample above, both {{codeline|eigenvectors}} and {{codeline|eigenvalues}} are {{codeline|1x5}} cell arrays.
 
== cluster operation ==
 
Documentation can be found in the {{codeline|README.parallel}} or {{codeline|README.bw}} files, located inside the {{codeline|doc}} directory of the parallel package.
 
[[Category:Octave Forge]]

Navigation menu