2013-10-10 5 views
1

Я пытаюсь запустить HPL 2.1 в своих системах Centos.Неопределенные ссылки ATLAS, MPI, CBLAS при компиляции HPL в Centos6

Это мой макияж файл:

[[email protected] hpl]# cat Make.cadejos 
# 
# -- High Performance Computing Linpack Benchmark (HPL)     
#  HPL - 2.1 - October 26, 2012       
#  Antoine P. Petitet             
#  University of Tennessee, Knoxville         
#  Innovative Computing Laboratory         
#  (C) Copyright 2000-2008 All Rights Reserved      
#                  
# -- Copyright notice and Licensing terms:        
#                  
# Redistribution and use in source and binary forms, with or without 
# modification, are permitted provided that the following conditions 
# are met:                
#                  
# 1. Redistributions of source code must retain the above copyright 
# notice, this list of conditions and the following disclaimer.   
#                  
# 2. Redistributions in binary form must reproduce the above copyright 
# notice, this list of conditions, and the following disclaimer in the 
# documentation and/or other materials provided with the distribution. 
#                  
# 3. All advertising materials mentioning features or use of this 
# software must display the following acknowledgement:     
# This product includes software developed at the University of 
# Tennessee, Knoxville, Innovative Computing Laboratory.    
#                  
# 4. The name of the University, the name of the Laboratory, or the 
# names of its contributors may not be used to endorse or promote 
# products derived from this software without specific written 
# permission.               
#                  
# -- Disclaimer:              
#                  
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS 
# ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT 
# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR 
# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE UNIVERSITY 
# OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT 
# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 
# DATA OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 
# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
# ###################################################################### 
# 
# ---------------------------------------------------------------------- 
# - shell -------------------------------------------------------------- 
# ---------------------------------------------------------------------- 
# 
SHELL  = /bin/sh 
# 
CD   = cd 
CP   = cp 
LN_S   = ln -s 
MKDIR  = mkdir 
RM   = /bin/rm -f 
TOUCH  = touch 
# 
# ---------------------------------------------------------------------- 
# - Platform identifier ------------------------------------------------ 
# ---------------------------------------------------------------------- 
# 
ARCH   = Linux_PII_CBLAS 
# 
# ---------------------------------------------------------------------- 
# - HPL Directory Structure/HPL library ------------------------------ 
# ---------------------------------------------------------------------- 
# 
TOPdir  = $(HOME)/hpl 
INCdir  = $(TOPdir)/include 
BINdir  = $(TOPdir)/bin/$(ARCH) 
LIBdir  = $(TOPdir)/lib/$(ARCH) 
# 
HPLlib  = $(LIBdir)/libhpl.a 
# 
# ---------------------------------------------------------------------- 
# - Message Passing library (MPI) -------------------------------------- 
# ---------------------------------------------------------------------- 
# MPinc tells the C compiler where to find the Message Passing library 
# header files, MPlib is defined to be the name of the library to be 
# used. The variable MPdir is only used for defining MPinc and MPlib. 
# 
MPdir  = /usr/include/mpich2-x86_64 
MPinc  = -I$(MPdir) 
MPlib  = /usr/lib64/mpich2/lib/libmpich.a 

# 
# ---------------------------------------------------------------------- 
# - Linear Algebra library (BLAS or VSIPL) ----------------------------- 
# ---------------------------------------------------------------------- 
# LAinc tells the C compiler where to find the Linear Algebra library 
# header files, LAlib is defined to be the name of the library to be 
# used. The variable LAdir is only used for defining LAinc and LAlib. 
# 
LAdir  = /usr/include/atlas-x86_64-base/ 
LAinc  = -I$(LAdir) 
LAlib  = /usr/lib64/atlas/libatlas.a /usr/lib64/atlas/libcblas.a 
# 
# ---------------------------------------------------------------------- 
# - F77/C interface -------------------------------------------------- 
# ---------------------------------------------------------------------- 
# You can skip this section if and only if you are not planning to use 
# a BLAS library featuring a Fortran 77 interface. Otherwise, it is 
# necessary to fill out the F2CDEFS variable with the appropriate 
# options. **One and only one** option should be chosen in **each** of 
# the 3 following categories: 
# 
# 1) name space (How C calls a Fortran 77 routine) 
# 
# -DAdd_    : all lower case and a suffixed underscore (Suns, 
#      Intel, ...),       [default] 
# -DNoChange   : all lower case (IBM RS6000), 
# -DUpCase   : all upper case (Cray), 
# -DAdd__    : the FORTRAN compiler in use is f2c. 
# 
# 2) C and Fortran 77 integer mapping 
# 
# -DF77_INTEGER=int : Fortran 77 INTEGER is a C int,   [default] 
# -DF77_INTEGER=long : Fortran 77 INTEGER is a C long, 
# -DF77_INTEGER=short : Fortran 77 INTEGER is a C short. 
# 
# 3) Fortran 77 string handling 
# 
# -DStringSunStyle : The string address is passed at the string loca- 
#      tion on the stack, and the string length is then 
#      passed as an F77_INTEGER after all explicit 
#      stack arguments,      [default] 
# -DStringStructPtr : The address of a structure is passed by a 
#      Fortran 77 string, and the structure is of the 
#      form: struct {char *cp; F77_INTEGER len;}, 
# -DStringStructVal : A structure is passed by value for each Fortran 
#      77 string, and the structure is of the form: 
#      struct {char *cp; F77_INTEGER len;}, 
# -DStringCrayStyle : Special option for Cray machines, which uses 
#      Cray fcd (fortran character descriptor) for 
#      interoperation. 
# 
F2CDEFS  = 
# 
# ---------------------------------------------------------------------- 
# - HPL includes/libraries/specifics ------------------------------- 
# ---------------------------------------------------------------------- 
# 
HPL_INCLUDES = -I$(INCdir) -I$(INCdir)/$(ARCH) $(LAinc) $(MPinc) 
HPL_LIBS  = $(HPLlib) $(LAlib) $(MPlib) 
# 
# - Compile time options ----------------------------------------------- 
# 
# -DHPL_COPY_L   force the copy of the panel L before bcast; 
# -DHPL_CALL_CBLAS  call the cblas interface; 
# -DHPL_CALL_VSIPL  call the vsip library; 
# -DHPL_DETAILED_TIMING enable detailed timers; 
# 
# By default HPL will: 
# *) not copy L before broadcast, 
# *) call the BLAS Fortran 77 interface, 
# *) not display detailed timing information. 
# 
HPL_OPTS  = -DHPL_CALL_CBLAS -DHPL_DETAILED_TIMING 
# 
# ---------------------------------------------------------------------- 
# 
HPL_DEFS  = $(F2CDEFS) $(HPL_OPTS) $(HPL_INCLUDES) 
# 
# ---------------------------------------------------------------------- 
# - Compilers/linkers - Optimization flags --------------------------- 
# ---------------------------------------------------------------------- 
# 
CC   = /usr/bin/gcc 
CCNOOPT  = $(HPL_DEFS) 
CCFLAGS  = $(HPL_DEFS) -fomit-frame-pointer -O3 -funroll-loops 
# 
# On some platforms, it is necessary to use the Fortran linker to find 
# the Fortran internals used in the BLAS library. 
# 
LINKER  = /usr/bin/g77 
LINKFLAGS = $(CCFLAGS) 
# 
ARCHIVER  = ar 
ARFLAGS  = r 
RANLIB  = echo 
# 
# ---------------------------------------------------------------------- 

я получил некоторые ошибки фиксированных здесь и там, но я не могу пройти мимо этой партии о»неопределенных ссылках:

/usr/bin/gcc -o HPL_pdtest.o -c -DHPL_CALL_CBLAS -DHPL_DETAILED_TIMING -I/root/hpl/include -I/root/hpl/include/Linux_PII_CBLAS -I/usr/include/atlas-x86_64-base/ -I/usr/include/mpich2-x86_64 -fomit-frame-pointer -O3 -funroll-loops ../HPL_pdtest.c 
/usr/bin/g77 -DHPL_CALL_CBLAS -DHPL_DETAILED_TIMING -I/root/hpl/include -I/root/hpl/include/Linux_PII_CBLAS -I/usr/include/atlas-x86_64-base/ -I/usr/include/mpich2-x86_64 -fomit-frame-pointer -O3 -funroll-loops -o /root/hpl/bin/Linux_PII_CBLAS/xhpl HPL_pddriver.o   HPL_pdinfo.o   HPL_pdtest.o /root/hpl/lib/Linux_PII_CBLAS/libhpl.a /usr/lib64/atlas/libatlas.a /usr/lib64/atlas/libcblas.a /usr/lib64/mpich2/lib/libmpich.a 
/usr/lib64/atlas/libcblas.a(cblas_dgemm.o): In function `cblas_dgemm': 
(.text+0x321): undefined reference to `ATL_dsyrk' 
/usr/lib64/atlas/libcblas.a(cblas_dgemm.o): In function `cblas_dgemm': 
(.text+0x186): undefined reference to `ATL_dgemm' 
/usr/lib64/atlas/libcblas.a(cblas_dgemm.o): In function `cblas_dgemm': 
(.text+0x35e): undefined reference to `ATL_dsyreflect' 
... A LOT MORE ... 
/usr/lib64/mpich2/lib/libmpich.a(info_getvallen.o): In function `MPI_Info_get_valuelen': 
(.text+0x37b): undefined reference to `pthread_setspecific' 
/usr/lib64/mpich2/lib/libmpich.a(info_getvallen.o): In function `MPI_Info_get_valuelen': 
(.text+0x38d): undefined reference to `pthread_getspecific' 
/usr/lib64/mpich2/lib/libmpich.a(info_getvallen.o): In function `MPI_Info_get_valuelen': 
(.text+0x3b7): undefined reference to `pthread_setspecific' 
collect2: ld returned 1 exit status 
make[2]: *** [dexe.grd] Error 1 
make[2]: Leaving directory `/root/hpl/testing/ptest/cadejos' 
make[1]: *** [build_tst] Error 2 
make[1]: Leaving directory `/root/hpl' 
make: *** [build] Error 2 

Я думаю, что это что-то делайте это с помощью пути libs, но я не могу продолжить ...

Неужели кто-нибудь сталкивается с проблемой или проблемой?

ответ

0

выглядит как его не находящий атлас и Pthreads

undefined reference to 'ATL_dsyreflect'

undefined reference to 'pthread_setspecific'

вам нужно будет сделать ссылку на это должным образом или в случае атласа он может быть построен неправильно.

я считаю, Pthreads требует -lpthread флага, который я бы не видеть выше, и я не вижу ничего с атласом

0

Что касается ошибки Pthreads: каждая библиотека MPI требует определенного количества внешних зависимостей, которые будет связана, когда создавая окончательный исполняемый файл. Вот почему не рекомендуется использовать gcc или g77, чтобы связать исполняемый файл MPI. Скорее всего следует использовать mpicc или mpif90 или другую оболочку компилятора MPI. В любом случае, Pthreads связан, если указан -pthread.

Что касается ошибок ATLAS: порядок, в котором статические библиотеки перечислены в командной строке (это не для динамических библиотек). В вашем случае у вас есть:

... /usr/lib64/atlas/libatlas.a /usr/lib64/atlas/libcblas.a ... 

При таком расположении компоновщик не сможет разрешить любые ссылки из кода внутри libcblas.a закодировать внутри libatlas.a. Это обусловлено разрешением символа одиночного прохода, выполняемым компоновщиком. libcblas.a должен прибыть до libatlas.a, не после.