首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用优化内存带宽方法时,我没有看到性能的提高。

在使用优化内存带宽方法时,我没有看到性能的提高。
EN

Stack Overflow用户
提问于 2014-09-15 08:55:47
回答 1查看 100关注 0票数 2

我看到了一个应该比后面的循环慢的例子:

代码语言:javascript
复制
for (i = 0; i < 1000; i++) 
   column_sum[i] = 0.0;
     for (j = 0; j < 1000; j++)
        column_sum[i] += b[j][i];

与此相比:

代码语言:javascript
复制
for (i = 0; i < 1000; i++)
     column_sum[i] = 0.0;
for (j = 0; j < 1000; j++)
     for (i = 0; i < 1000; i++)
        column_sum[i] += b[j][i];

现在,我编写了一个工具来测试不同的索引数,但是在我尝试这个概念之后,我没有看到多少性能优势,我担心我的代码与它有关.

应该是在我的代码中工作的更慢的循环:

代码语言:javascript
复制
    for (i = 0; i < val; i++){
        column_sum[i] = 0.0;
        for (j = 0; j < val; j++){
            int index = i * (int)val + j;
            column_sum[i] += p[index];
        }
    }

应该是“显著”更快的代码:

代码语言:javascript
复制
    for (i = 0; i < val; i++) {
        column_sum[i] = 0.0;
    }
    for (j = 0; j < val; j++) {
        for (i = 0; i < val; i++) {
            int index = j * (int)val + i;
            column_sum[i] += p[index];
        }
    }

数据比较:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-15 15:46:20

我混淆了循环中的索引值:int index = j * (int)val + i;

慢循环:

代码语言:javascript
复制
    for (i = 0; i < val; i++) {
        column_sum[i] = 0.0;
        for (j = 0; j < val; j++){
            int index = j * (int)val + i;
            column_sum[i] += p[index];
        }
    }

更快的循环:

代码语言:javascript
复制
    for (i = 0; i < val; i++) {
        column_sum[i] = 0.0;
    }
    for (j = 0; j < val; j++) {
        for (i = 0; i < val; i++) {
            int index = j * (int)val + i;
            column_sum[i] += p[index];
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25844205

复制
相关文章

相似问题

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