Какую производительность можно ожидать от Int32 и Int64?
Я часто вижу подобные программы, где Int64
является абсолютным убийцей производительности на 32-битных платформах. Мой вопрос сейчас:
Если мне нужна конкретная длина слова для моей задачи (в моем случае RNG), это Int64
эффективен на 64-битных платформах или все еще будет использовать C-звонки? И насколько эффективно преобразование Int64
для Int
?
2 ответа
В 64-битной системе Int64 должен быть в порядке, хотя я точно не знаю.
Что еще более важно, если вы используете Crypto или генерацию случайных чисел, вы ДОЛЖНЫ использовать тип данных, который, по словам алгоритма, будет использоваться, также будьте осторожны с подписью. Если вы этого не сделаете, у вас будут неправильные результаты, которые могут означать, что ваша криптография небезопасна или ваш генератор случайных чисел не является действительно случайным (ГСЧ сложны, и многие выглядят случайными, но это не так).
Для любого другого типа работы используйте Integer везде, где вы можете, или даже лучше, сделайте вашу программу полиморфной, используя тип-класс Integral. Затем, если вы думаете, что ваша программа медленнее, чем должна быть, профилируйте ее, чтобы определить, где вы должны сосредоточиться, когда вы пытаетесь ускорить ее. если вы используете класс типов Integral, легко перейти с Integer на Int. Haskell должен быть достаточно умен, чтобы специализировать (большую часть) код, который использует полиморфизм, чтобы избежать накладных расходов.
Интересная статья о 64-битной производительности здесь:
Разве мой код не будет быстрее на 64-битных???
Как говорится в статье, большое узкое место - это не процессор, а кэш-память и ввод-вывод памяти.