
VOLK内核API速查手册140数学内核命名规则与功能完整清单【免费下载链接】volkThe Vector Optimized Library of Kernels项目地址: https://gitcode.com/gh_mirrors/vol/volkVOLKVector-Optimized Library of Kernels是 GNU Radio 生态下的向量优化内核库为每种数学运算提供了针对 SSE、AVX、NEON 等 SIMD 指令集手写的加速实现。本文是一份面向新手的VOLK 内核 API 速查手册先讲透如何读懂一个 VOLK 内核函数名再给出全部 140 数学内核按功能分类的完整清单最后说明如何选择正确的内核版本调用。一、3分钟搞懂什么是 VOLK 内核在动手查表之前先弄清三个核心概念定义来自 docs/extending_volk.dox 与术语说明文档术语含义Kernel内核一个数学运算的外层 API例如两个向量逐元素相加Protokernel原型内核内核的具体实现。每个内核都有一个用纯 C 编写的generic兜底版外加若干针对特定 CPU 架构SSE/AVX/NEON/RVV…的优化版Dispatcher分发器你实际调用的入口。运行时它会自动检查内存对齐状态并分发给性能最佳的架构实现 对使用者来说你只需要调用内核名本身不带后缀VOLK 会自动挑出当前机器上最快的实现。所有内核源码位于kernels/volk/目录每个内核一个头文件完整内核列表还汇总在docs/kernels.dox中方便快速检索。二、如何读懂 VOLK 内核命名规则VOLK 内核的命名高度规律化看名字就知道输入输出。标准格式为volk_输入类型指纹[_x向量数]_函数名[_s标量类型]_输出类型指纹2.1 类型指纹数字字母组合指纹数据类型示例8u/16u/32u/64u8/16/32/64 位无符号整数volk_32u_byteswap8i/16i/32i8/16/32 位有符号整数volk_16i_max_star_16i32f/64f32 位单精度 / 64 位双精度浮点volk_32f_x2_add_32f16ic/32fc16 位短复数 / 32 位浮点复数volk_32fc_x2_multiply_32fc2.2 前缀与中缀输入参数怎么数s前缀 标量参数如s32f表示一个 32 位浮点标量出现在volk_32f_s32f_multiply_32f中表示向量 × 标量x2/x3/x4 两个/三个/四个向量输入volk_32f_x2_add_32f即两个 32 位浮点向量相加函数名即功能add、multiply、dot_prod、convert、deinterleave……2.3 后缀版本与实现后缀含义_g/_generic通用纯 C 实现任何平台可用作为兜底_a对齐aligned内存优化版_u非对齐unaligned版_neon、_sse、_avx2、_avx512、_rvv、_orc等特定 CPU 架构的专用实现puppet如byteswappuppet为测试框架和性能分析工具volk_profile准备的包装函数普通开发无需关心拆解实例volk_32fc_x2_dot_prod_32fc→ 输入2 个 32 位浮点复数向量 → 函数点积dot product → 输出1 个复数结果。这就是 FIR 滤波器里最常用的复数点积内核。三、140 数学内核完整功能清单按场景分类下面按典型使用场景将全部内核归类函数名均可直接在kernels/volk/中找到同名头文件。3.1 基础向量运算加减乘除 / 最值 / 点积信号处理中最常用的一批内核逐元素运算volk_32f_x2_add_32f、volk_32f_x2_subtract_32f、volk_32f_x2_multiply_32f、volk_32f_x2_divide_32f双精度版本volk_64f_x2_add_64f、volk_64f_x2_multiply_64f复数版本volk_32fc_x2_add_32fc、volk_32fc_x2_multiply_32fc、volk_32fc_x2_divide_32fc最值volk_32f_x2_max_32f、volk_32f_x2_min_32f另有volk_64f_x2_max_64f等点积滤波核心volk_32f_x2_dot_prod_32f、volk_32f_x2_dot_prod_16i、volk_32fc_x2_dot_prod_32fc、volk_16ic_x2_dot_prod_16ic、volk_64f_x2_dot_prod_64f幂运算volk_32f_x2_pow_32f、volk_32f_s32f_power_32f饱和加法防溢出volk_16i_x2_add_saturated_16i、volk_8i_x2_add_saturated_8i、volk_8u_x2_add_saturated_8u3.2 标量 × 向量运算缩放 / 偏置乘标量volk_32f_s32f_multiply_32fGNU Radio 增益块常用加标量volk_32f_s32f_add_32f复数加/乘实标量volk_32fc_32f_add_32fc、volk_32fc_32f_multiply_32fc复数乘复数标量volk_32fc_s32fc_multiply_32fc、volk_32fc_s32fc_multiply2_32fc限幅volk_32f_s32f_x2_clamp_32f归一化 / 标准差volk_32f_s32f_normalize、volk_32f_s32f_stddev_32f取模volk_32f_s32f_s32f_mod_range_32f3.3 复数专用内核幅度 / 共轭 / 旋转器无线电信号处理的重器区幅度volk_32fc_magnitude_32f、volk_32fc_magnitude_squared_32f省掉开方的平方幅度性能更优共轭volk_32fc_conjugate_32fc、volk_32fc_x2_conjugate_dot_prod_32fc共轭乘法volk_32fc_x2_multiply_conjugate_32fc、volk_8ic_x2_multiply_conjugate_16ic相干累积volk_32fc_x2_s32fc_multiply_conjugate_add_32fc相位旋转volk_32fc_s32fc_x2_rotator_32fc、volk_32fc_s32fc_x2_rotator2_32fc距离类volk_32fc_x2_square_dist_32f平方距离常用于搜索/匹配反正切相位volk_32fc_s32f_atan2_32f3.4 类型转换与交织 / 反交织数据排布整数转换volk_8i_convert_16i、volk_16i_convert_8i、volk_32f_s32f_convert_16i、volk_32f_s32f_convert_32i、volk_32f_s32f_convert_8i浮点转换volk_32f_convert_64f、volk_64f_convert_32f、volk_16i_s32f_convert_32f、volk_8i_s32f_convert_32f复数升降位volk_32fc_convert_16ic、volk_16ic_convert_32fc反交织IQ 拆分volk_32fc_deinterleave_real_32f、volk_32fc_deinterleave_imag_32f、volk_32fc_deinterleave_32f_x216ic / 8ic 系列同构交织合成 IQvolk_32f_x2_interleave_32fc、volk_32f_x2_s32f_interleave_16ic3.5 三角函数 / 指数对数逐元素数学基本三角volk_32f_sin_32f、volk_32f_cos_32f、volk_32f_tan_32f双曲函数volk_32f_tanh_32f反三角volk_32f_asin_32f、volk_32f_acos_32f、volk_32f_atan_32f对数指数volk_32f_log2_32f、volk_32f_exp_32f、volk_32f_expfast_32f快速近似版速度更快根式volk_32f_sqrt_32f、volk_32f_invsqrt_32f快速倒平方根、volk_32f_reciprocal_32f同周期正弦余弦volk_32f_sincos_32f_x2一次算出 sin 和 cos效率高3.6 索引查找 / 排序辅助实数极值索引volk_32f_index_max_16u、volk_32f_index_max_32u、volk_32f_index_min_16u、volk_32f_index_min_32u复数极值索引volk_32fc_index_max_16u、volk_32fc_index_max_32u16u/32u 是输出索引类型按数据长度选3.7 位操作 / 编码 / 特殊信号内核这一组面向通信算法极化码、卷积编码、FM 检测等字节序交换volk_16u_byteswap、volk_32u_byteswap、volk_64u_byteswap位计数 / 位反转volk_32u_popcnt、volk_64u_popcnt、volk_32u_reverse_32u位逻辑volk_32i_x2_and_32i、volk_32i_x2_or_32i量化判决volk_32f_binary_slicer_32i、volk_32f_binary_slicer_8i极化码编码volk_8u_x3_encodepolar_8u_x2、volk_8u_x2_encodeframepolar_8u卷积编码volk_8u_x4_conv_k7_r2_8uFM 检测volk_32f_s32f_32f_fm_detect_32f频谱分析辅助volk_32f_s32f_calc_spectral_noise_floor_32f噪声底估计、volk_32fc_s32f_power_spectrum_32f功率谱、volk_32fc_s32f_x2_power_spectral_density_32f统计volk_32f_stddev_and_mean_32f_x2一次输出标准差和均值LDPC/特殊运算volk_16i_max_star_16i、volk_16i_x4_quad_max_star_16i、volk_16i_permute_and_scalar_add、volk_16i_branch_4_state_8、volk_32f_8u_polarbutterfly_32f、volk_32f_x3_sum_of_poly_32f3.8 累加器内核状态型运算带记忆的内核结果会累加到输出volk_32f_accumulator_s32f实数累加、volk_32fc_accumulator_s32fc复数累加。调用前通常需将输出置零。四、最快上手步骤如何选择并调用内核按输入类型 → 运算 → 输出类型定位先看你的数据是什么32 位浮点复数在 docs/kernels.dox 的清单里按首段类型指纹快速过滤只调内核名不加后缀分发器会自动完成对齐检查并选择最优架构实现分发器示例见 kernels/README.md分配对齐内存可再提速使用volk_malloc(size, volk_get_alignment())分配缓冲区配合volk_free()释放让_a对齐版高性能实现得以启用不确定就测运行volk_profile工具它会对每个内核的全部实现做基准测试测试用例注册在lib/kernel_tests.h输出当前 CPU 上各架构版本的耗时排名。五、速查小结你的需求去查哪一类滤波、相关运算x2_dot_prod点积系列增益、偏置s32f_multiply/s32f_add标量系列IQ 数据拆分合并deinterleave/interleave系列幅度、相位magnitude/atan2复数系列数据格式转换convert/byteswap系列找极值位置index_max/index_min系列掌握类型指纹 参数计数 功能名这套命名规则后140 个 VOLK 数学内核的 API 不再是一堆看不懂的长名字而是一张可以按规则自行推导的地图。主要参考资料kernels/ 内核源码目录、docs/kernels.dox 内核清单、docs/extending_volk.dox 扩展指南、lib/kernel_tests.h 测试注册表。【免费下载链接】volkThe Vector Optimized Library of Kernels项目地址: https://gitcode.com/gh_mirrors/vol/volk创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考