我的算法的瓶颈是我的功能Kronecker产品叫做KPro:
gsl_matrix *KPro(gsl_matrix *a, gsl_matrix *b) {
int i, j, k, l;
int m, p, n, q;
m = a->size1;
p = a->size2;
n = b->size1;
q = b->size2;
gsl_matrix *c = gsl_matrix_alloc(m*n, p*q);
double da, db;
for (i = 0; i < m; i++) {
for (j = 0; j < p; j++) {
da = gsl_matrix_get (a, i, j);
for (k = 0; k < n; k++) {
for (l = 0; l < q; l++) {
db = gsl_matrix_get (b, k, l);
gsl_matrix_set (c, n*i+k, q*j+l, da * db);
}
}
}
}
return c;
}
您是否知道使用GSL实现高效?我找不到合适的例程。
答案 0 :(得分:0)
只是表面上看,我可以在你的日常工作中看到很多可能的瓶颈:
答案 1 :(得分:0)
您可以通过“阻止”并更有效地利用缓存来显着提高性能。
看看这个paper。是否有伪代码,我认为你将能够轻松地变成C代码。它还有一个算法,可以根据缓存大小和矩阵参数确定最佳块大小。