gpt4 book ai didi

c - 如何正确测量 CUDA 时间?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:35:15 26 4
gpt4 key购买 nike

我试图正确测量并行和顺序执行的时间,但我有疑问,因为:

假设我们有以下代码:

    //get the time
clock_t start,finish;
double totaltime;
start = clock();

double *d_A, *d_B, *d_X;

cudaMalloc((void**)&d_A, sizeof(double) * Width * Width);
cudaMalloc((void**)&d_B, sizeof(double) * Width);
cudaMalloc((void**)&d_X, sizeof(double) * Width);

cudaMemcpy(d_A, A, sizeof(double) * Width * Width, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, B, sizeof(double) * Width, cudaMemcpyHostToDevice);


do_parallel_matmul<<<dimB, dimT>>>(d_A, d_B, d_X, Width);


cudaMemcpy(X, d_X, sizeof(double) * Width, cudaMemcpyDeviceToHost);

finish = clock();

totaltime=(double)(finish-start)/CLOCKS_PER_SEC;

printf("%f", totaltime);

这个时间比按如下方式测量的连续时间长得多:

clock_t start,finish;
double totaltime;
start = clock();

do_seq_matmult();

finish = clock();

totaltime=(double)(finish-start)/CLOCKS_PER_SEC;

printf("%f", totaltime);

所以我不知道我是否应该只测量 CUDA 内核时间如下:

clock_t start,finish;
double totaltime;
start = clock();

do_parallel_matmul();

finish = clock();

totaltime=(double)(finish-start)/CLOCKS_PER_SEC;

printf("%f", totaltime);

并避免主机和设备之间的内存复制...

我问上面的问题是因为我必须提交并行执行和顺序执行之间的比较...但是如果我在 CUDA 中测量内存副本,则 CUDA 和 C 之间没有太大区别...

编辑:

void do_seq_matmult(const double *A, const double *X, double *resul, const int tam)
{
*resul = 0;
for(int i = 0; i < tam; i++)
{
for(int j = 0; j < tam; j++)
{
if(i != j)
*resul += A[i * tam + j] * X[j];
}
}
}

__global__ void do_parallel_matmul( double * mat_A,
double * vec,
double * rst,
int dim)
{
int rowIdx = threadIdx.x + blockIdx.x * blockDim.x; // Get the row Index
int aIdx;
while( rowIdx < dim)
{
rst[rowIdx] = 0; // clean the value at first
for (int i = 0; i < dim; i++)
{
aIdx = rowIdx * dim + i; // Get the index for the element a_{rowIdx, i}
rst[rowIdx] += (mat_A[aIdx] * vec[i] ); // do the multiplication
}
rowIdx += gridDim.x * blockDim.x;
}
__syncthreads();
}

最佳答案

您为测量使用了错误的函数。 clock 测量您的进程在 CPU 上花费的时间,而不是挂钟时间。

关于c - 如何正确测量 CUDA 时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11969994/

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