为了账号安全,请及时绑定邮箱和手机立即绑定

为什么转换512x512的矩阵要比转换513x513的矩阵慢得多?

为什么转换512x512的矩阵要比转换513x513的矩阵慢得多?

PIPIONE 2019-07-31 14:07:40
为什么转换512x512的矩阵要比转换513x513的矩阵慢得多?在对不同尺寸的方形矩阵进行一些实验后,出现了一种模式。转换一个大小的矩阵2^n2^n+1总是比转换一个大小的矩阵慢。对于较小的值n,差异并不重要。然而,在512的值上会出现很大的差异。(至少对我而言)免责声明:我知道由于元素的双重交换,函数实际上并没有转置矩阵,但它没有任何区别。遵循代码:#define SAMPLES 1000#define MATSIZE 512#include <time.h>#include <iostream>int mat[MATSIZE][MATSIZE];void transpose(){    for ( int i = 0 ; i < MATSIZE ; i++ )    for ( int j = 0 ; j < MATSIZE ; j++ )    {        int aux = mat[i][j];        mat[i][j] = mat[j][i];        mat[j][i] = aux;    }}int main(){    //initialize matrix    for ( int i = 0 ; i < MATSIZE ; i++ )    for ( int j = 0 ; j < MATSIZE ; j++ )        mat[i][j] = i+j;    int t = clock();    for ( int i = 0 ; i < SAMPLES ; i++ )        transpose();    int elapsed = clock() - t;    std::cout << "Average for a matrix of " << MATSIZE << ": " << elapsed / SAMPLES;}改变MATSIZE让我们改变大小(呃!)。我在ideone上发布了两个版本:大小512 - 平均2.46毫秒 - http://ideone.com/1PV7m大小513 - 平均0.75毫秒 - http://ideone.com/NShpo在我的环境中(MSVS 2010,完全优化),差异是相似的:大小512 - 平均2.19毫秒大小513 - 平均0.57毫秒为什么会这样?
查看完整描述

2 回答

  • 2 回答
  • 0 关注
  • 692 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信