Вернуться   Биткоин Форум > Разработка и Техническое Обсуждение
5 января 2017, 11:37:48 PM   # 1
 
 
Сообщения: 778
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Взлом Биткоин адресов.
500 Биткоинов взломаны в "мозговом кошельке" с паролем "bitcoin is awesome"
Адрес кошелька: 14NWDXkQwcGN1Pd9fboL8npVynD5SfyJAE
Приватный ключ: 5J64pq77XjeacCezwmAr2V1s7snvvJkuAz8sENxw7xCkikceV6e
подробнее...


Всем кто хочет заработать Биткоины без вложений - рекомендую сайт http://bitcoin-zarabotat.ru
эксплуатируют ли secp256k1 библиотека новые инструкции на процессоре Intel для большого целочисленной арифметики?

https://software.intel.com/en-us/blogs/2014/06/11/optimizing-big-data-processing-with-haswell-256-bit-integer-simd-instructions

http://www.intel.com/content/dam/www/public/us/en/documents/white-papers/ia-large-integer-arithmetic-paper.pdf

arulbero сейчас офлайн Пожаловаться на arulbero   Ответить с цитированием Мультицитирование сообщения от arulbero Быстрый ответ на сообщение arulbero


Как заработать Биткоины?
Без вложений. Не майнинг.


5 января 2017, 11:41:23 PM   # 2
 
 
Сообщения: 1246
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Получил 1806 Биткоинов
Реальная история.





Возможно нет.
achow101 сейчас офлайн Пожаловаться на achow101   Ответить с цитированием Мультицитирование сообщения от achow101 Быстрый ответ на сообщение achow101

6 января 2017, 9:41:44 AM   # 3
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Содержание в первой ссылке, скорее всего, не будет полезным.

Содержание в вашем втором link-- было бы полезно, хотя потенциально не сильно, потому что цепь зависимостей в арифметике рука построена для уменьшения конфликтов. Если кто-то хотел бы попробовать их, это не должно быть очень трудно.

В контексте развития Bitcoin (таким образом, ответ achows'), проверка подписи на самом деле не является ограничивающим фактором в производительности Bitcoin ядра больше в любом случае.
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

6 января 2017, 11:27:40 AM   # 4
 
 
Сообщения: 778
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Проверка подписи на самом деле не является ограничивающим фактором в производительности Bitcoin ядра больше в любом случае.

Я думал, что проверка подписи была самым большим сдерживающим фактором в процессе IBD (очевидно, с медленным процессором). 
arulbero сейчас офлайн Пожаловаться на arulbero   Ответить с цитированием Мультицитирование сообщения от arulbero Быстрый ответ на сообщение arulbero

6 января 2017, 11:36:11 AM   # 5
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Я думал, что проверка подписи была самым большим сдерживающим фактором в процессе IBD (очевидно, с медленным процессором). 
На руке, которая пока еще не используют libsecp256k1 сборки оптимизаций по default-- возможно. В противном случае, нет, не так libsecp256k1 сделали проверку подписи во много раз быстрее. Может быть, на какой-то очень несбалансированной системе с медленным одноядерным процессором и огромным DbCache и быстрой сетью и SSD может быть большинством.
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

8 января 2017, 10:22:21 AM   # 6
 
 
Сообщения: 812
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Я также заинтересован в более быстром secp256k1.

К сожалению, это, кажется, Pieter Wuille и др. не было ни серьезной об обеспечении быстрого secp256k1, ни о его документации хорошо. 

Я сделал некоторые хакерство некоторые довольно основные функции там



- который в одиночку сделал генератор LBC около 10% быстрее в общем и целом -
а затем и изменения field_5x52 кода в secp256k1_fe_set_b32 для

Код:
    р->п [0] = (uint64_t) а [31]
            | (Uint64_t) а [30] << 8
            | (Uint64_t) а [29] << 16
            | (Uint64_t) а [28] << 24
            | (Uint64_t) а [27] << 32
            | (Uint64_t) а [26] << 40
            | (Uint64_t) (а [25] & 0xF)  << 48;

    р->п [1] = (uint64_t) ((а [25] >> 4) & 0xF)
            | (Uint64_t) а [24] << 4
            | (Uint64_t) а [23] << 12
            | (Uint64_t) а [22] << 20
            | (Uint64_t) а [21] << 28
            | (Uint64_t) а [20] << 36
            | (Uint64_t) а [19] << 44;

    р->п [2] = (uint64_t) а [18]
            | (Uint64_t) а [17] << 8
            | (Uint64_t) а [16] << 16
            | (Uint64_t) а [15] << 24
            | (Uint64_t) а [14] << 32
            | (Uint64_t) а [13] << 40
            | (Uint64_t) (а [12] & 0xF) << 48;

    р->п [3] = (uint64_t) ((а [12] >> 4) & 0xF)
            | (Uint64_t) а [11] << 4
            | (Uint64_t) а [10] << 12
            | (Uint64_t) а [9]  << 20
            | (Uint64_t) а [8]  << 28
            | (Uint64_t) а [7]  << 36
            | (Uint64_t) а [6]  << 44;

    р->п [4] = (uint64_t) а [5]
            | (Uint64_t) а [4] << 8
            | (Uint64_t) а [3] << 16
            | (Uint64_t) а [2] << 24
            | (Uint64_t) а [1] << 32
            | (Uint64_t) а [0] << 40;

Я указал на https://github.com/llamasoft/secp256k1_fast_unsafe но я не уверен, что все еще сохраняется / развит.
Есть ли место, где R&D обсуждение дальнейшего развития продолжается? Прежде, чем я хотел бы начать реализовав этот бардак с нуля, я бы предпочел, чтобы участвовать в некоторых "официальная попытка",

Тем не менее, у меня есть небольшая надежда, что будет иметь смысл:

котировка
Проверка подписи на самом деле не является ограничивающим фактором в производительности Bitcoin ядра больше в любом случае.

Вместе с другими операторами из gmaxwell @ GitHub ("это альфа /, не следует ожидать другой DOC шань источник .." - что-то подобное из памяти) Я вижу, что, кажется, не много мотивации в дальнейшем развитии от "официальная сторона",


Рико
rico666 сейчас офлайн Пожаловаться на rico666   Ответить с цитированием Мультицитирование сообщения от rico666 Быстрый ответ на сообщение rico666

8 января 2017, 11:41:37 AM   # 7
 
 
Сообщения: 1442
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Я также заинтересован в более быстром secp256k1.

Я фальсификация с ассемблере немного, и было немного удачи, особенно в скалярной производительности путем объединения различных этапов в одну функцию, однако не отметить, что это только НКУ (лязг были некоторые проблемы с использованием рши / RDI на ручной встраиваются функции и работать вокруг него один должен двигаться риши или RDI в какой-то XMM регистра и восстановить его, прежде чем функция заканчивается - которая добавляет несколько циклов)

https://github.com/Alex-GR/secp256k1/blob/master/src/scalar_4x64_impl.h
https://github.com/Alex-GR/secp256k1/blob/master/src/field_5x52_asm_impl.h

В 5x52 ассемблере я нашел 2-3%, просто делать то, что процессор планировщик должен делать и выдавать вместе добавляет + мул (ЦП целочисленного блок обычно имеет одну надстройки и один мул блока и в идеале мы хотим, чтобы использовать их в том же время).

Например:

/ * D + = а3 * b1 * /
    "MOVQ 8 (%% RBX), %% Rax \ п"
    "mulq %% r13 \ п"
    "addq %% Ракс, %% RCX \ п"
    "adcq %% RDX, %% r15 \ п"
    / * D + = а2 * b2 * /
    "MOVQ 16 (%% RBX), %% Rax \ п" <=== это должно быть перемещено вверх
    "mulq %% r12 \ п"

будет выглядеть так:

/ * D + = а3 * b1 * /
    "MOVQ 8 (%% RBX), %% Rax \ п"
    "mulq %% r13 \ п"
    "addq %% Ракс, %% RCX \ п"
    "MOVQ 16 (%% RBX), %% Rax \ п"
    "adcq %% RDX, %% r15 \ п"
    / * D + = а2 * b2 * /
    "mulq %% r12 \ п"

Таким образом, adcq + mulq выпускаются вместе в мул и добавить единицы процессора соответственно. (Редактирование, видимо, мул + добавить находятся в SIMD блока, в целой части это всего 3 целых единиц ожидания делать параллельную работу любого вида - за исключением загрузки / магазина, который 2 в то время). Я сбит с толку о том, почему процессор планировщик не уже делал это, но потом снова у меня есть старший центральный процессор (core2 четырехъядерный / 45nm), чтобы играть с - это не может быть проблема с современными.

Кроме того, из трех временных переменных, используемых для хранения темпа в поле ассемблера, некоторые из них могут быть устранены путем перестановки Кодекса немного, и, таким образом, уменьшая пару доступа к памяти.

(П.с. я не претендую код является безопасным. - Я только использовал его для тестов и испытания встроенных)

Один вопрос, я о secp256k1 ли эндоморфизм является безопасным, и если да, то не должен он быть включен в Bitcoin строит, если это быстрее (тесты показывают, что это такое)?
AlexGR сейчас офлайн Пожаловаться на AlexGR   Ответить с цитированием Мультицитирование сообщения от AlexGR Быстрый ответ на сообщение AlexGR

8 января 2017, 1:14:55 PM   # 8
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Оригинальный secp256k1 Lib является большой кусок работы, но она, безусловно, может быть улучшена еще больше.

Любые оптимизации очень приветствуются - Я уверен, что СИПА (оригинальный автор) был бы согласен. Он очень хороший парень, и это легко связаться с ним напрямую (вероятно, лучше всего через IRC). Хотя, о коде, используемом в ядре, он, вероятно, скажет вам, что это поддерживается другими людьми в настоящее время.

В противном случае, просто опубликовать ваши улучшения здесь - даже если не Bitcoin ядро, кто-то будет использовать их, поверьте мне, потому что время это деньги
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

9 января 2017, 11:50:01 AM   # 9
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Я также заинтересован в более быстром secp256k1.

К сожалению, это, кажется, Pieter Wuille и др. не было ни серьезной об обеспечении быстрого secp256k1, ни о его документации хорошо.  

Вы можете показать другую библиотеку для одного приложения в пределах фактора _five_ спектакля? Или с более чем 1/5-сдаточной документации?

Я просто ... у себя на свой комментарий, это даже не обидно: это просто слишком абсурдно.

котировка
- который в одиночку сделал генератор LBC около 10% быстрее в общем и целом -
а затем и изменения field_5x52 кода в secp256k1_fe_set_b32 для
Спасибо, что функция не критичная к производительности во что библиотека была предназначена для ... например, не brainwallet трещин. Но сделать это быстрее будет хорошо.

Вы могли заметить, что постоянная распаковка макрос делает эффективно то же самое: https://github.com/bitcoin-core/secp256k1/blob/master/src/field_5x52.h#L22 но это слово в то время.

При открытии PR на функцию, вы должны добавить его в bench_internal тестах, как вы идете.

котировка
Есть ли место, где R&D обсуждение дальнейшего развития продолжается? Прежде, чем я хотел бы начать повторно реализующий этот бардак с нуля, я бы предпочел, чтобы участвовать в некоторых "официальная попытка",

то же самое место, это всегда было https://github.com/bitcoin-core/secp256k1/

котировка
Тем не менее, у меня есть небольшая надежда, что будет иметь смысл:
котировка
Проверка подписи на самом деле не является ограничивающим фактором в производительности Bitcoin ядра больше в любом случае.
... только потому, что что-то не является ограничивающим фактором не является основанием для ее улучшения.


котировка
Вместе с другими операторами из gmaxwell @ GitHub ("это альфа /, не следует ожидать другой DOC шань источник .." - что-то подобное из памяти) Я вижу, что, кажется, не много мотивации в дальнейшем развитии от "официальная сторона",
Незаинтересованность ложки кормления людей, которые звучат как хотят воры, которые кражи бы испугать простые человек от Bitcoin и которых даже не потрудилась RTFM (там было довольно подробная документация для библиотеки в течение многих лет) не свидетельствуют об отсутствии интереса к дальнейшему развитию.

Любые оптимизации очень приветствуются - Я уверен, что СИПА (оригинальный автор) был бы согласен. Он очень хороший парень, и это легко связаться с ним напрямую (вероятно, лучше всего через IRC). Хотя, о коде, используемом в ядре, он, вероятно, скажет вам, что это поддерживается другими людьми в настоящее время.
Ну, что?


В 5x52 ассемблере я нашел 2-3%, просто делать то, что процессор планировщик должен делать и выдавать вместе добавляет + мул (ЦП целочисленного блок обычно имеет одну надстройки и один мул блока и в идеале мы хотим, чтобы использовать их в том же время).
Потрясающие! Реципиенты Добро пожаловать!

Один вопрос, я о secp256k1 ли эндоморфизм является безопасным, и если да, то не должен он быть включен в Bitcoin строит, если это быстрее (тесты показывают, что это такое)?
Это потенциально запатентовать обременено еще пару лет, ограничивая его экспериментальное использование.

котировка
Таким образом, adcq + mulq выпускаются вместе с мул и добавить единицы процессора соответственно. Я сбит с толку о том, почему процессор планировщик не уже делал это, но потом снова у меня есть старший центральный процессор (core2 четырехъядерный / 45nm), чтобы играть с - это не может быть проблема с современными.
Как правило, новые процессоры работают лучше, но производительность и более важная на старых (и в-порядке процессорах, как атомы), так как они медленнее, чтобы начать с.
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

13 января 2017, 9:55:40 AM   # 10
 
 
Сообщения: 812
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Вы можете показать другую библиотеку для одного приложения в пределах фактора _five_ спектакля? Или с более чем 1/5-сдаточной документации?

Я просто ... у себя на свой комментарий, это даже не обидно: это просто слишком абсурдно.

Хорошо. Мы, кажется, живут в разных мирах, то, каждый из другого мира кажущегося абсурдным другой.

Я, например, найти ваш "аргумент" запрашивающего, чтобы показать другую библиотеку делать то же самое с 5 перфорация 1/5 Docs довольно абсурдным. Это как утверждают, что ничего в мире по определению не может сосать, когда нет ничего другого, что сосет меньше. Действительно абсурдно.

котировка
Вы могли заметить, что постоянная распаковка макрос делает эффективно то же самое: https://github.com/bitcoin-core/secp256k1/blob/master/src/field_5x52.h#L22 но это слово в то время.

Нет у меня нет, потому что чтение secp256k1 кода является одним из основных PITA, но спасибо за указатель. Это колесо, вероятно, будет следующей вещью, которую я заново.

котировка
При открытии PR на функцию, вы должны добавить его в bench_internal тестах, как вы идете.

Что такое PR? Пресс-релиз? Ах. тянуть запрос я полагаю. Вы предполагаете слишком много. Например. что весь мир работает на - или - мерзавец.

котировка
котировка
Есть ли место, где R&D обсуждение дальнейшего развития продолжается? Прежде, чем я хотел бы начать повторно реализующий этот бардак с нуля, я бы предпочел, чтобы участвовать в некоторых "официальная попытка",

то же самое место, это всегда было https://github.com/bitcoin-core/secp256k1/

Если это "обсуждение" место, не удивительно, что я не видел его. Srsly?

котировка
Незаинтересованность ложки кормления людей, которые звучат как хотят воры, которые кражи бы испугать простые человек от Bitcoin и которых даже не потрудилась RTFM (там было довольно подробная документация для библиотеки в течение многих лет) не свидетельствуют об отсутствии интереса к дальнейшему развитию.

Мой дорогой молодой gmaxwell: Очевидно, после того, как вы сделали кропотливую работу открытие PR, протестированные код в процессе переформатирования в худшую сторону, но переназначения его к лучшему, узнал и сказал, что мой код 6-7 заказов величины быстрее, чем исходный код (и я в первую очередь не C хакера) ... у вас есть мужество, чтобы использовать термин "хочу-быть" при решении любого из ваших текстов ко мне?

Не говоря уже о том, что был такой чрезвычайно неоптимальным код в течение столь длительного времени должен научить вас что-то. Позвольте мне заверить вас, ваше восприятие ситуации здесь перекос в лучшем случае. Из того, что я вижу в secp256k1 Lib, коллектив, который сделал свою работу хорошие программисты с потенциалом. Мотивированный, молодой, неопытный, но потенциал.

Если это не было для хобби проекта LBC моих, я бы никогда не смотрел в беспорядке, который является secp256k1 библиотекой. Я сделал и я. Вам не нравится комментарий, может быть, чувствует, что это оскорбительное, озадачивают или абсурдные. Хорошо. У меня есть большие надежды, что, прежде чем вы находитесь в середине 40ties вы поймете, что мой комментарий был о. Как я сказал: "потенциал",

Рационализация плохого состояния проекта с открытым исходным кодом является то, что я наткнулся в мире Linux, так как 90ties. Для меня ваши заявления не являются ни новыми, ни оригинальными. Так что если вы - нибудь - прийти к выводу, что вы могли бы привлечь определенный род программист, когда программное обеспечение с открытым исходным кодом достигает определенного рода качества, было бы набухают. Позвольте мне сказать вам, что это не про "ложка для кормления людей, которые звучат как Wanna воров", Речь идет о подготовке почвы для людей, которые, возможно, в два раза своего опыта и в противном случае насмехаться над проектом.

Без обид - ОФК.

Рико
rico666 сейчас офлайн Пожаловаться на rico666   Ответить с цитированием Мультицитирование сообщения от rico666 Быстрый ответ на сообщение rico666

13 января 2017, 11:54:48 AM   # 11
 
 
Сообщения: 812
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Один вопрос, я о secp256k1 ли эндоморфизм является безопасным, и если да, то не должен он быть включен в Bitcoin строит, если это быстрее (тесты показывают, что это такое)?

Я не думаю, что патенты являются какими-либо проблемами с кодом эндоморфизмов. Сам код является проблемой. Не знаете, что контрольные показатели вы имеете в виду, но если я (очень грубый) смотреть на исходные данные по моей системе, USE_ENDOMORPHISM ничего вы хотели бы включить:

Код:
Время для испытаний:

GCC версии 6.3.1 20170109 (GCC)

1) -g -O2 CFLAGS
реальные 0m14.365s
0m14.357s пользователей
SYS 0m0.007s

2) CFLAGS -O3 -march = sklake
реальные 0m13.549s
0m13.547s пользователей
SYS 0m0.000s

3) CFLAGS -O3 -march = sklake & USE_ENDOMORPHISM 1
реальные 0m15.660s
0m15.660s пользователей
SYS 0m0.000s

4) -g -O2 CFLAGS & USE_ENDOMORPHISM 1
реальные 0m16.139s
0m16.137s пользователей
SYS 0m0.000s

5) -g -O2 CFLAGS & UNDEF USE_ASM_X86_64
реальные 0m14.849s
0m14.847s пользователей
SYS 0m0.000s

6) CFLAGS -O3 -march = sklake & UNDEF USE_ASM_X86_64
реальные 0m14.520s
0m14.517s пользователей
SYS 0m0.000s

Так что да, говядина, кажется, в лучшем ассемблерном коде и канавы эндоморфизма.
На современных процессорах, канавы, что старый GCC тоже и использовать -O3 (забыть то, что вы слышали об этом в последние годы).

Рико
rico666 сейчас офлайн Пожаловаться на rico666   Ответить с цитированием Мультицитирование сообщения от rico666 Быстрый ответ на сообщение rico666

13 января 2017, 12:30:47 PM   # 12
 
 
Сообщения: 1442
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Один вопрос, я о secp256k1 ли эндоморфизм является безопасным, и если да, то не должен он быть включен в Bitcoin строит, если это быстрее (тесты показывают, что это такое)?

Я не думаю, что патенты являются какими-либо проблемами с кодом эндоморфизмов. Сам код является проблемой. Не знаете, что контрольные показатели вы имеете в виду, но если я (очень грубый) смотреть на исходные данные по моей системе, USE_ENDOMORPHISM ничего вы хотели бы включить:

Код:
Время для испытаний:

GCC версии 6.3.1 20170109 (GCC)

1) -g -O2 CFLAGS
реальные 0m14.365s
0m14.357s пользователей
SYS 0m0.007s

2) CFLAGS -O3 -march = sklake
реальные 0m13.549s
0m13.547s пользователей
SYS 0m0.000s

3) CFLAGS -O3 -march = sklake & USE_ENDOMORPHISM 1
реальные 0m15.660s
0m15.660s пользователей
SYS 0m0.000s

4) -g -O2 CFLAGS & USE_ENDOMORPHISM 1
реальные 0m16.139s
0m16.137s пользователей
SYS 0m0.000s

5) -g -O2 CFLAGS & UNDEF USE_ASM_X86_64
реальные 0m14.849s
0m14.847s пользователей
SYS 0m0.000s

6) CFLAGS -O3 -march = sklake & UNDEF USE_ASM_X86_64
реальные 0m14.520s
0m14.517s пользователей
SYS 0m0.000s

Так что да, говядина, кажется, в лучшем ассемблерном коде и канавы эндоморфизма.
На современных процессорах, канавы, что старый GCC тоже и использовать -O3 (забыть то, что вы слышали об этом в последние годы).

Рико


Есть 3 тесты

bench_internal
bench_verify
bench_sign

которые построены ./configure --enable-бенчмарка

Что касается разницы в скорости испытания, возможно, придется делать с некоторыми линиями в tests.c, которые указывают на разное количество раундов (плюс тесты для эндоморфизму), если Эндоморфизм включен.

Встроенная программу с эндоморфизмом (./configure --enable-эндоморфизмы) и доложить с результатами, должно быть быстрее.
AlexGR сейчас офлайн Пожаловаться на AlexGR   Ответить с цитированием Мультицитирование сообщения от AlexGR Быстрый ответ на сообщение AlexGR

13 января 2017, 1:34:34 PM   # 13
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Это не было «коллективным».
Sipa написал целую библиотеку, с нуля, все сам.
Ребята просто взял свой код, добавив некоторые довольно бесполезные проверки и тяжелую строительную систему вокруг него, и теперь это «официально» принимал от Bitcoin / secp256k1, как «проект сообщества». Это означает, что если вы хотите изменить какие-либо немного там, вы должны играть Bitcoin знаменитости PR игры, которая в основном о endulging большого самомнения нескольких забавных персонажей.

Но если вы посмотрите историю ГАРО / secp256k1 вы можете увидеть, что он используется для довольно легко совершить оптимизации в этот код.

Все это было сделано одним человеком в качестве его личного, частично экспериментальный проект, и я лично восхищаюсь работой.
И вы не можете всерьез ожидать от и кодера работать над своим личнымами хобби проектом, а затем доставить его с документацией отраслевых стандартов.
Какую документацию вы бы даже ожидать от Lib, который обеспечивает простой EC математические функции? Имена функций достаточно описательные, если вы понимаете, операции, которые они предоставляют. И если вы не понимаете, математике за ней, то ни один документ не будет в любом случае, чтобы помочь вам.
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

13 января 2017, 6:13:06 PM   # 14
 
 
Сообщения: 812
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

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

Зависит от кодировщика - я думаю. Пока у меня есть интерес к моему хобби проекта, я хочу, чтобы быть совершенным. Я, например, нет никаких проблем, чтобы признать, что мои проекты LBC все еще сосет плохо во многих местах прямо сейчас. Я намерен улучшить. Документация, простота использования, скорость, один из них, чтобы получить достойную производительность EC на GPU - именно поэтому я смотрю в это вообще.
 
котировка
Какую документацию вы бы даже ожидать от Lib, который обеспечивает простой EC математические функции? Имена функций достаточно описательные, если вы понимаете, операции, которые они предоставляют. И если вы не понимаете, математике за ней, то ни один документ не будет в любом случае, чтобы помочь вам.

Ну - для меня имена довольно плохо.  "secp256k1_fe_cmov" * Большие пальцы * Но не только это. Структуры данных довольно боком тоже. На самом деле я понимаю математику очень хорошо, поэтому я так озадачен, что я вижу - все еще не уверен, если Lib серьезно делать то, что я думаю, что это делает. Я не думаю, что человек, который написал это на самом деле заботиться о производительности - он, наверное, просто хотелось чего-то, что сосала меньше.

Sipa вы говорите? Почему он отказаться от этого проекта? Было ли это только некоторые доказательства работы?


Рико
rico666 сейчас офлайн Пожаловаться на rico666   Ответить с цитированием Мультицитирование сообщения от rico666 Быстрый ответ на сообщение rico666

13 января 2017, 6:35:04 PM   # 15
 
 
Сообщения: 812
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Есть 3 тесты

bench_internal
bench_verify
bench_sign

которые построены ./configure --enable-бенчмарка

Что касается разницы в скорости испытания, возможно, придется делать с некоторыми линиями в tests.c, которые указывают на разное количество раундов (плюс тесты для эндоморфизму), если Эндоморфизм включен.

Встроенная программу с эндоморфизмом (./configure --enable-эндоморфизмы) и доложить с результатами, должно быть быстрее.

Хорошо - я сделал.

bench_verify показывает ускорение с эндоморфизму

ecdsa_verify: мин 42.0us / ср / макс 42.2us 43.0us (с)
ecdsa_verify: мин 57.7us / ср / макс 57.8us 58.4us (без)

bench_internal не показывает никаких улучшений (в пределах допуска меры), за исключением одного:

wnaf_const: мин 0.0887us / ср / макс 0.0920us 0.102us (с)
wnaf_const: мин 0.155us / ср / макс 0.161us 0.171us (без)

Я сомневаюсь, что это вызовет ускорение сверху.


Рико
rico666 сейчас офлайн Пожаловаться на rico666   Ответить с цитированием Мультицитирование сообщения от rico666 Быстрый ответ на сообщение rico666

13 января 2017, 9:46:57 PM   # 16
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel


Sipa вы говорите? Почему он отказаться от этого проекта? Было ли это только некоторые доказательства работы?

Доказательство работы, которые уже нашли так много приложений, в том числе один в вашем проекте. Я думаю, вы можете назвать это, как вам нравится.

Я его не знаю и не могу говорить за него, но я бы не сказал, что он отказался от нее. Скорее решил, что было достаточно полно и перешел на его жизнь, как мы делаем все время. Даже Satoshi сделал это с его большим проектом.
И вы тоже не будете работать над одним проектом всей своей жизнью, вы?
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

13 января 2017, 10:12:09 PM   # 17
 
 
Сообщения: 1778
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Там нет никаких сомнений, что в secp256k1 Lib этого момента SIPA является самым быстрым решением на рынке.

И вы можете жаловаться все, что вы хотите о грязном кодировании или плохой документации, но если вам не даете альтернативу, чтобы доказать, что это может быть сделано намного лучше ... ну, то это просто будет стонать.

И только стоны не очень профессионально.

Sipa не пошел OpenSSL форум говоря, как хреново их осуществление - он только что сделал лучше один, чтобы доказать точку. И он доказал это настолько хорошо, что теперь никто не мешает сделать усилие в его избивать.
piotr_n сейчас офлайн Пожаловаться на piotr_n   Ответить с цитированием Мультицитирование сообщения от piotr_n Быстрый ответ на сообщение piotr_n

14 января 2017, 8:21:41 AM   # 18
 
 
Сообщения: 812
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Там нет никаких сомнений, что в secp256k1 Lib этого момента SIPA является самым быстрым решением на рынке.

И вы можете жаловаться все, что вы хотите о грязном кодировании или плохой документации, но если вам не даете альтернативу, чтобы доказать, что это может быть сделано намного лучше ... ну, то это просто будет стонать.

И только стоны не очень профессионально.

Странный. Я был под впечатлением, что

Код:
field_get_b32: мин 0.647us / ср / макс 0.666us 0.751us
field_set_b32: мин 0.551us / ср / макс 0.571us 0.624us

становится

field_get_b32: мин 0us / ср 0.0000000477us / макс 0.000000238us
field_set_b32: мин 0us / ср 0.0000000238us / макс 0.000000238us

позволил мне крошечное немного постанывая.


Рико
rico666 сейчас офлайн Пожаловаться на rico666   Ответить с цитированием Мультицитирование сообщения от rico666 Быстрый ответ на сообщение rico666

14 января 2017, 3:14:27 PM   # 19
 
 
Сообщения: 2366
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Странный. Я был под впечатлением, что

позволил мне крошечное немного постанывая.
Это тривиальная оптимизация, которая уже существует в трех других местах в коде. Спасибо за заметив, что она не была выполнена там, и предоставления кода для одного из двух мест необходимо улучшить, но приходит on-- вы просто сделать себе выглядеть глупо здесь с грубым отношением, пока вы ясно довольно невежественны о том, что вы говорите в целом. Дело в точке:

Endormorphism делает проверку и ECDH существенно Быстрее. Это не что-нибудь еще за дополнительными испытания, связанные с эндоморфизмами не делать.  

Это не делает поколение Публичного быстрее и на самом деле не может (ну это можно было бы использовать с некоторым усилием, чтобы сократить вдвое размер таблиц в памяти при небольшой потере производительности.).

Это немного абсурдно, что вы оскорбляете на ~ 27% увеличение производительности до проверки в то время как хвастовство об изменении под полпроцента к выполнению проверки. Мне кажется, что вы пытаетесь компенсировать невежество, оскорбляя много, это может обмануть несколько людей, которые просто не знают много anything--, но не кто-либо другой. И это мешает вам учиться. Я думаю, что хочу-быть применимо, в лопатами, и если вы продолжаете с таким отношением он будет, вероятно, продолжать делать это.

котировка
Я не думаю, что человек, который написал это сделал на самом деле заботиться о производительности.

И опять же, я прошу you-- предложить что-то другое подобное с 1 / пятые так быстро, 1/5, а также documented-- я также мог бы добавить 1/5-е, а также тестирование? Я не знаю ничего.

котировка
Нет у меня нет, потому что чтение secp256k1 кода является одним из основных PITA, но спасибо за указатель.

Странно слышать, что, так как код libsecp256k1 получил много положительных откликов о его ясности и происхождении. Один исследователь описал его как чистейшее производство ECC код, который он читал.

Стиль предпочтения отличаются, конечно, - давайте посмотрим, что ваш собственный код выглядит

HTTP: // FTP: //ftp.cryptoguru.org/LBC/client/LBC

 <мерцать> <мерцать>

Это не было «коллективным».
Sipa написал целую библиотеку, с нуля, все сам.
Это далеко от точной истории, но это не matter-- Питер сделал делать lionshare работы, но он не сделал это в одиночку. Но не повезло, где ваше внутреннее воображение продолжается, и вы пишете:

котировка
Это означает, что если вы хотите изменить какие-либо немного там, вы должны играть Bitcoin знаменитости PR игры, которая в основном о потакании большого эго несколько забавных персонажей.
Что это просто то, что вы просто сделать вверх. И это прискорбно, потому что, если другие люди читают это и не знаю, что вы Экстраполяция на основе вашего воображения и страхов они не могли бы внести свой вклад, где они в противном случае могли бы. Это делает мир медвежью услугу.

котировка
И вы не можете всерьез ожидать от и кодера работать над своим личнымами хобби проектом, а затем доставить его с документацией отраслевых стандартов.
Какую документацию вы бы даже ожидать от Lib, который обеспечивает простой EC математические функции? Имена функций достаточно описательные, если вы понимаете, операции, которые они предоставляют. И если вы не понимаете, математике за ней, то ни один документ не будет в любом случае, чтобы помочь вам.

Но что странно, что она _extensively_ документированы.

Например. выше rico666 прокомментировал secp256k1_fe_cmov - даже если кто-то достаточно предмета и условные обозначения, используемые несведущему не сразу знать, что эта функция выполняется условный переход от элемента поля или программирования достаточно, чтобы не знать, что условный шаг был; Там есть документация (В данном случае, по-видимому, добавленные мной):

Код:
/ ** Если флаг верно, установите * г равно * а; В противном случае оставьте это. Постоянное время. * /
статической силы secp256k1_fe_cmov (secp256k1_fe * г, Const secp256k1_fe * а, Int флаг);

... несмотря на то, что это чисто внутренний код и не доступен конечному пользователю библиотеки.
gmaxwell сейчас офлайн Пожаловаться на gmaxwell   Ответить с цитированием Мультицитирование сообщения от gmaxwell Быстрый ответ на сообщение gmaxwell

14 января 2017, 3:54:56 PM   # 20
 
 
Сообщения: 1442
Цитировать по имени
цитировать ответ
по умолчанию Re: secp256k1 библиотеки и процессор Intel

Есть 3 тесты

bench_internal
bench_verify
bench_sign

которые построены ./configure --enable-бенчмарка

Что касается разницы в скорости испытания, возможно, придется делать с некоторыми линиями в tests.c, которые указывают на разное количество раундов (плюс тесты для эндоморфизму), если Эндоморфизм включен.

Встроенная программу с эндоморфизмом (./configure --enable-эндоморфизмы) и доложить с результатами, должно быть быстрее.

Хорошо - я сделал.

bench_verify показывает ускорение с эндоморфизму

ecdsa_verify: мин 42.0us / ср / макс 42.2us 43.0us (с)
ecdsa_verify: мин 57.7us / ср / макс 57.8us 58.4us (без)

bench_internal не показывает никаких улучшений (в пределах допуска меры), за исключением одного:

wnaf_const: мин 0.0887us / ср / макс 0.0920us 0.102us (с)
wnaf_const: мин 0.155us / ср / макс 0.161us 0.171us (без)

Я сомневаюсь, что это вызовет ускорение сверху.

Рико


Я выложу здесь 2 версии /src/field_5x52_asm_impl.h что я вроде взломаны, один с использованием памяти, другие регистры XMM.

Комментарий не хорошо, потому что это не уровень производства - просто дурачиться * с потоком данных, так что данные получают от одного конца к другому быстрее, с меньшим количеством отпечатком кода. Я никогда не был им работать на что-нибудь рядом с моим Q8200, и я задаюсь вопросом о поведении современных процессоров. Я был бы признателен, если вы (или кто-либо другой) можно запустить тест (базовый) + эти 2, и, возможно, время ./tests как более реальной производительности.

Если я делаю ./time тестов, как работать быстрее с помощью второго (58.2 секунд с базовым эндоморфизмом до 57,2 секунд в моем пониженном Q8200 @ 1.86gz), хотя версия памяти кажется быстрее в тестах. У меня есть теория о том, почему версия XMM засасывает в тестах (контекст OS переключается является более дорогим и сохранение набора XMM рег?), Но нижняя линия, кажется, быстрее, чем базовый, делая приуроченный испытательный пробег (более реальных приложения ) ... с точки зрения безопасности, я бы не хотел, чтобы данные торчать на XMM регистров, хотя.

(* То, что я хотел сделать, это уменьшить размер опкод, количество команд и обращений к памяти за счет сокращения числа временных переменных от 3 до 2 или 1, в то время как перемежения мулов с добавляет).


Версия 1 - нормальный / память:

Код:
/ ************************************************* *********************
 * Copyright (с) 2013-2014 Diederik Хьюс, Pieter Wuille *
 * Распространяется под лицензией MIT, см сопутствующая *
 * Файл КОПИРОВАНИЕ или http://www.opensource.org/licenses/mit-license.php.*
 ************************************************** ******************** /

/ **
 * Changelog:
 * - март 2013, Diederik Хьюс: оригинальная версия
 * - ноябрь 2014, Питер Wuille: обновлен для использования параллельного алгоритма умножения Питера Dettman в
 * - декабрь 2014, Питер Wuille: преобразован из Yasm в GCC встроенного ассемблера
 * /

#ifndef _SECP256K1_FIELD_INNER5X52_IMPL_H_
#define _SECP256K1_FIELD_INNER5X52_IMPL_H_

SECP256K1_INLINE статической силы secp256k1_fe_mul_inner (uint64_t * г, Const uint64_t * а, Const uint64_t * SECP256K1_RESTRICT б) ТХ (%% r15) * /
    "shlq $ 4, %% RDX \ п"
    "ORQ %% Ракс, %% RDX \ п"
    / * С + = и0 * (R >> 4) * /
    "MOVQ $ 0x1000003d1, %% Ракс \ п"
    "mulq %% RDX \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% RCX \ п"
    / * R [0] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Ракс, 0 (%% RDI) \ п"
    / * С >>= 52 * /
    "MOVQ 0 (%% RBX) %% Ракс \ п"
    "shrdq $ 52, RCX %%, %% r8 \ п"
    "исключающее %% ECX, %% ECX \ п"
    / * С + = a1 * b0 * /
    "mulq %% r11 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ 8 (%% RBX), %% Rax \ п"
    "adcq %% RDX, %% RCX \ п"
    / * С + = а0 * b1 * /
    "mulq %% r10 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ 16 (%% RBX), %% Rax \ п"
    "adcq %% RDX, %% RCX \ п"
    / * D + = а4 * b2 * /
    "mulq %% r14 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ 24 (%% RBX), %% Rax \ п"
    "adcq %% RDX, %% рши \ п"
    / * = D + а3 * b3 * /
    "mulq %% r13 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ 32 (%% RBX), %% Rax \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = а2 * b4 * /
    "mulq %% r12 \ п"
    "addq %% Ракс, %% г9 \ п"
    "adcq %% RDX, %% рши \ п"
    / * С + = (г & МИСТЕР */
    "MOVQ %% г9, %% Ракс \ п"
    "MOVQ $ 0x1000003d10, %% RDX \ п"
    "andq %% r15, %% Ракс \ п"
    "mulq %% RDX \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% RCX \ п"
    / * Д >>= 52 * /
    "shrdq $ 52, риши %%, %% г9 \ п"
    / * R [1] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Rax, 8 (%% RDI) \ п"
    / * С >>= 52 * /
    "MOVQ 0 (%% RBX) %% Ракс \ п"
    "shrdq $ 52, RCX %%, %% r8 \ п"
    "исключающее %% ECX, %% ECX \ п"
    / * С + = а2 * b0 * /
    "mulq %% r12 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ 8 (%% RBX), %% Rax \ п"
    "adcq %% RDX, %% RCX \ п"
    / * С + = a1 * b1 * /
    "mulq %% r11 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ 16 (%% RBX), %% Rax \ п"
    "adcq %% RDX, %% RCX \ п"
    / * С + = а0 * б2 (последнее использование %% r10 = а0) * /
    "mulq %% r10 \ п"
    "addq %% Ракс, %% r8 \ п"
    / * Получить t3 (%% r10, перезаписывает а0), t4 (%% r15) * /
    "MOVQ 24 (%% RBX), %% Rax \ п"
    "adcq %% RDX, %% RCX \ п"
    / * D + = а4 * b3 * /
    "mulq %% r14 \ п"
    "MOVQ% q1, %% r10 \ п"
    "исключающее %% еси, %% еси \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ 32 (%% RBX), %% Rax \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = а3 * b4 * /
    "mulq %% r13 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ $ 0x1000003d10, %% r11 \ п"
    "adcq %% RDX, %% рши \ п"
    / * С + = (г & МИСТЕР */
    "MOVQ %% г9, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "mulq %% r11 \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% RCX \ п"
    / * Д >>= 52 (%% г9 только) * /
    "shrdq $ 52, риши %%, %% г9 \ п"
    / * R [2] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ% q2, %% рши \ п"
    "MOVQ %% Rax, 16 (%% RDI) \ п"
    / * С >>= 52 * /
    "shrdq $ 52, RCX %%, %% r8 \ п"
    / * С + = t3 * /
    "исключающее %% ECX, %% ECX \ п"
    "MOVQ %% г9, %% Ракс \ п"
    "addq %% r10, %% r8 \ п"
    / * = С + d * R * /
    "mulq %% r11 \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% RCX \ п"
    / * R [3] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Rax, 24 (%% RDI) \ п"
    / * С >>= 52 (%% r8 только) * /
    "shrdq $ 52, RCX %%, %% r8 \ п"
    / * С + = t4 (только %% r8) * /
    "addq %% риши, %% r8 \ п"
    / * Г [4] = C * /
    "MOVQ %% r8,32 (%% RDI) \ п"
: "+ S"(А), "= м"(Tmp1), "= м"(Tmp2)
: "б"(Б), "D"(р)
: "% Ракс", "% RCX", "% RDX", "% r8", "% г9", "% r10", "% r11", "% r12", "% r13", "% r14", "% r15", "куб.см", "Память");


SECP256K1_INLINE статической силы secp256k1_fe_sqr_inner (uint64_t * г, Const uint64_t * а) ТХ (%% рши) * /
    "shlq $ 4, %% RDX \ п"
    "ORQ %% r15, %% RDX \ п" / * Q3 - R15 ВОЗВРАЩАЕТСЯ * /
    / * С + = и0 * (R >> 4) * /
    "MOVQ $ 0x1000003d1, %% Ракс \ п"
    "MOVQ $ 0xfffffffffffff, %% r15 \ п" / * R15 на место * /
    "mulq %% RDX \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% г9 \ п"    
    / * R [0] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Ракс, 0 (%% RDI) \ п"
    / * С >>= 52 * /
    "shrdq $ 52, %% г9, %% r8 \ п"
    "xorq %% г9, %% г9 \ п"
    / * * А0 = 2 * /
    "addq %% r10, %% r10 \ п"
    / * С + = a0 * a1 * /
    "MOVQ %% r10, %% Ракс \ п"
    "mulq %% r11 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ %% r12, %% Ракс \ п"
    "adcq %% RDX, %% г9 \ п"
    / * D + = а2 * а4 * /
    "mulq %% r14 \ п"
    "addq %% Ракс, %% RBX \ п"
    "MOVQ %% r13, %% Ракс \ п"
    "adcq %% RDX, %% RCX \ п"
    / * = D + а3 * a3 * /
    "mulq %% r13 \ п"
    "addq %% Ракс, %% RBX \ п"
    "adcq %% RDX, %% RCX \ п"
    / * С + = (г & МИСТЕР */
    "MOVQ %% RBX, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ $ 0x1000003d10, %% RDX \ п"
    "mulq %% RDX \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% г9 \ п"
    / * Д >>= 52 * /
    "shrdq $ 52, %% RCX, %% RBX \ п"
    "исключающее %% ECX, %% ECX \ п"
    / * R [1] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Rax, 8 (%% RDI) \ п"
    / * С >>= 52 * /
    "MOVQ %% r10, %% Ракс \ п"
    "shrdq $ 52, %% г9, %% r8 \ п"
    "xorq %% г9, %% г9 \ п"
    / * С + = а0 * а2 (в прошлом использование %% r10) * /
    "mulq %% r12 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ %% r11, %% Ракс \ п"
    "MOVQ% q1, %% r12 \ п" / * Q2 ВОЗВРАТ * /
    "adcq %% RDX, %% г9 \ п"
    / * Получить t3 (%% r10, перезаписывает а0), t4 (%% RSi) * /
    / *"MOVQ% q1, %% r10 \ п" * /
    / * С + = a1 * a1 * /
    "mulq %% r11 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ %% r13, %% Ракс \ п"
    "adcq %% RDX, %% г9 \ п"
    / * D + = а3 * а4 * /
    "mulq %% r14 \ п"
    "addq %% Ракс, %% RBX \ п"
    "adcq %% RDX, %% RCX \ п"
    / * С + = (г & МИСТЕР */
    "MOVQ %% RBX, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ $ 0x1000003d10, %% r13 \ п"
    "mulq %% r13 \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% г9 \ п"
    / * Д >>= 52 (%% только RBX) * /
    "shrdq $ 52, %% RCX, %% RBX \ п"
    / * R [2] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Rax, 16 (%% RDI) \ п"
    / * С >>= 52 * /
    "shrdq $ 52, %% г9, %% r8 \ п"
    "xorq %% r14, %% r14 \ п"
    / * С + = t3 * /
    "MOVQ %% RBX, %% Ракс \ п"
    "addq %% риши, %% r8 \ п" / * RSI = Q1 * /
    / * = С + d * R * /
    "mulq %% r13 \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% r14 \ п"
    / * R [3] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Rax, 24 (%% RDI) \ п"
    / * С >>= 52 (%% r8 только) * /
    "shrdq $ 52, %% r14, %% r8 \ п"
    / * С + = t4 (только %% r8) * /
    "addq %% r12, %% r8 \ п"
    / * Г [4] = C * /
    "MOVQ %% r8,32 (%% RDI) \ п"
: "+ S"(А), "= м"(Tmp1a)
: "D"(р)
: "% Ракс", "% RBX", "% RCX", "% RDX", "% r8", "% г9", "% r10", "% r11", "% r12", "% r13", "% r14", "% r15", "куб.см", "Память");


#endif


Версия 2 - более XMM использование рег

Код:
/ ************************************************* *********************
 * Copyright (с) 2013-2014 Diederik Хьюс, Pieter Wuille *
 * Распространяется под лицензией MIT, см сопутствующая *
 * Файл КОПИРОВАНИЕ или http://www.opensource.org/licenses/mit-license.php.*
 ************************************************** ******************** /

/ **
 * Changelog:
 * - март 2013, Diederik Хьюс: оригинальная версия
 * - ноябрь 2014, Питер Wuille: обновлен для использования параллельного алгоритма умножения Питера Dettman в
 * - декабрь 2014, Питер Wuille: преобразован из Yasm в GCC встроенного ассемблера
 * /

#ifndef _SECP256K1_FIELD_INNER5X52_IMPL_H_
#define _SECP256K1_FIELD_INNER5X52_IMPL_H_

SECP256K1_INLINE статической силы secp256k1_fe_mul_inner (uint64_t * г, Const uint64_t * а, Const uint64_t * SECP256K1_RESTRICT б)
/ **
 * Регистры: RDX: Ракс = Умножение аккумулятор
 * Г9: r8 = с
 * R15: RCX = д
 * R10-r14 = a0-a4
 * RBX = Ь
 * RDI = г
 * Рши = а / т?
 * /
/ * XMM0 = q1 = q2 xmm6 * /
/ * Это 17 мем доступ + 17 XMM использует против 35 доступа Мем и не использовать XMM * /

__asm__ __volatile __ (
    "нажмите %% RBX \ п"
    "MOVQ %% RSP, %% XMM1 \ п"
    "MOVQ %% КПБ, %% xmm2 \ п"
    "MOVQ %% RDI, %% XMM3 \ п"
    "MOVQ 0 (%% RBX) %% RDI \ п"
    "MOVQ 8 (%% RBX), %% RBP \ п"
    "MOVQ 16 (%% RBX), %% RSP \ п"
    "MOVQ %% RDI, %% xmm4 \ п"
    
    "MOVQ 24 (%% рши), %% R13 \ п"
    "MOVQ %% RDI, %% Ракс \ п"
    "MOVQ 32 (%% рши), %% R14 \ п"
    / * D + = а3 * b0 * /
    "mulq %% r13 \ п"
    "MOVQ 0 (%% риши), %% r10 \ п"
    "MOVQ %% Ракс, %% г9 \ п"
    "MOVQ 8 (%% рши), %% r11 \ п"
    "MOVQ 16 (%% рши), %% r12 \ п"
    "MOVQ %% КПБ, %% Ракс \ п"
    "MOVQ %% RDX, %% рши \ п"
    / * D + = а2 * b1 * /
    "mulq %% r12 \ п"
    "MOVQ 24 (%% RBX), %% RCX \ п"
    "MOVQ 32 (%% RBX), %% RBX \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% RSP, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = a1 * b2 * /
    "mulq %% r11 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% RCX, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * Д = а0 * b3 * /
    "mulq %% r10 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% RBX, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * С = а4 * b4 * /
    "mulq %% r14 \ п"
    "MOVQ $ 0xfffffffffffff, %% r15 \ п"
    "MOVQ %% Ракс, %% r8 \ п"
    / * D + = (с & МИСТЕР */
    "andq %% r15, %% Ракс \ п"
    "shrdq $ 52, RDX %%, %% r8 \ п"     / * С >>= 52 (%% r8 только) * /
    "MOVQ $ 0x1000003d10, %% RDX \ п"
    "mulq %% RDX \ п"
    "addq %% Ракс, %% г9 \ п"
    "adcq %% RDX, %% рши \ п"
    / * T3 (tmp1) = д & M * /
    "MOVQ %% г9, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Ракс, %% XMM0 \ п"  
    / * Д >>= 52 * /
    "MOVQ %% RDI, %% Ракс \ п"
    "shrdq $ 52, риши %%, %% г9 \ п"
    "исключающее %% еси, %% еси \ п"
    / * D + = а4 * b0 * /
    "mulq %% r14 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% КПБ, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = а3 * b1 * /
    "mulq %% r13 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% RSP, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = а2 * b2 * /
    "mulq %% r12 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% RCX, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = а1 * b3 * /
    "mulq %% r11 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% RBX, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = а0 * b4 * /
    "mulq %% r10 \ п"
    "addq %% Ракс, %% г9 \ п"
     / * D + = C * R * /
    "MOVQ $ 0x1000003d10, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    "mulq %% r8 \ п"
    "addq %% Ракс, %% г9 \ п"
    "adcq %% RDX, %% рши \ п"
    / * T4 = д & М (%% r15) * /
    "MOVQ %% г9, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    / * Д >>= 52 * /
    "shrdq $ 52, риши %%, %% г9 \ п"
    "исключающее %% еси, %% еси \ п"
    / * ТЕ = t4 >> 48 (tmp3) * /
    "MOVQ %% Ракс, %% r15 \ п"
    "shrq $ 48, %% r15 \ п" / * Q3 * /
    
    / * T4 &= (М >> 4) (tmp2) * /
    "MOVQ $ 0xffffffffffff, %% RDX \ п"
    "andq %% RDX, %% Ракс \ п"
    "MOVQ %% Ракс, %% xmm6 \ п"
    / *"MOVQ% q2, %% r15 \ п" * /
    "MOVQ %% RDI, %% Ракс \ п"
    / * С = а0 * b0 * /
    "mulq %% r10 \ п"
    "MOVQ %% RCX, %% xmm5 \ п"
    "MOVQ %% Ракс, %% r8 \ п"
    "MOVQ %% КПБ, %% Ракс \ п"
    "MOVQ %% RDX, %% RCX \ п"
    / * D + = а4 * b1 * /
    "mulq %% r14 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% RSP, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = а3 * b2 * /
    "mulq %% r13 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% xmm5, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = а2 * b3 * /
    "mulq %% r12 \ п"
    "addq %% Ракс, %% г9 \ п"
    "MOVQ %% RBX, %% Ракс \ п"
    "adcq %% RDX, %% рши \ п"
    / * D + = a1 * b4 * /
    "mulq %% r11 \ п"
    "addq %% Ракс, %% г9 \ п"
    "adcq %% RDX, %% рши \ п"
    
    "MOVQ %% r15, %% Ракс \ п"  / * Q3 * переданы /
    
    / * И0 = д & М (%% r15) * /
    "MOVQ %% г9, %% RDX \ п"
    "shrdq $ 52, риши %%, %% г9 \ п"
    "MOVQ $ 0xfffffffffffff, %% r15 \ п"
    "исключающее %% еси, %% еси \ п"
    "andq %% r15, %% RDX \ п"
    / * Д >>= 52 * /

    / * = И0 (и0 << 4)

SECP256K1_INLINE статической силы secp256k1_fe_sqr_inner (uint64_t * г, Const uint64_t * а) ТХ (%% рши) * /
    "shlq $ 4, %% RDX \ п"
    "ORQ %% КПБ, %% RDX \ п" / * Q3 ВОЗВРАТ * /
    / * С + = и0 * (R >> 4) * /
    "MOVQ $ 0x1000003d1, %% Ракс \ п"
    "mulq %% RDX \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% г9 \ п"    
    / * R [0] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Ракс, 0 (%% RDI) \ п"
    / * С >>= 52 * /
    "shrdq $ 52, %% г9, %% r8 \ п"
    "xorq %% г9, %% г9 \ п"
    / * * А0 = 2 * /
    "addq %% r10, %% r10 \ п"
    / * С + = a0 * a1 * /
    "MOVQ %% r10, %% Ракс \ п"
    "mulq %% r11 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ %% r12, %% Ракс \ п"
    "adcq %% RDX, %% г9 \ п"
    / * D + = а2 * а4 * /
    "mulq %% r14 \ п"
    "addq %% Ракс, %% RBX \ п"
    "MOVQ %% r13, %% Ракс \ п"
    "adcq %% RDX, %% RCX \ п"
    / * = D + а3 * a3 * /
    "mulq %% r13 \ п"
    "addq %% Ракс, %% RBX \ п"
    "adcq %% RDX, %% RCX \ п"
    / * С + = (г & МИСТЕР */
    "MOVQ %% RBX, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "mulq %% RSP \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% г9 \ п"
    / * Д >>= 52 * /
    "shrdq $ 52, %% RCX, %% RBX \ п"
    "исключающее %% ECX, %% ECX \ п"
    / * R [1] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Rax, 8 (%% RDI) \ п"
    / * С >>= 52 * /
    "MOVQ %% r10, %% Ракс \ п"
    "shrdq $ 52, %% г9, %% r8 \ п"
    "xorq %% г9, %% г9 \ п"
    / * С + = а0 * а2 (в прошлом использование %% r10) * /
    "mulq %% r12 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ %% r11, %% Ракс \ п"
    "MOVQ %% XMM0, %% r12 \ п" / * Q2 ВОЗВРАТ * /
    "adcq %% RDX, %% г9 \ п"
    / * Получить t3 (%% r10, перезаписывает а0), t4 (%% RSi) * /
    / *"MOVQ% q1, %% r10 \ п" * /
    / * С + = a1 * a1 * /
    "mulq %% r11 \ п"
    "addq %% Ракс, %% r8 \ п"
    "MOVQ %% r13, %% Ракс \ п"
    "adcq %% RDX, %% г9 \ п"
    / * D + = а3 * а4 * /
    "mulq %% r14 \ п"
    "addq %% Ракс, %% RBX \ п"
    "adcq %% RDX, %% RCX \ п"
    / * С + = (г & МИСТЕР */
    "MOVQ %% RBX, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "mulq %% RSP \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% г9 \ п"
    / * Д >>= 52 (%% только RBX) * /
    "shrdq $ 52, %% RCX, %% RBX \ п"
    / * R [2] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Rax, 16 (%% RDI) \ п"
    / * С >>= 52 * /
    "shrdq $ 52, %% г9, %% r8 \ п"
    "xorq %% r14, %% r14 \ п"
    / * С + = t3 * /
    "MOVQ %% RBX, %% Ракс \ п"
    "addq %% риши, %% r8 \ п" / * RSI = Q1 ВОЗВРАЩАЕТСЯ * /
    / * = С + d * R * /
    "mulq %% RSP \ п"
    "MOVQ %% XMM1, %% RSP \ п"
    "MOVQ %% xmm2, %% РБП \ п"
    "addq %% Ракс, %% r8 \ п"
    "adcq %% RDX, %% r14 \ п"
    / * R [3] = с & M * /
    "MOVQ %% r8, %% Ракс \ п"
    "andq %% r15, %% Ракс \ п"
    "MOVQ %% Rax, 24 (%% RDI) \ п"
    / * С >>= 52 (%% r8 только) * /
    "shrdq $ 52, %% r14, %% r8 \ п"
    / * С + = t4 (только %% r8) * /
    "addq %% r12, %% r8 \ п"
    / * Г [4] = C * /
    "MOVQ %% r8,32 (%% RDI) \ п"

: "+ S"(А)
: "D"(р)
: "% Ракс", "% RBX", "% RCX", "% RDX", "% r8", "% г9", "% r10", "% r11", "% r12", "% r13", "% r14", "% r15", "куб.см", "Память");


#endif

AlexGR сейчас офлайн Пожаловаться на AlexGR   Ответить с цитированием Мультицитирование сообщения от AlexGR Быстрый ответ на сообщение AlexGR



Как заработать Биткоины?

Bitcoin Wallet * Portefeuille Bitcoin * Monedero Bitcoin * Carteira Bitcoin * Portafoglio Bitcoin * Bitcoin Cüzdan * 比特币钱包

bitcoin-zarabotat.ru
Почта для связи: bitcoin-zarabotat.ru@yandex.ru

3HmAQ9FkRFk6HZGuwExYxL62y7C1B9MwPW