Smart Engines corporate blog
Abnormal programming
Programming
Algorithms
Programming microcontrollers
Comments 24
+1
В первом цикле инкремент или по индексу, или по указателям, но не и то и другое.
-2
Вы серьезно?
"… Для простоты будем считать, что длина массивов len делится на 4.." и "… невыровненного 64-битного числа r по адресу p процессору необходимо..."
+3
По первому замечанию: Вам действительно интересен код, замусоренный обработкой «хвостика» массива? На производительность это не влияет. Код — элементарный. А тема поста — производительность. Маловероятно, что среди читателей есть разработчики на Эльбрусе, мечтающие именно о 16-битном сложении и надеющиеся на готовую копипасту. Поэтому мы выкинули то, что ухудшило бы подачу материала. Напротив, невыровненность начала массива — это ключевая проблема. Отдельной обработкой «начала» она не лечится. Что же касается второго замечания, то, простите, не ясно, что именно вызывает раздражение. Не уточните?
0
Было бы гораздо интересней увидеть прирост производительности на более реальной задаче. А то бывает оптимизируешь, оптимизируешь, а узкое место в другом месте
0
В задаче распознавания паспорта РФ использование EML и интринсиков (для реализации функций, которых пока нет в EML) ускоряет вычисления где-то в 2 раза на Эльбрус-401PC. Сейчас научная статья, включающая эти результаты, находится в печати.
0

А чем кроме непроизносимого названия отличаются интринсики от обычных инлайн-функций?

0

Интринсики — это компиляторная магия. Зачастую вызов функции-интринсика может быть преобразован в единственную инструкцию. Иногда без интринсиков невозможно достичь желаемого (если не юзать хардкорный асм): https://gcc.gnu.org/onlinedocs/gcc/x86-transactional-memory-intrinsics.html#x86-transactional-memory-intrinsics

0
Получается, что интринсики — это когда кто-то за вас сделал хардкорный асм в виде инлайн-функций и собрал их в библиотеку?
0
Интринсики, скорее, продолжение языка компилятора. Он обрабатывает их по особому, не как обычную библиотеку.
0
Определение я прочитал перед тем как писать комментарий, но всё равно не понял отличия от инлайн-функций.

Compilers that implement intrinsic functions generally enable them only when a program requests optimization, otherwise falling back to a default implementation provided by the language runtime system (environment).

Если не включить оптимизацию при компилляции, то будет обычный вызов функции; если оптимизацию включить, то будет инлайн-функция?
0
Интринсики предоставляют доступ к инструкциям процессора, которые недоступны в С.
0
Асм-вставки нельзя делать, что ли? Которые можно обернуть в инлайн-функции.
+1
Интринсики позволяют не думать о соглашениях о вызове и т.п., компилятор сам делает выделение регистров.
0
Асм вставки мешают оптимизатору и вообще являются жутким костылём.
Поэтому некоторые компиляторы их не поддерживают.
0
А почему сразу не писать на асме?

Почему не пропатчить компилятор с++, под вашу платформу? Чтобы он сам занимался оптимизациями.
+1
Скомпилировал все примеры под Эльбрусом. (переделав на си)
Несколько замечаний.
1) результаты, похожие на ваш, (но не в 7 раз), получаются при опциях
-fforce-vect -fvect-verbose
2) неоднократно замечал, что unroll у МЦСТ коряво работает даже в простых случаях…
3)Запустил с оптимизацией O3 (да да, у МЦСТ очень даже рабочая), и все ваши оптимизации коту под хвост.
t0-t1 45.814001 (первый случай, мкс.) время на обработку 256 массивов по 256.
t0-t1 369.018002(второй случай)
t0-t1 382.902000l(3-й случай.)
4) вместо радости рекомендую еще prefetch сделать.
+1
Где можно достать документацию по ассемблеру для Эльбруса?

И вообще есть отдельный компилятор с языка ассемблера?
-1

Это же секрет государственной важности. Эти процы используются в военке. Вы что, а вдруг враг использует в своих целях?

+1

Полноценная только у МЦСТ после подписания НДА.


А так в интернете (включая хабр) кое какая инфа валяется, навскидку:


http://alexanius-blog.blogspot.com/2016/05/hello-world.html#elbrus
https://www.youtube.com/watch?v=AVOMnkvyO2g
https://www.youtube.com/watch?v=1zWUN6y2WbI


И вообще есть отдельный компилятор с языка ассемблера?

Сишный компилятор есть под интел с поддержкой флагов gcc/clang т.е. выхлоп в ассемблер через -s ну и наверное из ассемблера в бинарий.
Вот тут в описании к pdk пишут что входит кросскомпилятор. Качай, пробуй.


Я со старой версией игрался. какой он код генерирует наблюдать прикольно, я много знаний из этого подчерпнул, но без железки скучно быстро надоедает.

Only those users with full accounts are able to leave comments., please.