当前位置:首页>java>[语法][cudaTile 编程][传统软件工程师转行 AI 需要掌握的一千个知识点]

[语法][cudaTile 编程][传统软件工程师转行 AI 需要掌握的一千个知识点]

  • 2026-08-20 16:16:05
[语法][cudaTile 编程][传统软件工程师转行 AI 需要掌握的一千个知识点]

经典模型+ Python cuda编程

一手理论+一手实践→天下我有

列个提纲,一壶酒,一个手机,上班路上一小时,一写写一年👌🥊🥊

没有牛逼的人,只有坚持到底的人

这篇文章估计要写好久…

不对,写一点,发一点

简单,才足以坚持,坚持才足以完成

与Triton 等对比
软硬结合
底层硬件逻辑
编译原理
控制流
语法
Python 向的 cuda编程
看对比,果然这很Python ,make it easy
会这 并行编程的人,又将增加一大批,市场将会更加繁荣
下面是对比
1.基本计算单元定义
传统cuda→计算好 线程层次(网格、block、thread)
// 明确指定线程组织dim3 gridSize(blocksX, blocksY);dim3 blockSize(threadsPerBlockX, threadsPerBlockY);matmul_kernel<<<gridSize, blockSize>>>(A, B, C, M, N, K);
tile→描述数据分块
# cuTile Python - 只需描述数据分块@cutile.primitivedef matmul(M: cutile.dim, N: cutile.dim, K: cutile.dim,           A: cutile.tensor[M, K], B: cutile.tensor[K, N], C: cutile.tensor[M, N]):    # 定义Tile大小    tile_m = cutile.constant(128)    tile_n = cutile.constant(128)    tile_k = cutile.constant(32)    # 自动生成分块计算    for i in cutile.axis(0, M, tile_m):      # 外层循环自动并行化        for j in cutile.axis(0, N, tile_n):  # 编译器决定并行策略            accum = cutile.allocate((tile_m, tile_n), "float32")            for k in cutile.axis(0, K, tile_k):                a_tile = A[i:i+tile_m, k:k+tile_k]                b_tile = B[k:k+tile_k, j:j+tile_n]                accum = cutile.dot(a_tile, b_tile, accum)            C[i:i+tile_m, j:j+tile_n] = accum
2.内存访问模式
传统cuda→→手动、手动,真麻烦
// 需要显式管理共享内存__shared__ float tileA[TILE_SIZE][TILE_SIZE];__shared__ float tileB[TILE_SIZE][TILE_SIZE];// 手动加载到共享内存int tx = threadIdx.x, ty = threadIdx.y;tileA[ty][tx] = A[row * K + col];tileB[ty][tx] = B[row * N + col];__syncthreads();  // 必须显式同步
tile→→→自动、自动→全自动
# 编译器自动处理内存层次@cutile.primitivedef conv2d(input: cutile.tensor[N, H, W, C],            filter: cutile.tensor[Fh, Fw, C, M],           output: cutile.tensor[N, H_out, W_out, M]):    # 编译器决定何时使用共享内存、寄存器    tile_n = 8   # batch维度分块    tile_h = 16  # 高度分块    tile_w = 16  # 宽度分块    tile_c = 32  # 通道分块    # 自动生成内存层次代码    for n, h, w, m in cutile.grid(N, H_out, W_out, M):        for fh, fw, c in cutile.reduction(Fh, Fw, C):            # 编译器决定内存放置策略            in_tile = input[n, h*stride+fh, w*stride+fw, c]            filter_tile = filter[fh, fw, c, m]            output[n, h, w, m] += in_tile * filter_tile
3.并行循环表达
传统cuda
// 网格/线程块映射int row = blockIdx.y * blockDim.y + threadIdx.y;int col = blockIdx.x * blockDim.x + threadIdx.x;// 并行循环需要手动展开if (row < M && col < N) {    float sum = 0.0f;    for (int k = 0; k < K; k++) {        sum += A[row * K + k] * B[k * N + col];    }    C[row * N + col] = sum;}
tile(瓦片)
# 声明并行维度@cutile.primitivedef batched_gemm(batch: cutile.dim, M: cutile.dim, N: cutile.dim, K: cutile.dim,                 A: cutile.tensor[batch, M, K], B: cutile.tensor[batch, K, N],                 C: cutile.tensor[batch, M, N]):    # cutile.axis 定义并行维度    for b in cutile.axis(0, batch, 8):  # batch维度并行        for i in cutile.axis(0, M, 128):  # M维度并行            for j in cutile.axis(0, N, 128):  # N维度并行                # reduction维度自动处理                accum = cutile.sum_reduce(K, 32                    lambda k: A[b, i, k] * B[b, k, j])                C[b, i, j] = accum
总管对比,乍一看,改动不大。
但是老话说的好,外行看热闹,内行看门道
如果你思考过CUDA编程模型,以及思考过里面乱七八糟的概念(网格、block、线程等),就能发现 确实变化很大
它把 CUDA 编程的难度 打了下来,原来99天学好的知识,不要长篇大论,不要998,也不要98,只要九块九
这是多么大的进步呀
原来需要21天学会的,cuTile 只要9.9小时,你就能把CUDA编程带回家
现在你明白,这个cuTile 牛逼之处了吧,进步的步幅之大了
直接把  cuda编程员的基数扩大十倍
200人 老黄口中的200人
老黄(黄仁勋)口中的 200 人[传统软件工程师转行 AI 需要掌握的一千个知识点]
具身智能
具身智能[传统软件工程师转行 AI 需要掌握的一千个知识点]
自动驾驶路线简述
自动驾驶路线简述[传统软件工程师转行 AI 需要掌握的一千个知识点]
模型测评
模型测评[传统软件工程师转行 AI 需要掌握的一千个知识点]
MCP
MCP[传统软件工程师转行 AI 需要掌握的一千个知识点]
上下文工程 or RAG
上下文工程 or RAG[传统软件工程师转行 AI 需要掌握的一千个知识点]
vLLM  FlashAttention
vLLM & FlashAttention[传统软件工程师转行 AI 需要掌握的一千个知识点]
Jupyter &&  开发框架:Pytorch CUDA
Jupyter  & Pytorch[传统软件工程师转行 AI 需要掌握的一千个知识点]
CUDA 编程
CUDA[传统软件工程师转行 AI 需要掌握的一千个知识点]
GPU
GPU[传统软件工程师转行 AI 需要掌握的一千个知识点]
开源模型
LLaMa - 开源模型[传统软件工程师转行 AI 需要掌握的一千个知识点]
世界模型
世界模型[传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络]
Mamba
Mamba(线性注意力)【传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络】
MoR
传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→MoR
神经辐射网络
传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→神经辐射网络
RLHF
传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→RLHF
COT 思维链
传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→思维链

DeepSeek R1

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→强化学习 DeepSeek :R1

强化学习

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ 强化学习 Q-Learning、DQN、PG、PPO

多模态

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ 多模态 CLIP

Diffusion

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ 扩散模型 Dissfussion  DDPM

GPT 系列

GPT1  GPT2 GPT3  GPT3.5 GPT4

终于到了这个跨时代的GPT了,足以记录在人类文明史的一页

GPT1

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ GPT1

GPT2 、GPT3

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ GPT2、3

GPT3.5 、GPT4

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ GPT3.5、4

Transformer传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ Transformers

GAN

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ GAN

AlphaGo

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ AlphaGo

ResNet

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ ResNet

CNN AlexNet VGG 

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ CNN AlexNet VGG

VAE

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ VAE

深度信念网络

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→深度信念网络

集成学习(主导了十年)

RNN Lstm传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→RNN

CNN Lenet-5传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→CNN

Hopfield网络&&玻尔兹曼机传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→ Hopfield网络&玻尔兹曼机

反向传播传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→反向传播

多层感知机

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→多层感知机

感知机

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→感知机

MP 神经元

传统软件工程师转行 AI 需要掌握的一千个知识点→神经网络→MP神经元

最新文章

随机文章