LINUX.ORG.RU

оптимизация фортрановских программ


0

0

При использование компиляторов gfortran-4.3 и ifort-10.0 время работы программы (на Intel Core2Duo) отличается в два раза в пользу интеловского компилятора. При компиляции используются следующие опции оптимизации:

ifort -O3 -ipo -axN -arch pn4

gfortran -O3 --fast-math -mtune=core2

Кто-нибудь работает с этими компиляторами? Можно ли приблизить скорость работы при использовании gfortran к ifort? Перебирать возможные варианты опций оптимизации слищком долго, если кто работает с gfortran подкажите какие оптимизации вы используете.

anonymous

Сообщений от интеловского компилятора вида loop was parallelised не было? Используется ли второй проц при работе программы?

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

>Сообщений от интеловского компилятора вида loop was parallelised не было? Используется ли второй проц при работе программы?

Были. Нет.

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

Imho ifort распараллелил(раскидал по нитям) некоторые циклы, что и ускорило работу приложения. Второй вопрос был про то, загружен ли второе ядро во время работы, т.е. например если вызвать time <имя проги> будет ли cputime больше walltime?

Попробуй использовать такой флаг:

-ftree-parallelize-loops=n

Parallelize loops, i.e., split their iteration space to run in n threads. This is only possible for loops whose iterations are independent and can be arbitrarily reordered. The optimization is only profitable on multiprocessor machines, for loops that are CPU-intensive, rather than constrained e.g. by memory bandwidth. This option implies -pthread, and thus is only supported on targets that have support for -pthread.

Если не поможет, но очень нужно - смотри в сторону OpenMP и соответственно

-fopenmp

Enable handling of OpenMP directives CW#pragma omp in C/ and CW!$omp in Fortran. When -fopenmp is specified, the compiler generates parallel code according to the OpenMP Application Program Interface v2.5 <http://www.openmp.org/>;. This option implies -pthread, and thus is only supported on targets that have support for -pthread.

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

Спасбо за советы. Попробовал добавить

-ftree-parallelize-loops=2

Получил ошибку компилятора((

внутренняя ошибка компилятора: в omp_reduction_init, в omp-low.c:1588

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

Попробуй еще и -fopenmp добавить, он его использует, может в этом дело. + тебе потребуется либа libgomp, она иногда идет отдельным пакетом и не факт, что она у тебя установлена.

[this@this ~]$ rpm -q --info libgomp-4.3.0-6.i386 Name : libgomp Relocations: (not relocatable) Version : 4.3.0 Vendor: Fedora Project Release : 6 Build Date: Fri 04 Apr 2008 07:14:07 PM MSD Install Date: Sun 06 Apr 2008 12:00:12 PM MSD Build Host: xenbuilder2.fedora.redhat.com Group : System Environment/Libraries Source RPM: gcc-4.3.0-6.src.rpm Size : 68432 License: GPLv3+ and GPLv2+ with exceptions Signature : (none) Packager : Fedora Project URL : http://gcc.gnu.org Summary : GCC OpenMP 2.5 shared support library Description : This package contains GCC shared support library which is needed for OpenMP 2.5 support.

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

Проблема была в -O3 оптимизации. При -O2 все работает. К сожалению, это не дало прироста производительности.

anonymous
()

на личном опыты убедился что с -ipo надо быть осторожнее

как тебе правильно подсказали, надо распараллеливать циклы (лучше вручную) если есть возможность.

но ifort побыстрее будет по-любому... пока...

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