Size: a a a

Rust — русскоговорящее сообществo

2020 December 06

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Хм, если бы он был такой "умный", то зачем бы "повёлся" на мою простейшую оптимизацию и не превратил её в свой вариант с 5-ю умножениями вместо movsd?
Я решил написать ресемплинг изображений настолько быстрый, насколько у меня получится. И походу дела изучаю сторонние решения. И меня зацепило, что везде "без задней мысли" пишут формулы "как в учебнике", без попытки ручной оптимизации. Вот и решил проверить какой ASM код они генерят.
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
А зачем тредпул ? Постгрес же умеет в пайплайнинг
источник

A

Apachee in Rust — русскоговорящее сообществo
Dollar Føølish
А зачем тредпул ? Постгрес же умеет в пайплайнинг
Да, я не увидел сначала в доках
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Вот только вопрос умеет ли в это клиент
источник

A

Apachee in Rust — русскоговорящее сообществo
да
источник

DF

Dollar Føølish in Rust — русскоговорящее сообществo
Отлично тогда
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
Kirill (Cykooz) Kuzminykh
Я почему-то считал, что современные компиляторы умеют хорошо оптимизировать математические выражения. Например в таком выражении:
9.0 * x.powi(3) - 15.0 * x.powi(2)
достаточно выполнить 4 умножения:
x2 = x * x; 
x3 = x2 * x;
9.0 * x3 - 15.0 * x2
Но я удивился когда увидел, что в Rust это выполняется в 5 умножений - он куб и квадрат от x считает независимо.
Это компилятор пока не дорос, или тут есть какие-то подводные камни из-за которых выбирается такое не оптимальное решение?
плюсую догадки, что вопрос в семантике флоатов.

скорее всего, ты хочешь аналог -ffast-math https://github.com/rust-lang/rust/issues/21690
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
в тему компиляторных оптимизаций - пожалуйста, не надейтесь на них в плане оптимизации математики. Компиляторы сами по себе тупы как пробки, а в плане математики там совсем беда.
источник

3

3d20 in Rust — русскоговорящее сообществo
Не могу понять, если я i32 делю на i32, то на выходе у меня тоже получается i32? А правило округления тогда какое: round или trunc ?
источник

ИЛ

Иван Лещенко... in Rust — русскоговорящее сообществo
3d20
Не могу понять, если я i32 делю на i32, то на выходе у меня тоже получается i32? А правило округления тогда какое: round или trunc ?
источник

3

3d20 in Rust — русскоговорящее сообществo
Спасибо! То что надо 🙂
источник

AL

Andrey @ozkriff Lesn... in Rust — русскоговорящее сообществo
Alexander Zaitsev
в тему компиляторных оптимизаций - пожалуйста, не надейтесь на них в плане оптимизации математики. Компиляторы сами по себе тупы как пробки, а в плане математики там совсем беда.
для целых числел таки все сильно лучше должно быть. но если прям критичный кусок - стоит перепроверить, конечно
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
Andrey @ozkriff Lesnikóv
для целых числел таки все сильно лучше должно быть. но если прям критичный кусок - стоит перепроверить, конечно
к сожалению, оно даже для чисел довольно тупое. Там очень примитивный оптимизатор, на самом деле
источник

AZ

Alexander Zaitsev in Rust — русскоговорящее сообществo
если интересно понять, насколько сильный там примитив, можно начать вот отсюда: https://llvm.org/doxygen/InstructionCombining_8cpp_source.html
источник

A

Apachee in Rust — русскоговорящее сообществo
а почему в проекте с actix_web токио может ругаться на отсутствие scheduler'а?
источник

A

Apachee in Rust — русскоговорящее сообществo
или мне нужно подключать актикс, и его использовать для этого?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Apachee
а почему в проекте с actix_web токио может ругаться на отсутствие scheduler'а?
Скорее всего ты пытаешься использовать tokio 0.3
источник

A

Apachee in Rust — русскоговорящее сообществo
Mikail Bagishov
Скорее всего ты пытаешься использовать tokio 0.3
а какой надо?
источник

MB

Mikail Bagishov in Rust — русскоговорящее сообществo
Или tokio-0.2, или воспользовать tokio-compat-02
источник

KK

Kirill (Cykooz) Kuzm... in Rust — русскоговорящее сообществo
Alexander Zaitsev
в тему компиляторных оптимизаций - пожалуйста, не надейтесь на них в плане оптимизации математики. Компиляторы сами по себе тупы как пробки, а в плане математики там совсем беда.
Ну тогда буду считать что llvm ещё просто не дорос. Например gcc в коде на C делает 4 умножения, там где llvm - 5:
#include <math.h>
float calc(float x)
{
   float a = fabs(x);
   return 9.0 * (a * a * a) - 15.0 * (a * a);
}
Но в Rust хотя бы радует, что он вызов powi() смог скомпилять в операции умножения, а gcc вызов powf() компиляет как вызов подпрограммы. (хотя powf конечно же не аналог powi - что-то с ходу не нашёл на C аналог)
источник