问题描述
我真的对动态并行性能和为您带来的递归能力感到好奇。因此,我对cpu递归和device(gpu)递归做了一个简单的基准测试:
#include <stdio.h>
#include <curand.h>
#include <cuda_runtime_api.h>
#include <time.h>
#include <sys/time.h>
__global__ void recurse(int level)
{
if (level<0)
{
return;
}
level--;
recurse<<<1,1>>>(level);
recurse<<<1,1>>>(level);
return;
}
void serial_recurse(int level)
{
if (level<0)
{
return;
}
level--;
serial_recurse(level);
serial_recurse(level);
return;
}
int main()
{
struct timeval startwtime,endwtime;
double seq_time;
printf("Startin here\n");
int level_1 = 22;
gettimeofday(&startwtime,NULL);
serial_recurse(level_1);
gettimeofday(&endwtime,NULL);
seq_time = (double)((endwtime.tv_usec - startwtime.tv_usec)/1.0e6+endwtime.tv_sec - startwtime.tv_sec);
printf("serial time = %f \n",seq_time);
int level=22;
gettimeofday(&startwtime,NULL);
recurse<<<1,1>>>(level);
cudaDeviceSynchronize();
gettimeofday(&endwtime,NULL);
seq_time = (double)((endwtime.tv_usec - startwtime.tv_usec)/1.0e6+endwtime.tv_sec - startwtime.tv_sec);
printf("parralel time = %f \n",seq_time);
return 0;
}
对于动态并行性,结果确实令人失望:
cpu:0.04666500秒
gpu:283.620204秒
是否可以通过动态并行性获得更好的性能,或者还为时过早?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)