首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++循环中的指数算子

C++循环中的指数算子
EN

Stack Overflow用户
提问于 2015-03-20 15:13:38
回答 1查看 160关注 0票数 0

我写了C++代码和matlab代码来测试速度。我的C++代码是:

代码语言:javascript
复制
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代码是:

代码语言:javascript
复制
prob = exp(eta);
prob = prob./(1+prob);
ldot = prob - Z;
grad=sum(repmat(A,1,nGWAS).*ldot);

我把每段代码运行了100次,C++用了5秒,matlab只用了1.2秒。

有人能帮我吗?谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-03-20 15:29:16

matlab的人非常了解如何优化矩阵访问。

您选择逐列访问它。我最初的猜测是矩阵是逐行排列在内存中的。这会导致您的代码在整个矩阵上运行ncol次。缓存未命中的地方到处都是。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29161293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档