我编写了C ++代码和matlab代码来测试速度。我的C ++代码是:
int nrow = dim[0], ncol = dim[1];
double tmp, ldot;
for (int k = ncol - 1; k >= 0; --k){
grad[k] = 0;
for (int j = nrow - 1; j >= 0; --j){
tmp = exp(eta[j + nrow * k]);
ldot = (-Z[j + nrow * k] + tmp / (1 + tmp));
grad[k] += A[j] * ldot;
}
}
我的matlab代码是:
prob = exp(eta);
prob = prob./(1+prob);
ldot = prob - Z;
grad=sum(repmat(A,1,nGWAS).*ldot);
我运行每个代码100次,C ++花了5秒钟,matlab只花了1.2秒。
任何人都可以帮助我吗?感谢。
答案 0 :(得分:3)
matlab的人非常清楚如何优化矩阵访问。
您选择逐列访问它。我最初的猜测是矩阵逐行排列在内存中。这会导致代码在整个矩阵ncol
次上运行。缓存错过了整个地方。