# opencl_tutorial **Repository Path**: zwmagic/opencl_tutorial ## Basic Information - **Project Name**: opencl_tutorial - **Description**: OpenCL学习课程(Code Agent版本) - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-07 - **Last Updated**: 2026-03-05 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # OpenCL Tutorial ## 课程案例 | 学习阶段 | 计划课程 | 内容 | 涉及的特性 | 当前状态 | 工程目录 | |---------|---------|-----|----------|---------|---------| | **初级** | No.1 | OpenCL 基础概念 | Platform/Device API | ✅ | NA | | **初级** | No.2 | 查看设备 | Platform API, 设备查询 | ✅ | case000, case001 | | **初级** | No.3 | 向量加法 | Kernel/Buffer/Queue 流程 | ✅ | case002 | | **初级** | No.4 | FP32 矩阵乘法 | 2D NDRange, 内存模型 | ✅ | case003 | | **中级** | No.5 | FP16 半精度 | half 类型 (POCL不支持) | ⏳ | case004 | | **中级** | No.6 | Softmax 归一化 | 跨步寻址, math 函数 | ✅ | case005 | | **中级** | No.7 | int8 量化乘法 | 量化推理, 内存压缩 | ✅ | case006 | | **中级** | No.8 | 4bit 量化乘法 | RGBA 纹理打包 | ✅ | case007 | | **中级** | No.9 | Sobel 边缘检测 | 图像读取, 卷积 | ✅ | case100 | | **高级** | No.10 | Local Memory 优化 | 共享内存, Tiling | ✅ | case010 | | **高级** | No.11 | 归约算法 | Barrier, 线程协作 | ✅ | case011 | | **高级** | No.12 | 原子操作 | Atomics, 计数器 | ✅ | case012 | | **高级** | No.13 | 多内核流水线 | Events, 依赖调度 | ✅ | case013_pipeline | | **高级** | No.14 | Scan/Prefix Sum | SIMD 算法 | ✅ | case014_scan | | **高级** | No.15 | 矩阵乘优化 (Tiled) | 共享内存, 寄存器复用 | ✅ | case015_tiled_matmul | | **高级** | No.16 | OpenCL 2.0 新特性 | Pipes, SVM | ✅ | case016_opencl2 | | **高级** | No.17 | CNN 卷积层 | 3D NDRange, Im2Col | ⏳ | case017_cnn | | **高级** | No.18 | Sort 排序算法 | Bitonic Sort, 并行 | ✅ | case018_sort | ## 环境配置 ### POCL 安装 (CPU OpenCL 调试环境) 在无 GPU 环境下,可以使用 POCL (Portable Computing Language) 进行 OpenCL 开发调试。 #### 依赖安装 ```bash # 安装编译工具和依赖 yum install -y cmake llvm-devel clang clang-devel ocl-icd-devel # 安装 OpenCL 头文件 yum install -y opencl-headers ``` #### 下载并编译 POCL ```bash # 下载 POCL 源码 (使用国内镜像) wget https://github.com/pocl/pocl/archive/refs/tags/v7.0.zip -O pocl.zip unzip pocl.zip cd pocl-7.0 # 编译配置 mkdir build && cd build cmake .. -DWITH_LLVM_CONFIG=/usr/bin/llvm-config \ -DCMAKE_BUILD_TYPE=Debug \ -DENABLE_EXAMPLES=OFF \ -DENABLE_TESTS=OFF # 编译安装 make -j$(nproc) make install ``` #### 配置 ICD ```bash # 配置 POCL ICD echo "/usr/local/lib64/libpocl.so" > /etc/OpenCL/vendors/pocl.icd ``` #### 验证安装 ```bash # 查看 OpenCL 平台 clinfo # 测试 POCL python3 -c "import pyopencl as cl; print(cl.get_platforms())" ``` #### 注意事项 - POCL 是 CPU 实现,性能比真实 GPU 慢,但适合开发调试 - POCL 对 FP16 支持有限,FP16 案例需要真实 GPU - 代码中建议添加 CPU 回退逻辑: ```cpp platform.getDevices(CL_DEVICE_TYPE_GPU, &devices); if (devices.empty()) { platform.getDevices(CL_DEVICE_TYPE_CPU, &devices); } ```