【发布时间】:2021-10-18 16:16:47
【问题描述】:
我最近正在阅读 cBLAS 中的一些源代码,有些东西让我不清楚。在很多函数中,.c 文件调用 Fortran Wrapper,而不是直接在 C 文件中编写代码,如以下文件:
/*
* cblas_sdsdot.c
*
* The program is a C interface to sdsdot.
* It calls the fortran wrapper before calling sdsdot.
*
* Written by Keita Teranishi. 2/11/1998
*
*/
#include "cblas.h"
#include "cblas_f77.h"
float cblas_sdsdot( const int N, const float alpha, const float *X,
const int incX, const float *Y, const int incY)
{
float dot;
#ifdef F77_INT
F77_INT F77_N=N, F77_incX=incX, F77_incY=incY;
#else
#define F77_N N
#define F77_incX incX
#define F77_incY incY
#endif
F77_sdsdot_sub( &F77_N, &alpha, X, &F77_incX, Y, &F77_incY, &dot);
return dot;
}
我很困惑,为什么要这样做?是不是因为 Fortran 在计算上的效率更高?
【问题讨论】:
-
可能有一些功能是在 Fortran 中实现的,而不是在 C 中......
-
您是在问为什么要调用 Fortran 子例程,或者为什么需要中间包装器?
-
我猜
F77_INT的宽度可能与 Cint不同。 -
@jxh 但是,这确实改变了 Fortran 包装子例程与原始 Fortran 函数有关的任何内容。