Cuda的Kernal函数中Block和thread的数量上限测试


#include "cuda_runtime.h"
#include "device_launch_parameters.h"

#include <stdio.h>


#define N 512 
#define K 64  

__global__  void  printf_base()
{
    printf("Hello \n");
}

void printf_base_test()
{
    dim3 block(1);
    dim3 grid(1);

    printf_base << < grid, block >> > ();

}

__global__ void grid_block_Idx()
{
    printf(" blockIdx.x=%d  blockIdx.y=%d  threadIdx.x=%d  threadIdx.y=%d  kernel print test  \n", blockIdx.x,blockIdx.y,threadIdx.x, threadIdx.y);
}

void  grid_block_Idx_test()
{
    //针对block容量的测试
    //dim3 block(32, 32);//经过测试发现,在本台机器block的上限,就是block(32,32),如果block(33.33),kernel函数中的内容就无法被调用(比如printf语句)
    //dim3 block(16, 64);//block(16, 64)是可以的,但是block(16,65)就不可以,说明当前系统当前显卡,block当中的线程数量上限是16*64=32*32=1024个
    //dim3 grid(1, 1);

    //针对grid容量的测试
    /*
    dim3 block(1, 1);
    dim3 grid(8192, 8192);//(64,64)是可以的,(128,128)也是可以的,(256,256)也是可以的,(1024,1024)也是可以的,(4096,4096)也是可以的
                          //(8192,8192)也是可以的,感觉grid中的block的数量是可以没有上限的
    */

    //综合测试
    dim3 block(2, 2);
    dim3 grid(512, 512);

    printf("grid.x %d grid.y %d grid.z %d\n", grid.x, grid.y, grid.z);
    printf("block.x %d block.y %d block.z %d\n", block.x, block.y, block.z);
    printf("--------------------------------------------------  \n");

    grid_block_Idx << < grid, block >> > ();

}

int main()
{
    //printf_base_test();

    grid_block_Idx_test();

    return 0;
}

以上是测试工程.cu文件的内容。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值