2013-05-15 3 views
0

Я бегу mkl_lab_solution.c, который является примером для использования МКЛ, я могу скомпилировать его правильно, в то время как я бегу, я получил Сегментация fault.My выполнения ниже:ошибка сегментирования во время работы для интерфейса MKL в

  1. OS это версия CentOS 6.3
  2. GCC является 4.1.2
  3. является mkl_10.3.12.361 MKL
  4. Makefile ниже

    -g -L GCC/Opt/Intel/компо ser_xe_2011_sp1.12.361/mkl/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_lp64 -lmkl_intel_sp2dp -lmkl_intel_thread -lmkl_core -lpthread -L/opt/intel/composer_xe_2011_sp1.12.361/compiler/lib/intel64 -liomp5 -L/usr/lib64 -lstdC++ -I/выбрать/Intel/composer_xe_2011_sp1.12.361/мкл/включить -o тест MKL-ЛАБ-solution.c

ответ

2

Поскольку это прекрасно работает на моей системе, позвольте мне указать вам на возможные ошибки. Во-первых, вам нужно запустить . /path/to/intel/compilervars.sh intel64, так что все переменные окружения установлены, например MKLROOT. Во-вторых, проверьте на intel mkl link line advisor параметры в вашей системе. Поэтому, читая вашу команду компиляции, я предполагаю: linux, компилятор gnu, динамическая связь, 64-битная целевая архитектура, 64-разрядный указатель, многопоточная библиотека Intel omp.

Эти параметры дают мне:

опции компоновщика:

-L$(MKLROOT)/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm

опции компиляции:

-DMKL_ILP64 -m64 -I$(MKLROOT)/include

По какой причине скобки ARO und MKLROOT не работают на bash, поэтому просто удалите их. Далее не забудьте поставить все параметры компиляции перед параметрами компоновщика. В последней командной строки следует читать так:

gcc mkl-lab-solution.c -DMKL_ILP64 -m64 -I$MKLROOT/include -L$MKLROOT/lib/intel64 -lmkl_intel_ilp64 -lmkl_intel_thread -lmkl_core -liomp5 -lpthread -lm

Поскольку вы получаете ошибки во время выполнения, я подозреваю, что вы ссылаетесь библиотеки Intel MKL с объектами, скомпилированные для различных слоев интерфейса.

+0

спасибо! Это работает над вашим описанием. Еще один вопрос заключается в том, что я получаю варианты компоновщика от [intel mkl link line advisor] (http://software.intel.com/en-us/articles/intel-mkl-link- line-advisor), детали: «-Wl, - start-group $ (MKLROOT) /lib/intel64/libmkl_intel_lp64.a $ (MKLROOT) /lib/intel64/libmkl_intel_thread.a $ (MKLROOT)/lib/intel64/libmkl_core .a $ (MKLROOT) /lib/intel64/libmkl_blacs_openmpi_lp64.a -Wl, - end-group -liomp5 -lpthread -lm ", я не знаю параметров с именем -Wl, - start-group, не могли бы вы объяснить для меня, и я мог пропустить их и не потерять производительность, потому что не смог скомпилировать с nvcc – taoyuanjl

+1

Когда вы выбираете статическое связывание, вам нужно указать необходимые объектные файлы. Это делается в файлах -Wl, - start-group object -Wl, - end-group'. Преимущество статического связывания заключается в том, что все используемые функции скомпилированы в вашу библиотеку/exectuable и не должны быть доступны в 'LD_LIBRARY_PATH'. Ваш исполняемый файл просто увеличивается. Нет никакой разницы в производительности. Вы можете пропустить их, если используете общую ссылку, но вы должны убедиться, что все библиотеки находятся в вашем LD_LIBRARAY_PATH, запустите '/path/to/intel/compilervars.sh intel64' перед выполнением вашей программы. – Bort

+1

Я еще не пробовал nvcc с mkl.К сожалению, я не могу комментировать это. Технически я считаю, что это должно сработать. – Bort

Смежные вопросы