zoukankan      html  css  js  c++  java
  • Numba(??)

    Numba for CUDA GPUs

    一、概况

    Numba能够将部分python代码编进CUDA内核里面。Numpy数组能够在CPU和GPU之间自动传输。

    术语:

    host: CPU

    device: GPU

    host memory: 系统主memory

    device memory: GPU板卡上的memory

    kernels: 一个GPU函数launched by the host,能够在device上执行

    device function: 一个GPU函数在device上执行,只能被device调用

    注意:

    Numba没有实现所有的CUDA功能,下面的功能是没有实现的:

    dynamic parallelism

    texture memory

    二、编写CUDA内核

    内核declaration(声明):

    内核函数是CPU能够调用的GPU函数,它有两个基本的特性:

    1、内核函数无法显式的返回值,所有结果数据必须写入传递给函数的数组(array)

    2、调用内核函数时,显式声明线程结构

    咋一看,用Numba写一个CUDA内核很像是写一个CPU的JIT 函数。

    @cuda.jit
    def increment_by_one(an_array):
        """
        Increment all array elements by one.
        """
        # code elided here; read further for different implementations

    内核调用:

     内核通常用下面的方式调用:

    threadsperblock = 32
    blockspergrid = (an_array.size + (threadsperblock - 1)) // threadsperblock
    increment_by_one[blockspergrid, threadsperblock](an_array)

    注意有两步:

    1、实例化内核:确定blocks per grid和a number of threads per block。两者的乘积就是整个的threads数目。

    2、运行内核,传入input array。

    上面,选择block size(number of threads per block)是非常关键的。

    1、在软件端,the block size决定了多少个threads共享给定的shared memory区域。

    2、在硬件端,the block size需要足够大才能充分利用execution units。

  • 相关阅读:
    Java引用总结--StrongReference、SoftReference、WeakReference、PhantomReference
    Clustered Index
    Docker:一、开始部署第一个Asp.net应用
    数据库死锁 之 三.死锁解读
    数据库死锁 之 二.定位死锁
    数据库死锁 之 一.啥是死锁
    番外篇
    C# QQ & 163 邮件发送
    asp.net core 四 IOC&DI Autofac
    asp.net core 五 SignalR 负载均衡
  • 原文地址:https://www.cnblogs.com/yanxingang/p/10908192.html
Copyright © 2011-2022 走看看