You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MatX编译问题:共享变量初始化报错求助

编译MatX时出现__shared__变量初始化错误的解决方案

问题描述

在Ubuntu 20.04环境下,按照MatX官方文档步骤编译安装,执行make -j时触发如下编译错误:

/home/<me>/Documents/MatX/include/matx/kernels/channelize_poly.cuh(349): error: initializer not allowed for __shared__ variable 

/home/<me>/Documents/MatX/include/matx/kernels/channelize_poly.cuh(349): error: initializer not allowed for __shared__ variable 

/home/<me>/Documents/MatX/include/matx/kernels/channelize_poly.cuh(349): error: initializer not allowed for __shared__ variable 

/home/<me>/Documents/MatX/include/matx/kernels/channelize_poly.cuh(349): error: initializer not allowed for __shared__ variable 

/home/<me>/Documents/MatX/include/matx/kernels/channelize_poly.cuh(349): error: initializer not allowed for __shared__ variable 

/home/<me>/Documents/MatX/include/matx/kernels/channelize_poly.cuh(64): error: initializer not allowed for __shared__ variable 

查看报错代码行,发现并未对__shared__变量做显式初始化:

// Lines 63 & 64
const int SMEM_MAX_FILTER_TAPS = 128;
__shared__ filter_t smem_filter[SMEM_MAX_FILTER_TAPS];

// Lines 348 & 349
// Pre-compute the DFT complex exponentials and store in shared memory
__shared__ output_t smem_eij[NUM_CHAN][NUM_CHAN];

环境配置:

  • CUDA 11.6
  • G++ 9.4.0
  • Ubuntu 20.04

解决方案

1. 升级CUDA版本

CUDA 11.6对编译期常量作为共享内存数组大小的语法支持存在限制,而MatX最新代码可能依赖更高版本CUDA的特性。建议将CUDA升级至11.7及以上版本(优先推荐12.x系列),升级后重新执行编译流程。

2. 调整CMake编译参数

检查CMake配置是否启用了正确的CUDA架构和C++标准:

  • 重新运行CMake时添加参数,指定匹配你GPU的架构(如75对应Turing架构,80对应Ampere架构),并开启C++17标准:
    cmake .. -DCMAKE_CUDA_ARCHITECTURES=你的GPU架构编号 -DCMAKE_CXX_STANDARD=17
    
  • 执行上述命令后,重新运行make -j编译。

3. 临时代码修改(不推荐)

若暂时无法升级CUDA,可尝试手动修改报错代码,将共享内存数组的大小替换为直接数值常量:

  • 将第64行改为:__shared__ filter_t smem_filter[128];
  • 第349行将NUM_CHAN替换为其实际定义的数值(需查看代码中该宏的具体值)
    注意:此方法可能破坏代码的通用性,仅作为临时应急方案。

内容的提问来源于stack exchange,提问作者Hugo Phibbs

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 19:38:10