Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

153
Vistas
Why is fortran wrapper needed in C programming?

I'm recently reading some source code in cBLAS, and something make me unclear. In many functions, a .c file calls Fortran Wrapper instead of writing the codes directly in the C file, like the following file:

/*
 * 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;
}   

I'm totally confused, why should this be done? Is it because Fortran is more efficiency in computing?

over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

"What I wanna ask is actually why there is a need for a intermediate wrapper, why not write it in C?"

The whole CBLAS is a wrapper to BLAS. BLAS is defined using a reference Fortran implementation and a Fortran API. BLAS can be implemented in C or assembly, but the API is set to be Fortran.

Therefore the CBLAS does not actually contain the whole functionality. The functionality is in whatever BLAS implementation you install. The very common reference implementation is written in Fortran, but it is not the fastest one.

However, you probably could call the sdsdot function (in whichever language it is actually implemented) directly from C cblas_sdsdot. The author of CBLAS chose to implement a Fortran intermediate subroutine sdsdotsub. I do not have an answer why that is necessary right now. The difference is very small, really just changing a function to a subroutine.

As @jxh correctly comments, there is a larger risk of ABI incompatibility in calling a function vs calling a subroutine (similar to a void function).

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda