LINUX.ORG.RU

Статья «Внутренние функции компилятора GCC для обработки данных в векторной форме»

 ,


0

1

Высокая скорость работы очень важна для мультимедийных и графических приложений, а также приложений, осуществляющих обработку сигналов. Компилятор GCC позволяет использовать промежуточный вариант между ассемблером и стандартным языком C, который позволяет повысить скорость работы приложения и использовать специфические возможности центрального процессора, не используя ассемблер: внутренние функции (compiler intrinsics). Эта статья описывает внутренние функции компилятора GCC, при этом выделяются принципы использования этих функций на примере трех платформ: X86 (используются технологии MMX, SSE и SSE2); Motorоla, а сейчас Freescale (используется технология Altivec); и ARM Cortex-A (используется технология Neon).

>>> Подробности

★★★

Проверено: Shaman007 ()

Вроде это всё есть в OpenCL? поправьте, если я не прав.

BattleCoder ★★★★★ ()
Ответ на: комментарий от BattleCoder

Все это и в обычном Си есть. GCC прекрасно понимает __attribute__((ext_vector_type(N)))

psikh ()

По сравнению с icc как? Напомню что icc это 600МиБов библиотек для обработки медиа. От распознавания голоса до нейросетей.

alx_me ★★☆ ()

Шома, почему не мини-новость?

anonymous ()

Спасибо большое, мне такое нужно!

Gluttton ()
Ответ на: комментарий от psikh

ага, только это немного громоздко и тяжело запомнить (и легко опечататься)

BattleCoder ★★★★★ ()
Ответ на: комментарий от BattleCoder

И не надо запоминать. Один раз делаешь, например, typedef float float4 __attribute__((ext_vector_type(4)));

Между прочим, во всех реализациях OpenCL именно так векторные типы и определены.

psikh ()

На второй странице не понятно где заканчивается раздел «ARM Neon: типы данных и отладка» и складывается ощущение, что весь текст до конца это про ARM.

Выравнивание данных является еще одним аспектом, за которым нужно следить при перемещении данных. Используйте атрибут GCC «aligned» для выравнивания исходных и целевых участков с данными в 16-битных границах для улучшения производительности.

Не уверен, но кажется не бит, а байт.

Gluttton ()

промежуточный вариант между ассемблером и стандартным языком C

Попытка реанимировать C--?

quickquest ★★★★★ ()
Ответ на: комментарий от quickquest

Да нет, обычные, существующие во всех С/С++ компиляторах испокон веков макросы и компайлер-специфичные хинты, в которые заворачивается инлайн-ассемблер. По сути тот же, #define ASM_MACRO_NAME asm(«mov eax,ebx»), только компилятором отлавиливается и оптимизируется. На выходе - та же лапша из ифдефов, что и при использовании инлайн-ассемблера, пушо при использовании интринсиков, как и при использовании инлайн асма код намертво привязываетсяы к железке. Преимущество над инлайн асмом только одно - более менее безопасность кода при незнании особенностей работы машинных команд.

anonymous ()
Ответ на: комментарий от BattleCoder

OpenCL слишком «шейдерный» и неуклюжий, факториал рекурсией или там обход дерева на нем не сделать, только DSP-подобные вычисления.

anonymous ()
Ответ на: комментарий от quickquest

промежуточный вариант между ассемблером и стандартным языком C

Попытка реанимировать C--?

Почитай немного о структуре компиляторов.

AiFiLTr0 ★★★★★ ()
Ответ на: комментарий от alx_me

По сравнению с icc как?

открыто, бесплатно, работает на arm

dimon555 ★★★★★ ()
Ответ на: комментарий от dimon555

Да я понимаю что с ICC (для анонима: не компилятор) один геморрой. Однако там есть все векторные операции покрытые SSE вплоть то v4. Не одна SSE инструкция, а набор покрывающий набор. Хотелось бы для Ъ ответа это именно оно или всё же C-- как тут писали недалёкие?

alx_me ★★☆ ()

Компилятор GCC позволяет использовать промежуточный вариант между ассемблером и стандартным языком C, который позволяет повысить скорость работы приложения и использовать специфические возможности центрального процессора

Следует напомнить - что данные возможности возможны к использованию только для GNU GPL v3 лицензированных программ. Остальные пролетают.

anonymous ()

А есть вариант статьи в формате, пригодном для распечатки? (Да, я ненавижу деревья.)

anonymous ()

Внутренние функции компилятора GCC для обработки данных в векторной форме
Высокая скорость работы очень важна для мультимедийных и графических приложений

Расскажите об этом Valve, а то их Steam игры безбожно в Linux тормозят, в то время как виндой все ок.

Xintrea ★★★★★ ()
Ответ на: комментарий от alx_me

«набор покрывающий набор»?

GCC и ICC совместимы по набору интринсиков к интеловским MMX/SSE/AVX и пр. (а именно они и описаны в статье).

Т.е. всё что вы увидите в Intel Software Developer’s Manual под заголовком «Intel C/C++ Compiler Intrinsic Equivalents» должно быть и в GCC.

Dolfer ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.