空内核上的CUDA vs OpenCL性能

 遁高攀_179 发布于 2023-01-16 15:13

在CUDA和OpenCL上测量相同内核的性能时,我发现了一个奇怪的事情.

当我离开我的内核绝对空,没有任何输入参数和计算时,与OpenCL相比,CUDA给我的性能非常差.

CUDA内核:

__global__ void kernel_empty()
{
}

CUDA主持人:

kernel_empty<<>>();

OpenCl内核:

__attribute__((reqd_work_group_size(8, 8, 1)))
__kernel void kernel_empty()
{
}

OpenCL主机:

cl_event perf_event;
size_t global_work_offset[3] = {0, 0, 0};
size_t global_work_size[3] = {10000, 10000, 1};
size_t local_work_size[3] = {8, 8, 1};
clEnqueueNDRangeKernel(queue, kernel, 3, global_work_offset, global_work_size, local_work_size, 0, NULL, &perf_event);

OpenCL给出了6ms

CUDA给出390毫秒

两个API上的内核都正常工作,因为我正在使用它们来计算我的东西.

双方都没有返回错误代码.

使用Visual Studio 2010,发布模式

来自NVIDIA GPU Computing Toolkit 5.5的OpenCL 1.1 lib

来自NVIDIA GPU Computing Toolkit 5.5的CUDA lib

计时也是正确的,我用CPU计时器仔细检查了它们.此外,当使用巨大的网格时,您可以看到CUDA如何在没有任何计时器的情况下滞后.

对于OpenCL clGetEventProfilingInfo使用.

对于CUDA cudaEventElapsedTime使用.

测试在与NVIDIA Quadro K4000相同的PC上运行.

有人可以解释为什么会有这么大的差异吗?

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有