В каких случаях этот алгоритм неэффективен? - PullRequest
1 голос
/ 14 июля 2020

Речь идет о параллельном умножении векторов матриц с помощью нескольких потоков. Строки матрицы будут «разбиты» на блоки максимально близкого размера, так что каждый поток будет умножать примерно на одинаковое количество строк, чтобы программа работала как можно быстрее.

Итак, у меня есть матрица a, количество потоков t, блок строк для каждого потока s, отдельные потоки i и начало блока и конец блока, который поток должен go пройти.

У меня есть этот алгоритм:

01: int s = (int) Math.ceil((double) a.length / t);
02: for (int i = 0; i < t; i++) {
03:   start = i * s;
04:   end = Math.min((i + 1) * s, a.length);
05:   // ... create worker and threads
06: }

a.length - это количество строк, из которых состоит матрица.

Теперь мой вопрос в том, в каких случаях этот алгоритм оказывается неэффективным ... потому что помимо очевидного one (очевидно, что ни один поток не вызывает ошибку из-за деления на 0), у меня есть только один поток с 1 строкой, а другие 7 потоков с 8 строками, если у меня 57 строк и 8 потоков ... но это не было бы больше эффективно, если бы у меня было 7 потоков с 7 строками и один поток с 8 строками, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...