LAPACKE——LAPACK的两个C语言接口

来源:LAPACKE官方文档

1.介绍

本文档描述了一个LAPACK的两级C接口,包括一个高级接口和一个中级接口。高级接口在内部处理所有工作空间内存分配,而中级接口要求用户像原始FORTRAN接口那样提供数组的工作空间。这两个接口都提供了对列主矩阵和行主矩阵的支持。这两个接口的原型、相关宏和类型定义都包含在头文件lapacke.h中。

1.1.命名方式

高级接口的命名方案是采用FORTRAN LAPACK例程名,使其小写,并添加前缀LAPACKE_。例如,LAPACK子例程DGETRF变成了LAPACKE_dgetrf。

中级接口的命名方案是采用FORTRAN LAPACK例程名,将其设置为小写,然后添加前缀LAPACKE_和后缀_work,后缀_work表示用户将提供工作空间。例如,LAPACK子例程DGETRF变成了LAPACKE_dgetrf_work。

1.2.复数类型

复数由宏lapack_complex_float和lapack_complex_double定义,它们分别表示单精度和双精度复杂数据类型。始终假设实分量和虚分量连续存储在内存中,实分量先存储。lapack_complex_float和lapack_complex_double宏可以是C99 _Complex类型、C结构定义的类型、c++ STL复杂类型或自定义复杂类型。更多细节请参见lapacke.h。

1.3.数组参数

数组是作为指针传递的,而不是作为指向指针的指针。所有使用一个或多个二维数组(矩阵)作为指针的LAPACKE例程都接收一个int类型的额外参数,这个参数必须等于LAPACK_ROW_MAJOR或LAPACK_COL_MAJOR,这两个参数在lapacke.h中定义,指定该数组中的矩阵是按行主顺序存储还是按列主顺序存储。如果一个例程有多个数组输入,它们必须都使用相同的顺序。

注意,使用行-主顺序可能比列-主顺序需要更多的内存和时间,因为例程必须将行-主顺序转换为底层LAPACK例程所需的列-主顺序。FORTRAN LAPACK例程中的每个二维数组参数都有一个额外的参数来指定其前导维数(leading dimension)。对于以行为主的2D数组,假设一行中的元素是连续的,并且假设一行与下一行的元素之间存在领先维度的间隔。对于以列为主的2D数组,假定列中的元素是连续的,并且假定从一列到下一列的元素之间相隔一个前导维。例如:以列主序存储M*N矩阵,用LDA表示leading dimension,则LDA = M,当M=0时,LDA=1。

1.4.参数别名

除非另外指定,只有输入参数(即通过值和const限定符指定的数组传递的标量)可以在调用LAPACK的C接口时合法地附加别名。

1.5.INFO参数

LAPACKE接口函数将它们的lapack_int返回值设置为INFO参数的值,该参数包含错误和退出条件等信息。这与LAPACK例程不同,后者以FORTRAN整数参数的形式返回此信息。在LAPACKE,INFO的使用和在LAPACK完全一样。如果INFO在FORTRAN中使用基于1的索引返回矩阵的行号或列号,则该值不会为基于0的索引进行调整。

1.6.NaN检查

高级接口包括一个可选的,默认的,在调用任何LAPACK例程之前对所有矩阵输入进行NaN检查。此选项影响所有例程。如果输入包含任何NaN,则输入参数对应的矩阵将被标记为信息参数错误。例如,如果发现第五个参数包含NaN,函数将返回值为-5。可以通过在lapacke.h中定义LAPACK_DISABLE_NAN_CHECK宏来禁用NaN检查和其他参数。中间层接口不包含NaN检查。

1.7.整型

在LAPACKE中,FORTRAN类型为整数的变量被转换为lapack_int。这符合可修改的整数类型大小,特别是给定的ILP64编程模型:将lapack_int重新定义为long int(8字节)将足以支持该模型,因为lapack_int默认定义为int(4字节),支持LP64编程模型。

1.8.逻辑值

FORTRAN逻辑值被转换为lapack_logical,它被定义为lapack_int。

1.9.内存管理

所有的内存管理都由函数LAPACKE_malloc和LAPACKE_free来处理。这允许用户通过修改lapacke.h中的定义来轻松使用他们自己的内存管理器,而不是默认的内存管理器。

这个接口应该是线程安全的,只要这些内存管理例程和底层的LAPACK例程是线程安全的。

1.10.新的错误代码

由于高级接口不使用工作数组,因此在用户耗尽内存时需要错误通知。如果不能分配工作数组,函数将返回LAPACK_WORK_MEMORY_ERROR;如果没有足够的内存来完成换位,则返回LAPACK_TRANSPOSE_MEMORY_ERROR。


2.举例

LAPACK原生接口:

subroutine dgeqrf(    integer M,

                                 integer N,

                                 double precision, 

                                 dimension( lda, * ) A,

                                 integer LDA,

                                 double precision, dimension( * ) TAU,

                                 double precision, dimension( * ) WORK,

                                 integer LWORK,

                                 integer INFO ) 

高层接口:

lapack_int m, n, lda, info;

double *a, *tau;

info = LAPACKE_dgeqrf( LAPACK_COL_MAJOR, m, n, a, lda, tau );

中层接口:

lapack_int m, n, lda, info, lwork;

double *a, *tau, *work;

info = LAPACKE_dgeqrf_work( LAPACK_COL_MAJOR, m, n, a, lda, tau, work, lwork);

其中,由于中层接口需要用户提供所需要的工作空间,由一个work数组表示工作空间,其长度用 lwork记录,最小为n。



 

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,125评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,293评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,054评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,077评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,096评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,062评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,988评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,817评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,266评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,486评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,646评论 1 347
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,375评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,974评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,621评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,642评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,538评论 2 352