как использовать регистры процессора в visual Studio?

StackOverflow https://stackoverflow.com/questions/2286298

Вопрос

я пытаюсь написать программу, которая решает проблему rsa (да, у меня есть интересные цели), и в настоящее время у меня нет 64-разрядной версии Linux, и я действительно не хочу тратить свое время на написание программы, у которой нет шанса когда-либо завершиться.поэтому, хотя я могу немного программировать на ассемблере, я бы предпочел использовать C ++.однако мне также было бы интересно узнать, как использовать встроенную сборку, чтобы сделать то же самое.план здесь состоит в том, чтобы использовать 16 64-разрядных регистров общего назначения и 128-разрядные регистры sse для выполнения (действительно очень длинной) целочисленной математики.так что любая помощь о том, как это сделать, была бы очень признательна.

Это было полезно?

Решение

Основываясь на вашем комментарии BarsMonsters anser, вам не нужно приближаться к процессору, вам нужна большая библиотека целых чисел.

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

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

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

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

Другие советы

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

Особенно Intel C ++ и GCC3 - они часто создают непревзойденный код вручную.

Кстати, посмотри на это: Почему MSVC не поддерживает встроенную сборку для целевых программ AMD64 и Itanium?

Если вы хотите просто выполнить некоторую математику точности, вам лучше попробовать компилятор Intel C ++ и использовать его math lib, он очень мощный и сверхоптимизированный.То же самое для Boost math library.Это может сократить вашу работу на 90% :-) Они поддерживают произвольные числа точности.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top