10个使用Numba CUDA进行编程的例子

以下是10个使用Numba CUDA进行编程的例子,这些例子涵盖了基本的向量加法、矩阵乘法以及其他一些常见操作:

  1. 向量加法
python 复制代码
from numba import cuda
import numpy as np
@cuda.jit
def vector_add(a, b, c):
    i = cuda.grid(1)
    if i < len(a):
        c[i] = a[i] + b[i]
a = np.array([1, 2, 3], dtype=np.float32)
b = np.array([4, 5, 6], dtype=np.float32)
c = np.zeros_like(a)
threads_per_block = 32
blocks_per_grid = (len(a) + (threads_per_block - 1)) // threads_per_block
vector_add[blocks_per_grid, threads_per_block](a, b, c)
print(c)
  1. 矩阵乘法
python 复制代码
@cuda.jit
def matmul(A, B, C):
    i, j = cuda.grid(2)
    if i < C.shape[0] and j < C.shape[1]:
        tmp = 0.
        for k in range(A.shape[1]):
            tmp += A[i, k] * B[k, j]
        C[i, j] = tmp
A = np.array([[1, 2], [3, 4]], dtype=np.float32)
B = np.array([[5, 6], [7, 8]], dtype=np.float32)
C = np.zeros((2, 2), dtype=np.float32)
threads_per_block = (16, 16)
blocks_per_grid_x = math.ceil(A.shape[0] / threads_per_block[0])
blocks_per_grid_y = math.ceil(B.shape[1] / threads_per_block[1])
blocks_per_grid = (blocks_per_grid_x, blocks_per_grid_y)
matmul[blocks_per_grid, threads_per_block](A, B, C)
print(C)
  1. 向量点乘
python 复制代码
@cuda.jit
def dot_product(a, b, result):
    i = cuda.grid(1)
    tmp = 0.0
    if i < a.shape[0]:
        tmp = a[i] * b[i]
    cuda.atomic.add(result, 0, tmp)
a = np.array([1, 2, 3], dtype=np.float32)
b = np.array([4, 5, 6], dtype=np.float32)
result = np.zeros(1, dtype=np.float32)
threads_per_block = 32
blocks_per_grid = (len(a) + (threads_per_block - 1)) // threads_per_block
dot_product[blocks_per_grid, threads_per_block](a, b, result)
print(result[0])
  1. 向量乘法
python 复制代码
@cuda.jit
def vector_multiply(a, b, c):
    i = cuda.grid(1)
    if i < len(a):
        c[i] = a[i] * b[i]
# 同向量加法示例中的初始化和调用方式
  1. 向量除法
python 复制代码
@cuda.jit
def vector_divide(a, b, c):
    i = cuda.grid(1)
    if i < len(a):
        c[i] = a[i] / b[i]
# 同向量加法示例中的初始化和调用方式
  1. 向量求和
python 复制代码
@cuda.jit
def vector_sum(a, result):
    i = cuda.grid(1)
    tmp = 0.0
    if i < a.shape[0]:
        tmp = a[i]
    cuda.atomic.add(result, 0, tmp)
# 同向量点乘示例中的初始化和调用方式
  1. 向量求最大值
python 复制代码
@cuda.jit
def vector_max(a, result):
    i = cuda.grid(1)
    if i < a.shape[0]:
        cuda.atomic.max(result, 0, a[i])
# 同向量点乘示例中的初始化和调用方式
  1. 向量求最小值
python 复制代码
@cuda.jit
def vector_min(a, result):
    i = cuda.grid(1)
    if i < a.shape[0]:
        cuda.atomic.min(result, 0, a[i])
# 同向量点乘示例中的初始化和调用方式
  1. 向量排序(冒泡排序)
python 复制代码
@cuda.jit
def bubble_sort(arr):
    i = cuda.grid(1)
    n = arr.shape[0]
    if i < n:
        for j in range(n - 1):
            if arr[i] > arr[j]:
                arr[i], arr[j] = arr[j], arr[i]
# 同向量加法示例中的初始化
相关推荐
Blossom.11810 分钟前
基于区块链技术的供应链溯源系统:重塑信任与透明度
服务器·网络·人工智能·目标检测·机器学习·计算机视觉·区块链
说私域23 分钟前
O2O电商变现:线上线下相互导流——基于定制开发开源AI智能名片S2B2C商城小程序的研究
人工智能·小程序·开源·零售
xiaohanbao0925 分钟前
day29 python深入探索类装饰器
开发语言·python·学习·机器学习·pandas
白杆杆红伞伞40 分钟前
04_决策树
算法·决策树·机器学习
Jamence1 小时前
多模态大语言模型arxiv论文略读(七十六)
人工智能·语言模型·自然语言处理
与火星的孩子对话1 小时前
Unity3D开发AI桌面精灵/宠物系列 【六】 人物模型 语音口型同步 LipSync 、梅尔频谱MFCC技术、支持中英文自定义编辑- 基于 C# 语言开发
人工智能·unity·c#·游戏引擎·宠物·lipsync
Data-Miner1 小时前
35页AI应用PPT《DeepSeek如何赋能职场应用》DeepSeek本地化部署与应用案例合集
人工智能
KangkangLoveNLP1 小时前
Llama:开源的急先锋
人工智能·深度学习·神经网络·算法·机器学习·自然语言处理·llama
白熊1881 小时前
【通用智能体】Serper API 详解:搜索引擎数据获取的核心工具
人工智能·搜索引擎·大模型
云卓SKYDROID2 小时前
无人机屏蔽与滤波技术模块运行方式概述!
人工智能·无人机·航电系统·科普·云卓科技