我不明白为什么会这样断言。我相信我有正确的代码序列来设置脚本组
ScriptGroup.Builder sBuilder = new ScriptGroup.Builder(mRS);
sBuilder.addKernel(K1.getKernelID_root());
sBuilder.addKernel(K2.getKernelID_root());
sBuilder.addConnection(inAlloc.getType(),
K1.getKernelID_root(),
K2.getKernelID_root());
ScriptGroup sGroup = sBuilder.create();
sGroup.setInput(K1.getKernelID_root(), inAlloc);
sGroup.setOutput(k2.getKernelID_root(), outAlloc);
sGroup.execute();
我问是因为我发现 K1 执行了,但是 K2 根本不执行。相反,这个断言被抛出。这个断言与这种行为有什么关系吗?
@jason我已经通过使用属性((kernel)) 限定内核解决了这个问题,然后脚本组执行正确触发。这避免了断言,我可以清楚地看到两个内核都按预期执行。但是,仅提供有关此断言发生时的场景的更多详细信息。我之前对内核的定义是void root(short3 *out, uint32_t out_x, uint32_t out_y)
. 因此,当内核被定义为这样(即定义为根)时,似乎抛出了断言。看起来 ScriptGroup.SetInput 和内核是否被定义为 root 之间存在某种冲突。当我有机会时,我会尝试重现这个问题。目前,我已经解决了上面提到的这个问题。