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

OpenCL中__kernel与HashCat的KERNEL_FQ区别及编译问题咨询

关于HashCat中KERNEL_FQ宏的疑问及编译错误解决

问题背景

在HashCat项目的OpenCL文件中,内核函数采用如下方式定义:

KERNEL_FQ void m20600_comp (KERN_ATTR_TMPS (omt_sha256_tmp_t))
{
...
}

我只见过用__kernel定义OpenCL内核函数,有以下疑问:

  • KERNEL_FQ是不是__kernel的合法替代?
  • 如果不是,它到底是什么?
  • 使用Clang为AMD编译该内核时出现错误:kernel-test.cl:138:1: error: unknown type name 'KERNEL_FQ',执行的命令为:
clang -Dcl_clang_storage_class_specifiers -isystem libclc/generic/include -include clc/clc.h -target polaris11-amdgcn-- -xcl kernel-test.cl -emit-llvm -S -o kernel-test.ll

解答

  1. KERNEL_FQ的本质
    KERNEL_FQ不是OpenCL标准中的合法关键字,它是HashCat项目自定义的预处理宏。

  2. 宏的作用
    这个宏是HashCat为实现跨OpenCL编译环境的兼容性而定义的,在预处理阶段会被展开为标准的__kernel关键字(或根据编译目标平台调整为适配的定义),用于统一不同环境下的内核声明方式。

  3. 编译错误的原因与解决
    出现unknown type name 'KERNEL_FQ'错误,是因为你的编译命令没有引入HashCat项目中定义该宏的头文件,导致Clang无法识别这个自定义宏。

解决办法:

  • 在编译命令中添加HashCat项目的头文件路径(比如HashCat源码根目录下的inc/目录),确保预处理阶段能找到定义KERNEL_FQ的头文件。
  • 参考HashCat原生的编译脚本(如Makefile)中的参数,复用必要的宏定义和头文件路径,保证编译环境与HashCat项目一致。

示例修正后的编译命令(假设HashCat头文件位于hashcat/inc目录):

clang -Dcl_clang_storage_class_specifiers -isystem libclc/generic/include -include clc/clc.h -I hashcat/inc -target polaris11-amdgcn-- -xcl kernel-test.cl -emit-llvm -S -o kernel-test.ll

内容的提问来源于stack exchange,提问作者Amrit Baveja

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 16:23:10