Какую производительность можно ожидать от Int32 и Int64? - PullRequest
7 голосов
/ 04 января 2011

Я часто вижу такие программы, как this , где Int64 является абсолютным убийцей производительности на 32-битных платформах.Мой вопрос сейчас:

Если мне нужна конкретная длина слова для моей задачи (в моем случае это ГСЧ), будет ли Int64 эффективна на 64-битных платформах или она все еще будет использовать C-вызовы?И насколько эффективно преобразование Int64 в Int?

Ответы [ 2 ]

2 голосов
/ 05 августа 2011

в 64-битной системе Int64 должно быть в порядке, хотя я точно не знаю.

Что еще более важно, если вы выполняете шифрование или генерацию случайных чисел, вы ДОЛЖНЫ использовать тип данных, который, по словам алгоритма, будет использоваться, также будьте осторожны с подписью. Если вы этого не сделаете, у вас будут неправильные результаты, которые могут означать, что ваша криптография небезопасна или ваш генератор случайных чисел не является действительно случайным (ГСЧ сложны, и многие выглядят случайными, но не).

Для любого другого типа работы используйте Integer везде, где вы можете, или даже лучше, сделайте вашу программу полиморфной, используя тип-класс Integral. Затем, если вы думаете, что ваша программа медленнее, чем должна быть, профилируйте ее, чтобы определить, где вы должны сосредоточиться, когда вы пытаетесь ускорить ее. если вы используете класс типов Integral, легко перейти с Integer на Int. Haskell должен быть достаточно умен, чтобы специализировать (большую часть) код, который использует полиморфизм, чтобы избежать накладных расходов.

1 голос
/ 04 января 2011

Интересная статья о 64-битной производительности здесь:

Разве мой код не будет быстрее на 64-битной ???

Как говорится в статье,большое узкое место - не процессор, а кэш-память и ввод-вывод памяти.

...