0

所以我一直在尝试使用我的代码中的函数获取运行时我想知道为什么我的代码没有正确计算它所花费的时间,因为它不应该返回运行时的 0 秒. 我想到的一些可能性是我可能弄乱了二维数组,但如果是这样的话,它不应该返回一个空指针吗?

编辑:原始代码 N=500 应该从我的测试中产生大约 1 秒的运行时间

#include <stdio.h>
#include <sys/time.h>

void matrixMultiplyRow(int N, int matrixA[][N], int matrixB[][N], int final[][N]); 

int main(){
    int N = 500;
    int output[N][N];
    int output2[N][N];
    int numElements = N*N;
    int i, j;
    int counter = 1;
    //Array 1 fills it with sequential numbers
    int experimentA[N][N];
    int experimentB[N][N];
    for(i=1; i<N+1; i++){
        for(j=1; j<N+1; j++){
            experimentA[i][j] = counter;
            experimentB[i][j] = counter;
            counter++;
        }
    }
    struct timeval start_time, stop_time, elapsed_time;
    gettimeofday(&start_time,NULL);
    matrixMultiplyRow(N, experimentA, experimentB, output);
    gettimeofday(&stop_time,NULL);
    timersub(&stop_time, &start_time, &elapsed_time); 
    printf("Total time was %f sec for Row Major.\n", elapsed_time.tv_sec+elapsed_time.tv_usec/1000000.0);
    fflush(stdout);
    return 1;
}

//Row Major 
void matrixMultiplyRow(int N, int matrixA[][N], int matrixB[][N], int final[][N]){
    int i, j, k;
    for(i=0; i<N; i++){
        for(j=0; j<N; j++){
            final[i][j] = 0;
            for(k=0; k<N; k++){
                final[i][j] += matrixA[i][k]*matrixB[k][j];
            }
        }
    }
}
4

1 回答 1

1

在评论中,人们要求您提供“MCVE”。既然问题是关于 的gettimeofday,我们可以通过去掉所有矩阵乘法和共享内存的东西来制作一个更简单的程序,然后写下这个:

#include <stdio.h>
#include <unistd.h>
#include <sys/time.h>

int main()
{
    struct timeval start_time, stop_time, elapsed_time;
    gettimeofday(&start_time,NULL);
    sleep(10);
    gettimeofday(&stop_time,NULL);
    timersub(&stop_time, &start_time, &elapsed_time); 
    printf("Total time was %f sec\n",
        elapsed_time.tv_sec+elapsed_time.tv_usec/1000000.0);
}

现在这直接来自您的代码;我并没有真正改变任何东西。当我在我的机器上编译它时,它会打印

Total time was 10.004801 sec

所以我得出结论,你的gettimeofday代码很好。

于 2018-02-09T15:00:40.927 回答