Начнем с немного более простой проблемы. Все ключи - 8 числовых цифр, и у вас 10 машин.
Простой достаточно - одна машина проверяет 0???????
, другая проверяет 1???????
и так далее. Обратите внимание, что эта нарезка не заботится о том, чтобы вы выполняли многопроцессорную обработку - это просто распределение диапазонов путем фиксации одной из цифр.
Ваша версия немного вовлечена. Каждый срез имеет диапазон для первой цифры (и, возможно, второй, может быть, больше, в зависимости от того, насколько вам равны размеры срезов).
Предположим, вам нужны двухсимвольные префиксы. Выполняйте проверки паролей с одним символом, поэтому вам больше не нужно беспокоиться об этом - их недостаточно, чтобы беспокоиться о многопроцессорной обработке.
Затем (по крайней мере, концептуально) вы создадите список двухсимвольных префиксов и разделите этот список.
Что я подразумеваю под «концептуальным»? Имеется 62 допустимых символа (26 прописных букв, 26 строчных букв, 10 цифр). Таким образом, есть 62*62 = 3844
возможных двухсимвольных префиксов. Но вам не нужно перечислять их все, чтобы определить, какой префикс происходит в какой позиции. Если есть пяти процессоров, я хочу, чтобы список префиксов в 5. Таким образом, есть 6 границы между дольками ...
Bound 0 1 2 3 4 5
| | | | | |
Slice | 1 | 2 | 3 | 4 | 5 |
Положения границ в пределах этих 3844 префиксов ...
|-------+------------+--------|
| Bound | Calc | Result |
|-------+------------+--------|
| 0 | (3844*0)/5 | 0 |
| 1 | (3844*1)/5 | 768 |
| 2 | (3844*2)/5 | 1537 |
| 3 | (3844*3)/5 | 2306 |
| 4 | (3844*4)/5 | 3075 |
| 5 | (3844*5)/5 | 3844 |
|-------+------------+--------|
так ломтики ...
|-------+------------------|
| Slice | Indexes |
|-------+------------------|
| 1 | 0 <= i < 768 |
| 2 | 768 <= i < 1537 |
| 3 | 1537 <= i < 2306 |
| 4 | 2306 <= i < 3075 |
| 5 | 3075 <= i < 3844 |
|-------+------------------|
для каждого процессора, чтобы отслеживать, сколько префиксы он обрабатывается до сих пор нет никакой реальной проблемы, но для этого нужно знать, с чего начать, так что нам нужно преобразовать индекс к двухсимвольному префиксу. Предполагая, что вы используете коды от 0 до 61 (62 различных кодов) для нижнего регистра, то в верхнем регистре, то цифры, вот как вы конвертируете для связанного 1 ...
- 768/62 = 12 остаток 24
- Character 12 (с нуля =
a
) является m
- Character 24
y
- приставка два-герой "мой".
Итак, ваш первый кусочек от «аа» до, но не включая «мой». Процессор, имеющий дело с этим, должен просто попробовать любой возможный суффикс, включая пустой суффикс.