Оптимизированный AVX код не работает на Linux Redhat 5.6 - PullRequest
3 голосов
/ 08 февраля 2012

У меня есть простой тестовый код, который я пытаюсь сгенерировать с помощью AVX-оптимизированного кода для использования icc v12.1 в Linux Redhat 5.6.Код выглядит так:

int main() {
    double sum = 0.0;
    for (unsigned int i = 0; i < 1024; i++) {
        sum += static_cast<double>(i);
    }

    std::cout << "Sum: "<< sum << std::endl;
    return 0;
}

И я скомпилирую его (а в векторном отчете говорится, что цикл был векторизован):

icc -xavx -vec-report1  main.cpp

Когда я запускаю код, я получаюследующая ошибка:

Fatal Error: This program was not built to run in your system.
Please verify that both the operating system and the processor support Intel(R) AVX.

Я уверен, что процессор поддерживает AVX, но у кого-нибудь еще есть проблемы с AVX на Redhat 5.6?

1 Ответ

5 голосов
/ 08 февраля 2012

В Red Hat Enterprise Linux 5.x используется базовая версия ядра Linux 2.6.18. Вдобавок к этому Red Hat бэкпортирует выбранные патчи и новые функциональные возможности из более поздних версий ядра. как он считает нужным в течение жизни релизной семьи. Итак, хотя ядро ​​основано на 2.6.18, вы можете увидеть некоторые дополнительные функции, которые появились только в более поздних версиях основного ядра.

С учетом вышесказанного, ядро ​​Linux не поддерживало AVX до версии 2.6.30 ( ссылка ), поэтому кажется, что это не было одной из функций, которые Red Hat перенесла в 5.x серии. Согласно этой записи на форумах Portland Group (производитель компиляторов), полная поддержка не появлялась до версии 6.2 (CentOS по сути эквивалентен RHEL).

...