BLAS sdot_函数返回意外结果

时间:2014-08-06 10:11:19

标签: c gcc fortran blas

我试图使用Linux-GCC中的以下编译命令生成两个矩阵的点积:

  

gcc -L / usr / lib64 / atlas -lblas code.c

这里的代码似乎编译没有错误:

#include < stdio.h>    

int main()
{
  int n,incx,incy;
  int x[] = {1,2,3};
  int y[] = {2,3,4};
  int z;
  incx =1;
  incy =1;
  n = 3;
  z = sdot_(&n, x, &incx, y, &incy);
  printf("%d", z);
  printf("\n");
  return 0;
}

所以我希望看到1 * 2 + 2 * 3 + 3 * 4 = 20,但是当我运行二进制时,结果&#34; 3&#34;打印出来。

有什么想法吗?

1 个答案:

答案 0 :(得分:5)

您使用错误的类型和sdot_的隐式声明。您应该添加函数原型(或包含标题)并使用正确的类型。

#include <stdio.h>    

float sdot_(int* n, float* x, int* incx, float* y, int* incy);

int main()
{
  int n,incx,incy;
  float x[] = {1.f,2.f,3.f};
  float y[] = {2.f,3.f,4.f};
  float z;
  incx =1;
  incy =1;
  n = 3;
  z = sdot_(&n, x, &incx, y, &incy);
  printf("%f", z);
  printf("\n");
  return 0;
}

如果启用警告,您将从编译器获取它们的代码版本:

cc sdot.c -lblas -Wall
sdot.c: In function ‘main’:
sdot.c:14:3: warning: implicit declaration of function ‘sdot_’ [-Wimplicit-function-declaration]