gpt4 book ai didi

c - gettimeofday 可能无法在 C 中获得正确的时间

转载 作者:行者123 更新时间:2023-11-30 14:50:53 24 4
gpt4 key购买 nike

所以我一直在尝试使用代码中的函数获取运行时我想知道为什么我的代码没有正确计算它所花费的时间,因为它不应该返回 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];
}
}
}
}

最佳答案

在评论中,人们要求您提供“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 代码没问题。

关于c - gettimeofday 可能无法在 C 中获得正确的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48707809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com