Я был первоначально в надежде улучшить на последних ядрах, но мне кажется, что они очень близки к теоретическому пределу, который может поддерживать аппаратное обеспечение.
Мои расчеты следующим образом:
Для «наивных» реализации, которая не использует избыточность ввода, вычисления W [16] через W [63] принимает:
6 гниль
4 исключающее
-Добавить (3 плюс один, если вы включаете в себя добавление в значении K)
Это составляет 14 OPS раз 48 значений или 672 операций
Тогда для раундов сами «наивный» или общий алгоритм требует
6 гниль
4 исключающее
1 Maj ()
1 ч ()
6 добавить (предполагая, что W и К уже добавлены)
В общей сложности 18 OPS раз 64 раундов в общей сложности 1152 операций.
Тогда 8 значения должно быть добавлено в текущих итоги, что занимает больше 8 операций
Итог для одного SHA256 составляет 672 + 1152 + 8 = 1832 операций. Для двойного SHA256, он требует в два раза это, или 3664 операций.
На всех, кроме нескольких карт, каждый потоковый процессор может выполнять до 5 операций за такт. В зависимости от того, насколько умный компилятор, он может получить менее 5 операций за такт. На 6950 и 6970, каждый потоковый процессор может выполнять не более 4 операций за один такт.
У меня есть 6750, который имеет 144 потоковых процессоров, и я часами это на 870 МГц. Значение может выполнять 870M * 144 * 5 = 626,4 млрд алу операций в секунду.
Если я делю эту пропускную способность 626,4 G со стороны 3664 операций, необходимых, я получаю 170.96 MH / с. Сейчас я получаю 165, используя ядро, которое не особенно сложной.
На бумаге, используя избыточность ввода, я думаю, что я могу найти экономию 150 операций из первого расчета круглых W и 75 операций из второго расчета круглых Вт и более 46 операций с первых раундов первого хэша. Добавление 8 значений в текущем итоговых в конце первого хэша может быть объединено в значения K для второго хэша, и в конце второго хэша, они могут быть устранены также. А окончательное значение е может быть пропущено.
Общая экономия для обоих раундах составляет 150 + 75 + 46 + 8 + 8 + 1 = 288, который приносит двойной SHA256 от 3664 вплоть до 3376, что составляет около 7,9 процентов экономии. Я думаю, что современные передовые ядра воспользоваться все или почти все из этих сбережений.
Это означало бы, мои теоретические 626,4 млрд операций будет ограничено 185,5 MH / с.
Это хорошо, потому что это означает, что использование очень хорошо, и это плохо, что есть едва ли возможности для улучшения, не выходя на различное оборудование.