首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从C++调用ScaLAPACK

从C++调用ScaLAPACK
EN

Stack Overflow用户
提问于 2012-04-20 05:33:17
回答 1查看 905关注 0票数 1

嗨,有没有人能给我提供一个从C++调用ScaLAPACK的Makefile示例,我有点困难。

我有最新版本的正确编译和所有通过的测试。我在Fedora上和GCC和OpenMPI一起编译了它,我也尝试过使用存储库中预先构建的二进制文件,但没有成功。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-09-27 01:00:33

我对ScaLAPACK过程使用了以下声明:

代码语言:javascript
复制
extern "C" void pdgesvd_(char *jobu, char *jobvt, int *M, int *N, double *A, int *ia, int *ja, int *desca, double *s, double *u, int *iu, int *ju,
            int *descu, double *vt, int *ivt, int *jvt, int *descvt, double *work, int *lwork, int *info);

extern "C" void pdgemv_(char *t, int *M, int *N, double *alpha, double *A, int *ia, int *ja, int *desca, double *X, int *ix, int *jx,int *descx,
            int *incx, double *beta, double *Y, int *iy, int *jy, int *descy, int *incy);


extern "C" void pdgemm_(char *transa, char *transb, int *M, int *N, int *K, double *alpha, double *A, int *ia, int *ja, int *desca, double *B,
            int *ib, int *jb, int *descb, double *beta, double *C, int *ic, int *jc, int *descc);

BLACS过程的声明方式相同:

代码语言:javascript
复制
extern "C" void blacs_get_(/*in*/int *icontxt, /*in*/int *what, /*out*/int *val); 

因为BLAS和ScaLAPACK是用-DAdd_编译器选项构建的,所以我在过程名后面加上了"_“字符。对于您的系统,这可能会有所不同。如果是这样的话,在libscalapack.a和其他静态库文件上尝试objdump -t,以确定实际的过程名称。

您的带有ScaLAPACK调用的程序可能会被编译成如下所示:

代码语言:javascript
复制
mpicxx -o your_binary_name -O2 your_source.cpp -lscalapack -lblacs -lcblacs -lblacs -llapack -lblas -lgfortran

请注意,g++调用行(-lblacs -lcblacs -lblacs -llapack -lblas -lgfortran)中静态库的顺序非常重要!还要检查库目录中是否存在所有这些静态库文件(libblas.alibcblacs.a等)。不要忘记Fortran包(用于-lgfortran)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10237124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档