,所以我一直在尝试使用该函数的运行时间我想知道为什么我的代码无法正确计算所花费的时间,因为它在运行时返回了0秒,而不应将其返回。我想到的一些可能性是我可能弄乱了2D数组,但是如果是这样,它不应该返回空指针吗?
编辑:原始代码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 secn",
elapsed_time.tv_sec+elapsed_time.tv_usec/1000000.0);
}
现在,这直接从您的代码派生;我什么都没改变。当我在计算机上编译它时,它会打印
Total time was 10.004801 sec
所以我得出结论,您的gettimeofday
代码很好。