重新blas庫函式

2021-07-31 04:12:32 字數 2024 閱讀 9259

有時候需要對blas庫函式進行重寫

我寫的乙個函式為

#include using namespace std;

int main() ;

const float b[k*n] = ;

float c[m*n];

for (int i = 0; i但是有問題。

在caffe的tools資料夾下建立keshan.cpp

#include #include using namespace std;

int main();

const double b[k*n] = ;

double c[m*n];

int lda = k;

int ldb = n;

cblas_dgemm(cblasrowmajor, cblasnotrans, cblasnotrans, m, n, k, alpha, a, lda, b,ldb, beta, c, n);

for(int i=0;i

14 8

41 26

68 44

67 46

和我寫的一樣,似乎沒什麼錯誤,但是這個只是對一種錯誤的描寫。

在caffe中caffe_cpu_gemm定義在math_function.cpp中

重寫caffe_cpu_gemm只需要增加

//重寫caffe_cpu_gemm(float),假設沒有transpose

template<>

void caffe_cpu_gemm(const cblas_transpose transa,

const cblas_transpose transb, const int m, const int n, const int k,

const float alpha, const float* a, const float* b, const float beta,

float* c,int flag) ;

~matrix(void) {};

int getvindex()

int gethindex()

t getxy(int x, int y)

void setxy(int x, int y, t f)

void setdata(t*datap, int size)

matrixtranspote()

}return m;

} matrixoperator+(matrix&adv)

}return m;

} matrixoperator-(matrix&adv)

}return m;

} bool operator==(matrix&adv)

}return true;

} bool operator!=(matrix&adv)

}return false;

} void print()

printf("\n");

} }private:

t *data;

};templatematrixoperator*(matrix&x, matrix&y)

m.setxy(i, j, v);

} }return m;

}templatematrixoperator*(matrix&x, t y)

} return m;

}templatematrixoperator*(t y, matrix&x)

template<>

void typeprint(float v)

template<>

void typeprint(int v)

#define type float

int d1 =

;int d2 =

;int main()

可以看看cblas的源**[2],perl寫的...

[1] 對cblas_sgemm的說明

[2] linux安裝cblas

構造庫函式

構造靜態庫 構造靜態庫要使用ar 工具 構造方法 gcc c addvec.c multvec.c 生成addvec.o和multvec.o 目標檔案 ar rcs libvector.a addvec.o multvec.o 生成libvector.a 靜態庫 使用靜態庫 可能包含類似libvec...

數學庫函式

blas和lapack是專門為線性代數開發的工具庫。blas英文全稱basic linear algebra subprograms,共有三個層次的計算 向量與向量之間的計算,比如向量的加,減,點乘 向量與矩陣之間的計算,比如乘法運算,一階矩陣和二階矩陣的更新 矩陣與矩陣之間的計算,比如矩陣相乘,k...

庫函式(彙總)

庫函式 include include include intmain 字串拷貝 strcpy strcpy函式會將源的資料拷貝到目標中,並且會覆蓋掉目標中原有的資料,目標的容積必須能夠存放拷貝的資料,如果容積不夠會報錯。void strcpy char s1,char s2 while s1 s2...