【问题标题】:Can't compile MAGMA 1.3 on Ubuntu 10.04, CUDA 5.0无法在 Ubuntu 10.04、CUDA 5.0 上编译 MAGMA 1.3
【发布时间】:2013-01-17 12:14:28
【问题描述】:

我正在尝试在 Ubuntu 10.04 上编译 MAGMA 库,但我卡住了。

来自自述文件:

要安装 MAGMA,请修改 make.inc 文件以指示 CUDA、CPU BLAS 和 LAPACK 在您的系统上的安装位置。示例
在 make.inc.mkl、make.inc.acml、make.inc.goto 和
中给出 make.inc.atlas,展示了如何相应地链接到 MKL、ACML、
转到 BLAS 或 ATLAS BLAS。对make.inc进行适当修改后
文件,键入“make”,将创建 1) libmagma.a 和 'lib' 目录中的 libmagmablas.a 库 2) 测试驱动程序 目录“测试”。

所以,我安装了所需的包:

apt-get install libatlas-base-dev liblapack-dev libf2c2-dev gfortran

make.inc.atlas复制到make.inc修改CUDA路径、nvcc路径和liblapack.a路径,并删除两个不必要的链接目录。

完整参考,这里是原文make.inc.atlas

#//////////////////////////////////////////////////////////////////////////////
#   -- MAGMA (version 1.3.0) --
#      Univ. of Tennessee, Knoxville
#      Univ. of California, Berkeley
#      Univ. of Colorado, Denver
#      November 2012
#//////////////////////////////////////////////////////////////////////////////

#
# GPU_TARGET specifies for which GPU you want to compile MAGMA:
#     "Tesla" (NVIDIA compute capability 1.x cards)
#     "Fermi" (NVIDIA compute capability 2.x cards)
# See http://developer.nvidia.com/cuda-gpus

GPU_TARGET = Fermi

CC        = gcc
NVCC      = nvcc
FORT      = gfortran

ARCH      = ar
ARCHFLAGS = cr
RANLIB    = ranlib

OPTS      = -O3 -DADD_
F77OPTS   = -O3 -DADD_
FOPTS     = -O3 -DADD_ -x f95-cpp-input
NVOPTS    = -O3 -DADD_ --compiler-options -fno-strict-aliasing -DUNIX
LDOPTS    = -fPIC -Xlinker -zmuldefs

LIB       = /home/tomov/LIB/lapack-lite-3.1.1/lapack_LINUX64.a \
            -lf77blas -latlas -lcblas -lf2c -lcublas -lm

CUDADIR   = /usr/local/cuda-3.0

LIBDIR    = -L/home/tomov/LIB/ATLAS/lib/Linux_UNKNOWNSSE2 \
            -L/home/tomov/LIB/CLAPACK-3.1.1/F2CLIBS/ \
            -L$(CUDADIR)/lib64
INC       = -I$(CUDADIR)/include

在这里,我修改后的文件保存到make.inc

#//////////////////////////////////////////////////////////////////////////////
#   -- MAGMA (version 1.3.0) --
#      Univ. of Tennessee, Knoxville
#      Univ. of California, Berkeley
#      Univ. of Colorado, Denver
#      November 2012
#//////////////////////////////////////////////////////////////////////////////

#
# GPU_TARGET specifies for which GPU you want to compile MAGMA:
#     "Tesla" (NVIDIA compute capability 1.x cards)
#     "Fermi" (NVIDIA compute capability 2.x cards)
# See http://developer.nvidia.com/cuda-gpus

GPU_TARGET = Fermi

CC        = gcc
NVCC      = /usr/local/cuda-5.0/bin/nvcc
FORT      = gfortran

ARCH      = ar
ARCHFLAGS = cr
RANLIB    = ranlib

OPTS      = -O3 -DADD_
F77OPTS   = -O3 -DADD_
FOPTS     = -O3 -DADD_ -x f95-cpp-input
NVOPTS    = -O3 -DADD_ --compiler-options -fno-strict-aliasing -DUNIX
LDOPTS    = -fPIC -Xlinker -zmuldefs

LIB       = /usr/lib/liblapack.a \
            -lf77blas -latlas -lcblas -lf2c -lcublas -lm

CUDADIR   = /usr/local/cuda-5.0

LIBDIR    = -L$(CUDADIR)/lib64
INC       = -I$(CUDADIR)/include

所以,我运行 make 并得到 this error。我应用了那里提出的解决方案,到目前为止,编译仍在继续:

make[1]: Entering directory `/usr/src/magma-1.3.0/testing'
gcc -O3 -DADD_ -DHAVE_CUBLAS -DGPUSHMEM=200 -I/usr/local/cuda-5.0/include -I../include -I../control -c /usr/local/cuda-5.0/src/fortran.c -o fortran.o
In file included from /usr/local/cuda-5.0/src/fortran.c:67:
/usr/local/cuda-5.0/src/fortran_common.h:405:2: error: #error unsupported Fortran compiler
make[1]: *** [fortran.o] Error 1
make[1]: Leaving directory `/usr/src/magma-1.3.0/testing'
make: *** [test] Error 2

我能做什么?

【问题讨论】:

    标签: linux cuda compiler-errors fortran ubuntu-10.04


    【解决方案1】:

    简单的解决方法:如下设置 FORT:

    FORT      = gfortran -DCUBLAS_GFORTRAN
    

    【讨论】:

      【解决方案2】:

      这似乎是一个 CUDA 问题。打开fortran_common.h,找到这个条件:

      #if defined(CUBLAS_GFORTRAN) || defined (CUBLAS_G95)
      

      这个条件应该满足,AFAIK。但它没有,所以只需删除该行,并删除所有其他 elsifendif 行和完整路径。文件fortran_common.h 应该是这样的:

      /*
       * Copyright 1993-2012 NVIDIA Corporation.  All rights reserved.
       *
       * NOTICE TO LICENSEE:
       *
       * This source code and/or documentation ("Licensed Deliverables") are
       * subject to NVIDIA intellectual property rights under U.S. and
       * international Copyright laws.
       *
       * These Licensed Deliverables contained herein is PROPRIETARY and
       * CONFIDENTIAL to NVIDIA and is being provided under the terms and
       * conditions of a form of NVIDIA software license agreement by and
       * between NVIDIA and Licensee ("License Agreement") or electronically
       * accepted by Licensee.  Notwithstanding any terms or conditions to
       * the contrary in the License Agreement, reproduction or disclosure
       * of the Licensed Deliverables to any third party without the express
       * written consent of NVIDIA is prohibited.
       *
       * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
       * LICENSE AGREEMENT, NVIDIA MAKES NO REPRESENTATION ABOUT THE
       * SUITABILITY OF THESE LICENSED DELIVERABLES FOR ANY PURPOSE.  IT IS
       * PROVIDED "AS IS" WITHOUT EXPRESS OR IMPLIED WARRANTY OF ANY KIND.
       * NVIDIA DISCLAIMS ALL WARRANTIES WITH REGARD TO THESE LICENSED
       * DELIVERABLES, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY,
       * NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE.
       * NOTWITHSTANDING ANY TERMS OR CONDITIONS TO THE CONTRARY IN THE
       * LICENSE AGREEMENT, IN NO EVENT SHALL NVIDIA BE LIABLE FOR ANY
       * SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL DAMAGES, OR ANY
       * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
       * WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
       * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
       * OF THESE LICENSED DELIVERABLES.
       *
       * U.S. Government End Users.  These Licensed Deliverables are a
       * "commercial item" as that term is defined at 48 C.F.R. 2.101 (OCT
       * 1995), consisting of "commercial computer software" and "commercial
       * computer software documentation" as such terms are used in 48
       * C.F.R. 12.212 (SEPT 1995) and is provided to the U.S. Government
       * only as a commercial end item.  Consistent with 48 C.F.R.12.212 and
       * 48 C.F.R. 227.7202-1 through 227.7202-4 (JUNE 1995), all
       * U.S. Government End Users acquire the Licensed Deliverables with
       * only those rights set forth herein.
       *
       * Any use of the Licensed Deliverables in individual and commercial
       * software must include, in the user documentation and internal
       * comments to the code, the above Disclaimer and U.S. Government End
       * Users Notice.
       */
      
      
      
      /* Define CUBLAS_FORTRAN_COMPILER for Windows needed because 
         tbe compilation is done from the perl script fortran_nightly.pl which
         does not include fortran_tools.mk
         On Linux and Apple, CFLAGS is setup with fortran_tools.mk
      */
      #if defined(_WIN32)
      #ifndef CUBLAS_INTEL_FORTRAN
      #define CUBLAS_INTEL_FORTRAN
      #endif
      #endif
      
      #if defined(CUBLAS_GFORTRAN)
      /* using option -ff2c make the ABI compatible with F77
         No need to define RETURN_COMPLEX, which cause problem 
         on Gfortran 4.x on 32 bit
      */
      /* #define RETURN_COMPLEX 1 */
      #endif
      
      
      /* NOTE: Must use -fno-second-underscore when building Fortran source with g77
       *       g77 invocation may not use -fno-f2c, which forces different return 
       *       type conventions than the one used below
       */
      #define CUBLAS_INIT             cublas_init_
      #define CUBLAS_SHUTDOWN         cublas_shutdown_
      #define CUBLAS_ALLOC            cublas_alloc_
      #define CUBLAS_FREE             cublas_free_
      #define CUBLAS_SET_VECTOR       cublas_set_vector_
      #define CUBLAS_GET_VECTOR       cublas_get_vector_
      #define CUBLAS_SET_MATRIX       cublas_set_matrix_
      #define CUBLAS_GET_MATRIX       cublas_get_matrix_
      #define CUBLAS_GET_ERROR        cublas_get_error_
      #define CUBLAS_XERBLA           cublas_xerbla_
      #define CUBLAS_ISAMAX           cublas_isamax_
      #define CUBLAS_ISAMIN           cublas_isamin_
      #define CUBLAS_SASUM            cublas_sasum_
      #define CUBLAS_SAXPY            cublas_saxpy_
      #define CUBLAS_SCOPY            cublas_scopy_
      #define CUBLAS_SDOT             cublas_sdot_
      #define CUBLAS_SNRM2            cublas_snrm2_
      #define CUBLAS_SROT             cublas_srot_
      #define CUBLAS_SROTG            cublas_srotg_
      #define CUBLAS_SROTM            cublas_srotm_
      #define CUBLAS_SROTMG           cublas_srotmg_
      #define CUBLAS_SSCAL            cublas_sscal_
      #define CUBLAS_SSWAP            cublas_sswap_
      #define CUBLAS_CAXPY            cublas_caxpy_
      #define CUBLAS_CCOPY            cublas_ccopy_
      #define CUBLAS_CROT             cublas_crot_
      #define CUBLAS_CROTG            cublas_crotg_
      #define CUBLAS_CSCAL            cublas_cscal_
      #define CUBLAS_CSROT            cublas_csrot_
      #define CUBLAS_CSSCAL           cublas_csscal_
      #define CUBLAS_CSWAP            cublas_cswap_
      #define CUBLAS_CTRMV            cublas_ctrmv_
      #define CUBLAS_CDOTU            cublas_cdotu_
      #define CUBLAS_CDOTC            cublas_cdotc_
      #define CUBLAS_ICAMAX           cublas_icamax_
      #define CUBLAS_SCASUM           cublas_scasum_
      #define CUBLAS_SCNRM2           cublas_scnrm2_
      #define CUBLAS_SGBMV            cublas_sgbmv_
      #define CUBLAS_SGEMV            cublas_sgemv_
      #define CUBLAS_SGER             cublas_sger_
      #define CUBLAS_SSBMV            cublas_ssbmv_
      #define CUBLAS_SSPMV            cublas_sspmv_
      #define CUBLAS_SSPR             cublas_sspr_
      #define CUBLAS_SSPR2            cublas_sspr2_
      #define CUBLAS_SSYMV            cublas_ssymv_
      #define CUBLAS_SSYR             cublas_ssyr_
      #define CUBLAS_SSYR2            cublas_ssyr2_
      #define CUBLAS_STBMV            cublas_stbmv_
      #define CUBLAS_STBSV            cublas_stbsv_
      #define CUBLAS_STPMV            cublas_stpmv_
      #define CUBLAS_STPSV            cublas_stpsv_
      #define CUBLAS_STRMV            cublas_strmv_
      #define CUBLAS_STRSV            cublas_strsv_
      #define CUBLAS_SGEMM            cublas_sgemm_
      #define CUBLAS_SSYMM            cublas_ssymm_
      #define CUBLAS_SSYR2K           cublas_ssyr2k_
      #define CUBLAS_SSYRK            cublas_ssyrk_
      #define CUBLAS_STRMM            cublas_strmm_
      #define CUBLAS_STRSM            cublas_strsm_
      #define CUBLAS_CGEMM            cublas_cgemm_
      #define CUBLAS_CHEMM            cublas_chemm_
      #define CUBLAS_CSYMM            cublas_csymm_
      #define CUBLAS_CTRMM            cublas_ctrmm_
      #define CUBLAS_CTRSM            cublas_ctrsm_
      #define CUBLAS_CHERK            cublas_cherk_
      #define CUBLAS_CSYRK            cublas_csyrk_
      #define CUBLAS_CHER2K           cublas_cher2k_
      #define CUBLAS_CSYR2K           cublas_csyr2k_
      #define CUBLAS_IDAMAX           cublas_idamax_
      #define CUBLAS_IDAMIN           cublas_idamin_
      #define CUBLAS_DASUM            cublas_dasum_
      #define CUBLAS_DAXPY            cublas_daxpy_
      #define CUBLAS_DCOPY            cublas_dcopy_
      #define CUBLAS_DDOT             cublas_ddot_
      #define CUBLAS_DNRM2            cublas_dnrm2_
      #define CUBLAS_DROT             cublas_drot_
      #define CUBLAS_DROTG            cublas_drotg_
      #define CUBLAS_DROTM            cublas_drotm_
      #define CUBLAS_DROTMG           cublas_drotmg_
      #define CUBLAS_DSCAL            cublas_dscal_
      #define CUBLAS_DSWAP            cublas_dswap_
      #define CUBLAS_ZAXPY            cublas_zaxpy_
      #define CUBLAS_ZCOPY            cublas_zcopy_
      #define CUBLAS_ZROT             cublas_zrot_
      #define CUBLAS_ZROTG            cublas_zrotg_
      #define CUBLAS_ZSCAL            cublas_zscal_
      #define CUBLAS_ZDROT            cublas_zdrot_
      #define CUBLAS_ZDSCAL           cublas_zdscal_
      #define CUBLAS_ZSWAP            cublas_zswap_
      #define CUBLAS_ZDOTU            cublas_zdotu_
      #define CUBLAS_ZDOTC            cublas_zdotc_
      #define CUBLAS_IZAMAX           cublas_izamax_
      #define CUBLAS_DZASUM           cublas_dzasum_
      #define CUBLAS_DZNRM2           cublas_dznrm2_
      #define CUBLAS_DGBMV            cublas_dgbmv_
      #define CUBLAS_DGEMV            cublas_dgemv_
      #define CUBLAS_ZGEMV            cublas_zgemv_
      #define CUBLAS_DGER             cublas_dger_
      #define CUBLAS_DSBMV            cublas_dsbmv_
      #define CUBLAS_DSPMV            cublas_dspmv_
      #define CUBLAS_DSPR             cublas_dspr_
      #define CUBLAS_DSPR2            cublas_dspr2_
      #define CUBLAS_DSYMV            cublas_dsymv_
      #define CUBLAS_DSYR             cublas_dsyr_
      #define CUBLAS_DSYR2            cublas_dsyr2_
      #define CUBLAS_DTBMV            cublas_dtbmv_
      #define CUBLAS_DTBSV            cublas_dtbsv_
      #define CUBLAS_DTPMV            cublas_dtpmv_
      #define CUBLAS_DTPSV            cublas_dtpsv_
      #define CUBLAS_DTRMV            cublas_dtrmv_
      #define CUBLAS_DTRSV            cublas_dtrsv_
      #define CUBLAS_DGEMM            cublas_dgemm_
      #define CUBLAS_DSYMM            cublas_dsymm_
      #define CUBLAS_DSYR2K           cublas_dsyr2k_
      #define CUBLAS_DSYRK            cublas_dsyrk_
      #define CUBLAS_ZSYRK            cublas_zsyrk_
      #define CUBLAS_DTRMM            cublas_dtrmm_
      #define CUBLAS_DTRSM            cublas_dtrsm_
      #define CUBLAS_ZGEMM            cublas_zgemm_
      #define CUBLAS_ZHEMM            cublas_zhemm_
      #define CUBLAS_ZSYMM            cublas_zsymm_
      #define CUBLAS_ZTRMM            cublas_ztrmm_
      #define CUBLAS_ZTRSM            cublas_ztrsm_
      #define CUBLAS_ZHERK            cublas_zherk_
      #define CUBLAS_ZSYRK            cublas_zsyrk_
      #define CUBLAS_ZHER2K           cublas_zher2k_
      #define CUBLAS_ZSYR2K           cublas_zsyr2k_
      
      #define  CUBLAS_CGEMV           cublas_cgemv_
      #define  CUBLAS_CGBMV           cublas_cgbmv_
      #define  CUBLAS_CHEMV           cublas_chemv_
      #define  CUBLAS_CHBMV           cublas_chbmv_
      #define  CUBLAS_CHPMV           cublas_chpmv_
      #define  CUBLAS_CTBMV           cublas_ctbmv_
      #define  CUBLAS_CTPMV           cublas_ctpmv_
      #define  CUBLAS_CTRSV           cublas_ctrsv_
      #define  CUBLAS_CTBSV           cublas_ctbsv_
      #define  CUBLAS_CTPSV           cublas_ctpsv_
      #define  CUBLAS_CGERC           cublas_cgerc_
      #define  CUBLAS_CGERU           cublas_cgeru_
      #define  CUBLAS_CHPR            cublas_chpr_
      #define  CUBLAS_CHPR2           cublas_chpr2_
      #define  CUBLAS_CHER            cublas_cher_
      #define  CUBLAS_CHER2           cublas_cher2_
      
      // stubs for zblat2
      #define CUBLAS_ZGBMV           cublas_zgbmv_
      #define CUBLAS_ZHEMV           cublas_zhemv_
      #define CUBLAS_ZHBMV           cublas_zhbmv_
      #define CUBLAS_ZHPMV           cublas_zhpmv_
      #define CUBLAS_ZTRMV           cublas_ztrmv_
      #define CUBLAS_ZTBMV           cublas_ztbmv_
      #define CUBLAS_ZTPMV           cublas_ztpmv_
      #define CUBLAS_ZTRSV           cublas_ztrsv_
      #define CUBLAS_ZTBSV           cublas_ztbsv_
      #define CUBLAS_ZTPSV           cublas_ztpsv_
      #define CUBLAS_ZGERC           cublas_zgerc_
      #define CUBLAS_ZGERU           cublas_zgeru_
      #define CUBLAS_ZHER            cublas_zher_
      #define CUBLAS_ZHPR            cublas_zhpr_
      #define CUBLAS_ZHER2           cublas_zher2_
      #define CUBLAS_ZHPR2           cublas_zhpr2_
      

      更改后,MAGMA 编译正常。

      【讨论】:

        猜你喜欢
        • 2011-05-19
        • 2011-05-15
        • 2012-02-03
        • 1970-01-01
        • 2011-10-31
        • 2013-08-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多