[GPU]1.并行执行的思路——内核函数

CUDA编程使用的是类似于C语言的语法

不同于串行计算的函数内循环执行,并行计算使用的是内核函数,每个线程执行单个内核函数,来达到多次执行的效果

比如说,串行执行可能类似于:

void hello()
{
    for(int i=0; i<15; i++){
        printf("hello\n");
    }
}

而对应的并行执行的内核函数是:

__global__ void hello()
{
    printf("hello\n");
}

注意__global__关键字,该关键字指定函数为核函数,并交由GPU并行执行

当然,调用该函数的方式也有所不同。我们来看串行执行时的整个程序:

void hello()
{
    for(int i=0; i<15; i++){
        printf("hello\n");
    }
}

int main(int argc, char** argv)
{
    hello();
    return 0;
}

相信我们都熟悉了如何调用一个串行执行的程序

其对应的并行执行程序调用方是:

#define NUM_BLOCKS 1
#define BLOCK_WIDTH 16

__global__ void hello()
{
    printf("hello\n");
}

int main(int argc, char** argv)
{
    hello<<<NUM_BLOCKS, BLOCK_WIDTH>>>();
    cudaDeviceSynchronize();
    return 0;
}

可以看到调用方式有差距,其中包含两个参数:

  • NUM_BLOCKS,即第一个参数,代表了需要多少个BLOCKS
  • BLOCK_WIDTH,第二个参数,代表每个BLOCK里面有多少个thread(线程)

总共的线程数即NUM_BLOCKS*BLOCK_WIDTH,注意BLOCK_WIDTH存在最大值,根据设备的不同,有512和1024两种取值(可能之后会有更高的?不知道)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值