Включите инструкции AVX с помощью mex, используя gcc 4.6.1

Я хотел бы возиться с некоторыми встроенными функциями AVX. Я хотел бы, чтобы gcc использовал AVX исключительно, если возможно, аналогично /arch:AVX в визуальной студии. Есть ли способ сделать это в GCC с Mex?

Я пытался использовать что-то вроде:

mex -g -O $CFLAGS='$CFLAGS -march=corei7-avx' ncorr_alg_rgdic.cpp standard_datatypes.o ncorr_datatypes.o

Но компилятор говорит eval: 1: = -march=corei7-avx: not found, Кто-нибудь знает, какой флаг мне следует использовать и как заставить мекса принять его? По умолчанию кажется, что он использует инструкции SSE (глядя на вывод сборки, я вижу некоторые mulsds) но я не хочу смешивать SSE с AVX, как я прочитал Вот что это может вызвать проблемы.

EDIT1:

Я использую Ubuntu 11.04 с GCC 4.6.1.

EDIT2:

Компилирование с:
mex CXXOPTIMFLAGS='-mtune=corei7-avx -S' ncorr_alg_rgdic.cpp standard_datatypes.o ncorr_datatypes.o

Урожайность:

movsd   -304(%rbp), %xmm1
movsd   .LC16(%rip), %xmm0
mulsd   %xmm0, %xmm1

Компилирование с:
mex CXXOPTIMFLAGS='-mavx -S' ncorr_alg_rgdic.cpp standard_datatypes.o ncorr_datatypes.o
а также mex CXXOPTIMFLAGS='-march=corei7-avx -S' ncorr_alg_rgdic.cpp standard_datatypes.o ncorr_datatypes.o
Оба дают:

vmovsd  -304(%rbp), %xmm1
vmovsd  .LC16(%rip), %xmm0
vmulsd  %xmm0, %xmm1, %xmm1

Теперь я уверен mulsd это инструкция sse. Является vmulsd инструкция AVX (как ни странно, поиск в Google не дал результатов)? Я тоже не вижу ymm используемые регистры, что странно.

1

Решение

я обнаружил, что mex использует этот формат:

mex -v CFLAGS = ‘$ CFLAGS -Wall’ LDFLAGS = ‘$ LDFLAGS -w’ yprime.c

Вы должны попытаться удалить первый знак $. -mtune = corei7-avx должен быть прав.

2

Другие решения

Других решений пока нет …