[Перевод] Как обновление Rust 1.26 ускорило мой код в три с лишним раза
|
|
Воскресенье, 20 Мая 2018 г. 22:53
+ в цитатник
Хочу поделиться небольшой историей о мощи LLVM и преимуществах языков высокого уровня над ассемблером.
Я работаю в компании Parity Technologies, которая поддерживает
клиент Parity Ethereum. В этом клиенте нам нужна быстрая 256-битная арифметика, которую приходится эмулировать на программном уровне, потому что никакое оборудование не поддерживает её аппаратно.
Долгое время мы параллельно делаем две реализации арифметики: одну на Rust для стабильных сборок и одну со встроенным ассемблерным кодом (который автоматически используется nightly-версией компилятора). Мы так поступаем, потому что храним 256-битные числа как массивы 64-битных чисел, а в Rust нет никакого способа умножить два 64-битных числа, чтобы получить результат более 64 бит (так как целочисленные типы Rust только доходят до
u64
). Это несмотря на то, что x86_64 (наша основная целевая платформа) нативно поддерживает 128-битные результаты вычислений с 64-битными числами. Так что мы разделяем каждое 64-битное число на два 32-битных (потому что
можно умножить два 32-битных числа и получить 64-битный результат).
Читать дальше -> https://habr.com/post/358974/?utm_source=habrahabr&utm_medium=rss&utm_campaign=358974
Метки:
Проектирование и рефакторинг
Математика
Компиляторы
Rust
Assembler
Parity Technologies
Parity Ethereum
LLVM
ассемблер
оптимизация
компилятор
-
Запись понравилась
-
0
Процитировали
-
0
Сохранили
-