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

MacOS ARM平台下OpenCL中mint类型定义疑似错误问询

关于Mathematica 14.0.0在Mac OS X ARM64上OpenCL mint类型的问题

问题场景

在Mac OS X ARM(64位)14.4.1系统上运行Mathematica 14.0.0时,使用mint类型编写OpenCL内核会出现执行结果错误,替换为long后结果恢复正常。

错误测试脚本

In[155]:= src = "
__kernel void addTwo(__global mint* arry, mint len) {
    int index = get_global_id(0);
    if (index >= len) return; 
    arry[index] += 2;
}";

In[156]:= addTwo = 
 OpenCLFunctionLoad[src, "addTwo", {{_Integer}, _Integer}, 16]

Out[156]= OpenCLFunction["<>", "addTwo", {{_Integer}, "Integer64"}]

In[157]:= addTwo[ ConstantArray[1, 10], 10]

Out[157]= {{8589934595, 8589934595, 8589934595, 8589934595, 
  8589934595, 1, 1, 1, 1, 1}}

上述执行结果错误,前5个元素出现异常值,后5个未被正确修改。

修正后测试脚本

将内核中的mint替换为long后,执行结果正确:

In[158]:= src = "
__kernel void addTwobis(__global long* arry, mint len) {
    int index = get_global_id(0);
    if (index >= len) return; 
    arry[index] += 2;
}";

In[161]:= addTwobis = 
 OpenCLFunctionLoad[src, "addTwobis", {{_Integer}, _Integer}, 16]

Out[161]= OpenCLFunction["<>", "addTwobis", {{_Integer}, "Integer64"}]

In[162]:= addTwobis[ ConstantArray[1, 10], 10]

Out[162]= {{3, 3, 3, 3, 3, 3, 3, 3, 3, 3}}

问题解答

1. mint类型定义的头文件位置

mint是Mathematica OpenCLLink中定义的整数类型,其typedef通常位于Mathematica安装目录下的OpenCL相关头文件中,具体路径为:
/Applications/Mathematica.app/Contents/SystemFiles/Links/OpenCLLink/Resources/C/include/WolframOpenCL.h
该头文件会自动被OpenCLFunctionLoad加载到OpenCL编译环境中。

2. MacOS ARM64目标的正确类型实现

从测试结果来看,当前环境中mint的typedef存在位数不匹配问题:Mathematica传递的是64位整数(Integer64),但mint被错误解析为32位类型,导致内存访问异常。解决方式有两种:

  • 临时修正:在OpenCL内核代码开头手动添加typedef,强制将mint映射为64位整数:
    typedef long mint;
    
  • 直接替换:如测试中所示,直接使用long(MacOS ARM64下为64位)代替mint作为内核参数类型,确保与Mathematica传递的Integer64类型匹配。

内容的提问来源于stack exchange,提问作者Olivier Janssens

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 10:17:36