Russian Qt Forum
Ноябрь 26, 2024, 16:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Rdrand инструкция Intel  (Прочитано 5481 раз)
Biowolf
Гость
« : Февраль 16, 2014, 21:34 »

Вот уже несколько лет как в процессорах intel есть аппаратный генератор случайных чисел. Знаю что обращение к нему происходит через инструкцию Rdrand.
Подскажите пожалуйста, как его использовать в Qt?
Функция rand() которая есть на сях не устраивает. Она постоянно выдаёт одни и те же последовательности чисел.
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #1 : Февраль 16, 2014, 21:39 »

в с++ есть функция srand, через нее происходит инициалиция генератора псевдослучайных чисел Улыбающийся
к примеру, можно так инициализировать srand(time(0));
иницизировать лучше всего в функции main =)
без инициализации будут выдавать одинаковые последовательности чисел Улыбающийся
через qt так же делается ) т.е. инициализируем функция qsrand
« Последнее редактирование: Февраль 16, 2014, 21:41 от gil9red » Записан

Biowolf
Гость
« Ответ #2 : Февраль 17, 2014, 18:11 »

Я знаю про srand.
Но он имеет целую кучу недостатков. Например выдаёт одно и то же внутри одной секунды и можно узнать всю последовательность если известно в какую секунду генератор вызван.
Хотелось бы получить доступ из Qt к аппаратному генератору случайных чисел, который сейчас есть во всех современных процессорах.
Записан
Serr500
Гость
« Ответ #3 : Февраль 17, 2014, 18:46 »

Не вижу большой проблемы. ASM в руки - и вперёд! От Qt вообще ничего не зависит.

P.S. Давно уже ASM не юзал...  Грустный Надо вспоминать...  Грустный
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #4 : Февраль 17, 2014, 18:52 »

который сейчас есть во всех современных процессорах.

На AMD тоже?

Из Qt доступа к нему нет. Делай вызов на асме как уже написали.

Но он имеет целую кучу недостатков. Например выдаёт одно и то же внутри одной секунды и можно узнать всю последовательность если известно в какую секунду генератор вызван.

Это уже задача установить начальный seed, который будет завистеь не только от времени, как это обычно делают. Включи фантазию, вариантов масса.
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #5 : Февраль 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
Записан

Biowolf
Гость
« Ответ #6 : Февраль 18, 2014, 20:00 »


Обьясните пожалуйста новичку, как эта штука подключается к Qt?

У меня оно не запускается, пишет что-то типа main.cpp:43: error: undefined reference to `rdrand_16(unsigned short*, int)'

И вообще помоему всё что там описано относится к компилятору Intel.
Qt таких функций не поддерживает.
Записан
twp
Гость
« Ответ #7 : Февраль 18, 2014, 21:04 »

насколько я знаю нельзя делать ассемблерные вставки для 64-х сборки. Как вариант - использовать так называемые intrinsic functions. Для каждого компилятора и платформы они разные. Можно глянуть здесь для примера:
x86 MSVC
x64 MSVC
x86 GCC
Записан
lesav
Частый гость
***
Offline Offline

Сообщений: 235


qnx.org.ru


Просмотр профиля WWW
« Ответ #8 : Февраль 20, 2014, 17:37 »

И вообще по-моему всё что там описано относится к компилятору Intel.
Qt таких функций не поддерживает.
 Главное чтобы процессор поддерживал, а Qt тут не причем.


Обьясните пожалуйста новичку, как эта штука подключается к Qt?
 Скомпилировать библиотеку в MSVC2012 и линковать ее к вашему проекту.
Вот только у меня есть пара процентов сомнений, что полученную либу можно прилинковать к бинарнику компилятором GCC.

Если будут трудности с mingw, можно безболезненно пересесть на msvc-2010, уверен, что он запросто с этим справится.  


Кстати, пост выше предлагает вполне рабочее решение.  Можно попробовать.
« Последнее редактирование: Февраль 20, 2014, 17:39 от lesav » Записан

OKTA
Гость
« Ответ #9 : Февраль 20, 2014, 19:03 »

А для какой цели такие мучения с ГПСЧ? Если использовать не в криптографии, есть миллион хороших и быстрых генераторов на основе регистра сдвига.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.073 секунд. Запросов: 23.