zoukankan      html  css  js  c++  java
  • 调用clapack库注意事项

    寒假期间在自己开发的模型DGOM里成功的用clapack替换了MKL,这里就介绍下遇到的几个坑,希望能够帮助别人少走弯路。

    1. 调用clapack函数时注意整数类型为integer。

    虽然clapack号称是c版本的lapack,实际只是为原始fortran函数添加了接口,所以调用参数的整数类型数据大小其实与fortran相同的。所以在f2c.h中提供了integer类型(long int),调用clapack的整数类型也必须为integer类型。下面给出一个简单的矩阵求逆函数main.c写法:

    void Matrix_inverse(double *A, int N){
        integer W = (integer) N;
        integer  LDA = W;
        integer  IPIV[W];
        integer  ERR_INFO;
        integer  LWORK = W * W;
        double Workspace[LWORK];
        // - Compute the LU factorization of a M by N matrix W
        dgetrf_(&W, &W, A, &LDA, IPIV, &ERR_INFO);
        // - Generate inverse of the matrix given its LU decompsotion
        dgetri_(&W, A, &LDA, IPIV, Workspace, &LWORK, &ERR_INFO);
        return;
    }
    

    2. 链接clapack blas f2c等函数库时注意链接顺序

    编译后将编译好的代码进行链接时,链接库顺序其实是有要求的。最底层的函数库写在最后,依赖其他库的函数库需写在前面。如clapack中liblapack.a需要调用libf2c.a和libblas.a中一系列函数,那么链接时三者的顺序必须为

    gcc main.c -ICLAPACK-3.1.1.1/INCLUDE -LCLAPACK-3.1.1.1/ -LCLAPACK-3.1.1.1/F2CLIBS -llapack -lblas -lf2c
    

    若三者顺序颠倒则会报错。

  • 相关阅读:
    Codeforces 1316B String Modification
    Codeforces 1305C Kuroni and Impossible Calculation
    Codeforces 1305B Kuroni and Simple Strings
    Codeforces 1321D Navigation System
    Codeforces 1321C Remove Adjacent
    Codeforces 1321B Journey Planning
    Operating systems Chapter 6
    Operating systems Chapter 5
    Abandoned country HDU
    Computer HDU
  • 原文地址:https://www.cnblogs.com/li12242/p/6407239.html
Copyright © 2011-2022 走看看