c++ - Cuda 动态并行和递归性能
问题描述
我真的很好奇动态并行的性能和给你的递归能力。所以我对 cpu 递归和设备(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 sec
gpu: 283.620204 sec
有什么方法可以通过动态并行获得更好的性能,或者还为时过早?
解决方案
推荐阅读
- amazon-web-services - AWS API Gateway:API 仅适用于经过身份验证的用户和来宾用户
- asp.net-core - 如何在招摇中上传多张图片
- django - Django WeasyPrint - 导出过滤列表
- python - 异常引发 TypeError
- java - Spring & Couchbase - 没有找到能够从类型 [java.lang.Long] 转换为类型 [java.sql.Timestamp] 的转换器
- c++ - WinSock 和 IOCP 就绪通知
- unity3d - 从 ScreenToWorldPoint 转换给我错误的值
- java - 类路径资源[org/springframework/boot/autoconfigure/web/ServerPropertiesAutoConfiguration.class]因为不存在所以打不开
- database - 数据仓库是正确的解决方案吗
- ios - 如果不需要 alpha 组件,使用 .jpg 而不是 .png 会减小 iOS 应用程序的大小吗?