The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Выпуск rav1e 0.3, кодировщика AV1 на языке Rust , opennews (ok), 09-Фев-20, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


1. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +11 +/
Сообщение от leap42 (ok), 09-Фев-20, 10:16 
а почему на Rust? заходим в репо, видим что 57% кода это язык ассемблера. а кроме этих двух ещё есть Shell и Python.
Ответить | Правка | Наверх | Cообщить модератору

2. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +6 +/
Сообщение от Аноним (2), 09-Фев-20, 10:21 
Assembly 56.9%
Rust 42.8%
Действительно, почему))
Ответить | Правка | Наверх | Cообщить модератору

31. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +1 +/
Сообщение от коржик (?), 09-Фев-20, 13:24 
Вы построчно считаете? Сколько ассемблерных инструкций в одной строке раста?
Ответить | Правка | Наверх | Cообщить модератору

57. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +7 +/
Сообщение от Андрей (??), 09-Фев-20, 15:48 
Интересно, сколько там rust-строк (безопасных), а сколько в unsafe-блоках.
Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

6. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +5 +/
Сообщение от proninyaroslavemail (ok), 09-Фев-20, 10:48 
Ну и что? На асме (20 файлов) вынесены только платформо-зависимые вещи вроде SSE инструкций, т.е те участки кода, которые критичны ко времени выполнения и должны быть эффективными. Остальные 111 файлов написаны на расте, т.е вся логика кодировщика.
Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

9. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  –5 +/
Сообщение от mommy (?), 09-Фев-20, 11:24 
Тоесть асмный код эффективный а раст это мусор? Ну я так и знал
Ответить | Правка | Наверх | Cообщить модератору

17. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +15 +/
Сообщение от Аноним (17), 09-Фев-20, 12:07 
А раст "безопасный". Безопасно вызвать асм код это особое искусство!
Ответить | Правка | Наверх | Cообщить модератору

54. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +1 +/
Сообщение от Аноним (-), 09-Фев-20, 15:44 
😃 😃 😃
Ответить | Правка | Наверх | Cообщить модератору

66. Скрыто модератором  –6 +/
Сообщение от nelsonemail (??), 09-Фев-20, 17:01 
Ответить | Правка | К родителю #17 | Наверх | Cообщить модератору

26. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  –3 +/
Сообщение от proninyaroslavemail (ok), 09-Фев-20, 12:30 
Асм эффективнее любого существующего языка. Конечно, в большинстве случаев компилятор сам умеет генерировать эффективный асм, но компилятор не всемогущ и не всегда предсказуем, особенно когда это касается спец-наборов инструкций типа SIMD/SSE/MMX. Их часто пишут вручную.
Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

39. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +/
Сообщение от A.Stahl (ok), 09-Фев-20, 14:12 
Дык человек-то ещё менее всемогущ и предсказуем, особенно когда это касается спец-наборов инструкций типа SIMD/SSE/MMX.
Ответить | Правка | Наверх | Cообщить модератору

41. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  –1 +/
Сообщение от proninyaroslavemail (ok), 09-Фев-20, 14:21 
> Дык человек-то ещё менее всемогущ и предсказуем, особенно когда это касается спец-наборов
> инструкций типа SIMD/SSE/MMX.

То есть вы хотите сказать что компилятор абсолютно всегда знает где применять SIMD, при этом не нарушая семантику программы, а программист, который знает с какими данными он работает и что хочет получить в итоге, используя SIMD, нет)? Ну тогда вы изобрели ИИ для компилятора, программисты в таком случае и не нужны (как и сами языки).

Ответить | Правка | Наверх | Cообщить модератору

76. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +7 +/
Сообщение от Анонимиус (??), 09-Фев-20, 19:17 
На самом деле вы недооцениваете компиляторы, и переоцениваете человека. Как правило компиляторы С/С++ при должной квалификации программиста генерируют довольно хороший код, а код, написанный на ассемблере человекм, далеко не всегда работает заметно быстрее сгенерированного
Ответить | Правка | Наверх | Cообщить модератору

82. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +/
Сообщение от proninyaroslavemail (ok), 09-Фев-20, 20:05 
> Как правило компиляторы С/С++ при должной квалификации программиста генерируют довольно хороший код

Да, при должной квалификации и знания "потрохов" того компилятора, для которого пишеться код. Понимать, какие конструкции могут быть векторизованы и писать код в соответствующей стилистике. Но есть 2 проблемы: при сборке оптимизацию компилятора можно отключить или же вдруг потребуется сменить компилятор, и тогда карета превратится в тыкву. Надёжнее писать критически важные места на асм, который делает то что необходимо и будет работать вне зависимости от компилятора и его параметров. Вторая проблема как раз в квалификации. Видимо, кому то проще написать асм, чем подстраивать высокоуровневый код под компилятор, который бы хорошо векторизовался.

Ответить | Правка | Наверх | Cообщить модератору

115. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +1 +/
Сообщение от VEGemail (ok), 10-Фев-20, 11:31 
Вы переоцениваете компиляторы. В любом оптимизированном кодеке будет много ассемблера или интринсиков (которые подставляют нужную инструкцию). Независимо от того, написано оно на C или Rust. Просто потому что компиляторы не могут эффективно применять SSE/AVX самостоятельно в нетривиальных алгоритмах. ИИ ещё не изобрели.
Ответить | Правка | К родителю #76 | Наверх | Cообщить модератору

104. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +2 +/
Сообщение от виндотролль (ok), 10-Фев-20, 03:47 
> Ну тогда вы изобрели ИИ для компилятора

Не обязательно ИИ. Обширный набор эвристик, теория отимизации графов и прочие умные штуки (в которых мало кто разбирается) справляются хорошо.

А если перенести компиляцию в финальное представление в рантайм (JIT), где у компилятора есть возможность "почувствовать" данные, то вообще удивительные вещи происходят.

Ответить | Правка | К родителю #41 | Наверх | Cообщить модератору

116. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  –1 +/
Сообщение от VEGemail (ok), 10-Фев-20, 11:37 
> А если перенести компиляцию в финальное представление в рантайм (JIT), где у
> компилятора есть возможность "почувствовать" данные, то вообще удивительные вещи происходят.

Ага, именно поэтому все самые быстрые кодеки всегда на низкоуровневых C/Rust с кучей ассемблера или интринсиков внутри =)

Риторика "наши C#/Java работает быстрее ваших C/C++" была популярна в нулевых, даже приводились правдоподобные доводы. Только вот эти мечты разбились о суровую реальность. Даже Microsoft (которая активно продвигала эту идею) уже сделала разворот, активно развивает C++ (в нулевых они его активно игнорировали), и засматривается на Rust.

Ответить | Правка | Наверх | Cообщить модератору

128. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +2 +/
Сообщение от виндотролль (ok), 10-Фев-20, 18:12 
> Риторика "наши C#/Java работает быстрее ваших C/C++" была популярна в нулевых, даже
> приводились правдоподобные доводы. Только вот эти мечты разбились о суровую реальность.
> Даже Microsoft (которая активно продвигала эту идею) уже сделала разворот, активно
> развивает C++ (в нулевых они его активно игнорировали), и засматривается на
> Rust.

От задачи зависит. Теоретически, чем более высокоуровневый язык, тем круче оптимизации возможны в компиляторе. Если делая кодек на расте разработчики вынуждены вставлять вставки на АСМе, это значит лишь то, что таких оптимизаций в *ими используемом* компиляторе раста нету.

Но это не означает, что такие оптимизации невозможны. Хотя, я также не берусь утверждать, что такие оптимизации *в принципе* возможны для раста и для алгоритмов этого кодировщика. Возможно уровень абстракции раста недостаточно высок, чтоб компилятор смог правильно распознавать конструкции, которые можно эффективно транслировать в наиболее оптимальный набор SSE/AVX инструкций. Т.е. можно конечно накидать эвристик в существующий компилятор, но каждая эвристика будет работать лишь с одной конкретной имплементацией конкретного алгоритма =)

В общем это все теоретическая полемика. На практике выражение "ими используемый компилятор" эквивалентно "все доступные компиляторы". Так что прекращаю спорить.

Ответить | Правка | Наверх | Cообщить модератору

45. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +3 +/
Сообщение от Аноним84701 (ok), 09-Фев-20, 14:49 
> Тоесть асмный код эффективный а раст это мусор? Ну я так и знал

Все верно! Здесь - считаем!

Здесь:
https://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps;
https://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/x86...


memchr.S
memcmp.S
memcpy.S
memcpy_chk.S
memmove.S
memmove_chk.S
mempcpy.S
mempcpy_chk.S
memrchr.S
memset.S
memset_chk.S
...

https://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/x86...

memchr-avx2.S
memchr-sse2.S
memchr.c
memcmp-avx2-movbe.S
memcmp-sse2.S
memcmp-sse4.S
memcmp-ssse3.S
memcmp.c
memcpy-ssse3-back.S
memcpy-ssse3.S
...

https://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/arm;
https://sourceware.org/git/?p=glibc.git;a=tree;f=sysdeps/i386;
...
Ни-ни! Не считаем!

А вот здесь
https://www.opennet.ru/opennews/art.shtml?num=50605
> Третий выпуск dav1d, декодировщика AV1 от проектов VideoLAN и FFmpeg
> Код проекта написан на языке Си (C99) с ассемблерными вставками

https://github.com/videolan/dav1d
> dav1d is a new AV1 cross-platform decoder, open-source, and focused on speed and correctness.
>  Assembly 57.5%      C 41.5%

вообще рыбу заворачивали!

Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

89. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +/
Сообщение от Аноним (89), 09-Фев-20, 22:17 
асмный код - это различная реализация одних и тех же процедур для разных платформ.
Отдельные реализации для ARM32, ARM64, x86_64. Соответственно, один бинарник использует только часть кода, который относится только к платформе этого бинарника

Код на Rust - один для всех платформ.

Конечно, если у вас есть 3 версии реализации одного и того же - это у вас будет занимать больше места.

Асмный код по кол-ву строк тоже больше места занимает зачастую, чем аналогичные операции на C/Rust/etc.

Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

121. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  –1 +/
Сообщение от Аноним (121), 10-Фев-20, 13:10 
Покажите хотя бы один компилятор, который делает автоматическую оптимизацию в SIMD-инструкции?

(Нет, vector extensions, которые идентичны написанию на асме, не считаются).

Ответить | Правка | К родителю #9 | Наверх | Cообщить модератору

137. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +1 +/
Сообщение от Иван (??), 11-Фев-20, 00:06 
Пожалуйста:

https://godbolt.org/z/eyj-xb

GCC 9.2

Ответить | Правка | Наверх | Cообщить модератору

87. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +1 +/
Сообщение от Аноним (87), 09-Фев-20, 20:34 
> На асме (20 файлов) ... должны быть эффективными. Остальные 111 файлов написаны на расте

Т.е. чтобы вызывать функции из 20-ти файлов на асме, требуется 111 неэффективных файлов на расте?!

Ответить | Правка | К родителю #6 | Наверх | Cообщить модератору

32. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  –4 +/
Сообщение от Аноним (32), 09-Фев-20, 13:31 
>а почему на Rust? заходим в репо, видим что 57% кода это язык ассемблера.

А потому, что Rust он же безопасный и в указатели на нём низзя-низзя, моветон. Поэтому на ассемблере.

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

37. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  +10 +/
Сообщение от Аноним (37), 09-Фев-20, 14:06 
Забавно то, что в декодере dav1d, написанном на С, аналогичная картина.

Assembly 57.6%
C 41.4%
Other 1.0%

Ответить | Правка | К родителю #1 | Наверх | Cообщить модератору

48. "Выпуск rav1e 0.3, кодировщика AV1 на языке Rust "  –5 +/
Сообщение от нах. (?), 09-Фев-20, 15:01 
он НЕБЕЗОПАСТНЫЙ, как вы не можете этого понять!

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру