как использовать регистры процессора в visual studio? - PullRequest
1 голос
/ 18 февраля 2010

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

Ответы [ 3 ]

3 голосов
/ 18 февраля 2010

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

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

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

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

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

2 голосов
/ 19 февраля 2010

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

2 голосов
/ 18 февраля 2010

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

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

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

...