有時候需要對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...