OpenCL 中 mint 的类型定义在 MacOS 中似乎是错误的

问题描述 投票:0回答:1

考虑以下在 Mac OS X ARM(64 位)14.4.1 (23E224) 上使用 Mathematica 14.0.0 运行的小脚本

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}}

结果错误!

long 替换 mint 给出了正确的结果,如下面的条中所示

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}}

我相信 mint 的 #typedef 指令对于这个特定的机器目标是不正确的。任何人都知道 (.h 文件 ...) mint 类型在哪里定义以及如何实现正确的类型 fpr MacOs 目标。

macos opencl wolfram-mathematica
1个回答
0
投票

您需要将 OpenCL 内核中自定义数据类型名称的任何

typedef
放入 OpenCL C 代码本身中:

In[155]:= src = "
typedef int mint;
__kernel void addTwo(__global mint* arry, mint len) {
    int index = get_global_id(0);
    if (index >= len) return; 
    arry[index] += 2;
}";
© www.soinside.com 2019 - 2024. All rights reserved.