我写了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秒。
有人能帮我吗?谢谢。
发布于 2015-03-20 15:29:16
matlab的人非常了解如何优化矩阵访问。
您选择逐列访问它。我最初的猜测是矩阵是逐行排列在内存中的。这会导致您的代码在整个矩阵上运行ncol次。缓存未命中的地方到处都是。
https://stackoverflow.com/questions/29161293
复制相似问题