Название: Rdrand инструкция Intel Отправлено: Biowolf от Февраль 16, 2014, 21:34 Вот уже несколько лет как в процессорах intel есть аппаратный генератор случайных чисел. Знаю что обращение к нему происходит через инструкцию Rdrand.
Подскажите пожалуйста, как его использовать в Qt? Функция rand() которая есть на сях не устраивает. Она постоянно выдаёт одни и те же последовательности чисел. Название: Re: Rdrand инструкция Intel Отправлено: gil9red от Февраль 16, 2014, 21:39 в с++ есть функция srand, через нее происходит инициалиция генератора псевдослучайных чисел :)
к примеру, можно так инициализировать srand(time(0)); иницизировать лучше всего в функции main =) без инициализации будут выдавать одинаковые последовательности чисел :) через qt так же делается ) т.е. инициализируем функция qsrand Название: Re: Rdrand инструкция Intel Отправлено: Biowolf от Февраль 17, 2014, 18:11 Я знаю про srand.
Но он имеет целую кучу недостатков. Например выдаёт одно и то же внутри одной секунды и можно узнать всю последовательность если известно в какую секунду генератор вызван. Хотелось бы получить доступ из Qt к аппаратному генератору случайных чисел, который сейчас есть во всех современных процессорах. Название: Re: Rdrand инструкция Intel Отправлено: Serr500 от Февраль 17, 2014, 18:46 Не вижу большой проблемы. ASM в руки - и вперёд! От Qt вообще ничего не зависит.
P.S. Давно уже ASM не юзал... :( Надо вспоминать... :( Название: Re: Rdrand инструкция Intel Отправлено: Alex Custov от Февраль 17, 2014, 18:52 который сейчас есть во всех современных процессорах. На AMD тоже? Из Qt доступа к нему нет. Делай вызов на асме как уже написали. Но он имеет целую кучу недостатков. Например выдаёт одно и то же внутри одной секунды и можно узнать всю последовательность если известно в какую секунду генератор вызван. Это уже задача установить начальный seed, который будет завистеь не только от времени, как это обычно делают. Включи фантазию, вариантов масса. Название: Re: Rdrand инструкция Intel Отправлено: lesav от Февраль 17, 2014, 18:54 http://software.intel.com/ru-ru/tags/20757
http://software.intel.com/sites/default/files/article/185457/librdrand-windows-r1.zip Название: Re: Rdrand инструкция Intel Отправлено: Biowolf от Февраль 18, 2014, 20:00 http://software.intel.com/ru-ru/tags/20757 http://software.intel.com/sites/default/files/article/185457/librdrand-windows-r1.zip Обьясните пожалуйста новичку, как эта штука подключается к Qt? У меня оно не запускается, пишет что-то типа main.cpp:43: error: undefined reference to `rdrand_16(unsigned short*, int)' И вообще помоему всё что там описано относится к компилятору Intel. Qt таких функций не поддерживает. Название: Re: Rdrand инструкция Intel Отправлено: twp от Февраль 18, 2014, 21:04 насколько я знаю нельзя делать ассемблерные вставки для 64-х сборки. Как вариант - использовать так называемые intrinsic functions. Для каждого компилятора и платформы они разные. Можно глянуть здесь для примера:
x86 MSVC (http://msdn.microsoft.com/en-us/library/hh977023.aspx) x64 MSVC (http://msdn.microsoft.com/en-us/library/hh977022.aspx) x86 GCC (http://gcc.gnu.org/onlinedocs/gcc/X86-Built-in-Functions.html#X86-Built-in-Functions) Название: Re: Rdrand инструкция Intel Отправлено: lesav от Февраль 20, 2014, 17:37 И вообще по-моему всё что там описано относится к компилятору Intel. Главное чтобы процессор поддерживал, а Qt тут не причем.Qt таких функций не поддерживает. Обьясните пожалуйста новичку, как эта штука подключается к Qt? Скомпилировать библиотеку в MSVC2012 и линковать ее к вашему проекту.Вот только у меня есть пара процентов сомнений, что полученную либу можно прилинковать к бинарнику компилятором GCC. Если будут трудности с mingw, можно безболезненно пересесть на msvc-2010, уверен, что он запросто с этим справится. Кстати, пост выше (http://www.prog.org.ru/index.php?topic=26554.msg190647#msg190647) предлагает вполне рабочее решение. Можно попробовать. Название: Re: Rdrand инструкция Intel Отправлено: OKTA от Февраль 20, 2014, 19:03 А для какой цели такие мучения с ГПСЧ? Если использовать не в криптографии, есть миллион хороших и быстрых генераторов на основе регистра сдвига.
|