Я написал параллельную MPI-реализацию алгоритма Дейкстры на Java, но этот код медленнее последовательной версии более чем в 10 раз. Путем проверки с помощью таймера я определил, что есть две точки замедления: Scatterv и Allreduce в цикле. Scatterv Piece:
Я написал параллельную MPI-реализацию алгоритма Дейкстры на Java, но этот код медленнее последовательной версии более чем в 10 раз. Путем проверки с помощью таймера я определил, что есть две точки замедления: Scatterv и Allreduce в цикле. [b]Scatterv Piece:[/b] [code]MPI.COMM_WORLD.Scatterv(sendbuf, displs[myrank], sendcounts, displs, MPI.INT, localWeight, 0, sendcounts[myrank], MPI.INT, SOURCE); [/code] [b]Все уменьшаемые детали:[/b] [code]public static void singleSource(int n, int[] wgt, int[] lengths, int[] displs, int myrank) throws MPIException { int nlocal = lengths.length; int firstvtx = displs[myrank]; int lastvtx = firstvtx + nlocal - 1; int[] marker = new int[nlocal];
System.arraycopy(wgt, 0, lengths, 0, nlocal);
Arrays.fill(marker, 1); if (SOURCE >= firstvtx && SOURCE