Programowanie współbieżne w języku Java
Programowanie współbieżne w języku Java
Programowanie współbieżne w języku Java
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
final double[][] c) {<br />
// check(a,b,c);<br />
final int m = a.length;<br />
final int n = b.length;<br />
final int p = b[0].length;<br />
}<br />
final double[] Bcolj = new double[n];<br />
for (int j = 0; j < p; j++) {<br />
for (int k = 0; k < n; k++) {<br />
Bcolj[k] = b[k][j];<br />
}<br />
for (int i = 0; i < m; i++) {<br />
final double[] Arowi = a[i];<br />
double s = 0;<br />
for (int k = 0; k < n; k++) {<br />
s += Arowi[k] * Bcolj[k];<br />
}<br />
c[i][j] = s;<br />
}<br />
}<br />
// Jama type method which uses several threads<br />
static void threadedMatrixMultiply(final double[][] a, final double[][] b,<br />
final double[][] c, final int numTasks) {<br />
// check(a,b,c);<br />
final int m = a.length;<br />
final int n = b.length;<br />
final int p = b[0].length;<br />
final ExecutorService executor = Executors.newFixedThreadPool(numTasks);<br />
for (int interval = numTasks, end = p, size = (int) Math.ceil(p * 1.0 /<br />
numTasks);<br />
interval > 0; interval--, end -= size) {<br />
final int to = end;<br />
final int from = Math.max(0, end - size);<br />
final Runnable runnable = new Runnable() {<br />
public void run() {<br />
final double[] Bcolj = new double[n];<br />
for (int j = from; j < to; j++) {<br />
for (int k = 0; k < n; k++) {<br />
Bcolj[k] = b[k][j];<br />
}<br />
for (int i = 0; i < m; i++) {<br />
final double[] Arowi = a[i];<br />
double s = 0;<br />
for (int k = 0; k < n; k++) {<br />
s += Arowi[k] * Bcolj[k];<br />
}<br />
c[i][j] = s;<br />
}<br />
}<br />
}<br />
};<br />
executor.execute(runnable);<br />
}<br />
try {<br />
executor.shutdown();<br />
executor.awaitTermination(2, TimeUnit.DAYS); // O(n^3) can take a<br />
while!<br />
} catch (final InterruptedException e) {<br />
System.out.println("Interrupted.");<br />
// empty(c);<br />
}<br />
}<br />
public static void printMatrix(double[][] A, int aRow, int aCol, String<br />
str) {<br />
System.out.println("Matrix " + str + " nRows = " + aRow + " nCols = " +<br />
aCol);<br />
Lab. „<strong>Programowanie</strong> <strong>współbieżne</strong> w <strong>języku</strong> <strong>Java</strong>”<br />
18