CUDA中各种内存及线程布局的性能实验分析(1)

cuda中提供了各种各样的的内存形式,不同的内存对程序的性能影响也不同。在编程中,根据我们的需要和数据特点,利用适当的内存,将会对程序的性能产生很大的影响。本文中,通过一个最简单的图像卷积操作进行编程分析cuda中的内存对性能的影响。
首先介绍一下图像卷积:
简单的来说,用一个小矩阵在大矩阵上进行由左向右,由上到下滑动,每滑动一次,小矩阵和大矩阵上对应的窗口进行对应位置的乘加操作得到一个数,作为结果矩阵上的一个对应位置上的值,一般来说滑动的步长为1,如下所示(图片来自ufldl):
简单的图像卷积

不同内存性能对比:

我们默认你已经安装好cuda环境。在写cuda核之前,首先可以查看一下本机的gpu基本情况,可以使用如下代码来查看:

#include <stdio.h>
#include <cuda_runtime.h>

#define CUDA_CHECK(condition,info) \
if(condition!=cudaSuccess) \
{ \
    printf(info); \
}

int main()
{
    int count;
    CUDA_CHECK(cudaGetDeviceCount(&count),
        "cuda:get count failed!");
    printf("gpu count in host:%d\n",count);

    for(int i=0;i<count;++i)
    {

        cudaDeviceProp device_prop;
        CUDA_CHECK(cudaGetDeviceProperties(&device_prop,i),
            "cuda:get property failed");
        printf("----------\ndevice %d:\n",i);
        printf("Name:%s\n",device_prop.name);
        printf("be_integrated:%d\n",
            device_prop.integrated);
        printf("Compute_Capability:%d.%d\n",
            device_prop.major,device_prop.minor);
        printf("Global_Memory:%ld MB\n",
            device_prop.totalGlobalMem/1024/1024);
        printf("Shared_Memory(per_block):%ld KB\n",
            device_prop.sharedMemPerBlock/1024);
        printf("Const_Memory:%ld KB\n",
            device_prop.totalConstMem/2014);
        printf("Reg_Count(per_block):%d\n",
            device_prop.regsPerBlock);
        printf("Warp_Count(per_block):%d\n",
            device_prop.warpSize);
        printf("Thread_Count(per_block):%d\n",
            device_prop.maxThreadsPerBlock);
        printf("can_overlap:%d\n",
            device_prop.deviceOverlap);
        printf("can_maphostmem:%d\n",
            device_prop.canMapHostMemory);
        printf("Process_Count:%d\n",
            device_prop.multiProcessorCount);
    }
}

用nvcc编译并执行,我的执行结果为:

device 0:
Name:GeForce GTX TITAN X
be_integrated:0
Compute_Capability:5.2
Global_Memory:12204 MB
Shared_Memory(per_block):48 KB
Const_Memory:32 KB
Reg_Count(per_block):65536
Warp_Count(per_block):32
Thread_Count(per_block):1024
can_overlap:1
can_maphostmem:1
Process_Count:24

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值