Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Biowolf от Февраль 16, 2014, 21:34



Название: 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
А для какой цели такие мучения с ГПСЧ? Если использовать не в криптографии, есть миллион хороших и быстрых генераторов на основе регистра сдвига.