Как векторизовать с GCC?

Вы возвращаете адрес локальной переменной, выделенной в стеке. Когда ваша функция вернется, хранилище для всех локальных переменных (например, wc) освобождается и может быть немедленно перезаписано чем-то другим.

Чтобы исправить это, вы можете передать размер буфера на GetWC, но тогда у вас есть тот же интерфейс, что и mbstowcs. Или вы могли бы выделить новый буфер внутри GetWC и вернуть указатель на него, оставив его вызывающему, чтобы освободить буфер.

16
задан David Guyon 11 June 2014 в 12:45
поделиться

2 ответа

Исходная страница предлагает детали о получении gcc для автоматической векторизации циклов, включая несколько примеров:

http://gcc.gnu.org/projects/tree-ssa/vectorization.html

, В то время как примеры являются большими, оказывается, что синтаксис для вызова тех опций с последним GCC, кажется, изменился немного, видел теперь:

, Таким образом, следующие опции будут работать на x86 микросхемы с SSE2, давая журнал циклов, которые были векторизованы:

gcc -O2 -ftree-vectorize -msse2 -ftree-vectorizer-verbose=5

Примечание, что-msse является также возможностью, но это только векторизует циклы с помощью плаваний, не, удваивается или ints.

21
ответ дан malat 11 June 2014 в 12:45
поделиться
  • 1
    Эй, Вы нарушили мое авторское право из комментария выше! I' m отправка команды адвокатов RIAA после Вас.:-) – Carl Witthoft 7 June 2012 в 17:21

Существует простой проход (промежуточное представление GCC) pass_vectorize . Этот проход включает автоматическую векторизацию на уровне gimple.

Для включения автовекторизации (GCC V4.4.0) нам необходимо выполнить следующие шаги:

  1. Укажите количество слов в векторе в соответствии с целевой архитектурой. Это может быть сделано путем определения макроса UNITS_PER_SIMD_WORD .
  2. Возможные векторные режимы должны быть определены в отдельном файле, обычно -modes.def . Этот файл должен находиться в каталоге, в котором находятся другие файлы, содержащие описания компьютеров. (Согласно сценарию конфигурации. Если вы можете изменить сценарий, вы можете поместить файл в любой каталог, в котором он должен находиться).
  3. Режимы, которые должны учитываться при векторизации в соответствии с целевой архитектурой. Например, 4 слова будут составлять вектор, или восемь полуслов образуют вектор, или два двойных слова образуют вектор. Подробности этого нужно упомянуть в файле -modes.def . Например:

    VECTOR_MODES (INT, 8); / * V8QI V4HI V2SI /
    VECTOR_MODES (INT, 16); /
    V16QI V8HI V4SI V2DI /
    VECTOR_MODES (FLOAT, 8); /
    V4HF V2SF * /
  4. Создайте порт. Векторизацию можно включить с помощью параметров командной строки -O2 -ftree-vectorize .

8
ответ дан 30 November 2019 в 12:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: