自从迁移到Xcode 8和iOS10后,我的基于金属的应用程序根本无法运行 . 在启动时,我收到错误:“编译器因XPC_ERROR_CONNECTION_INTERRUPTED而失败”
由于 MTLComputePipelineState
未成功创建并在调用 MTLDevice
函数 makeComputePipelineState(function:)
时抛出错误,因此在崩溃之前在控制台中出现两到三次 . 我对该项目所做的唯一更改是更新到Swift 3.0,但是控制台似乎意味着编译器错误,由于崩溃,我假设是由于某些金属代码没有正确编译 .
任何帮助将不胜感激,这让我过早老化 .
更新:
我在 .metal
文件中找到导致问题的行:
int gi1 = permMod12[ii+i1+perm[jj+j1+perm[kk+k1]]];
permMod12是一个静态常量数组,声明为:
static constant int permMod12 [512] = {7,4,5,7...}
烫发同样是静态和恒定的:
static constant int perm [512] = {151,160...}
变量 ii
, i1
, jj
, j1
, kk
和 k1
都是在同一内核中计算的整数 .
内核非常大,所以我将link发布到GitHub位置 . 这是导致问题的名为 simplex3D
和 simplex4D
的函数 . 这些非常相似,所以只关注其中一个,它们是碳副本,但4D有另一个变量运行( ll
, l1
, l
等) .
问题当然是用计算变量查找这些数组,就像我将变量更改为简单文字时没有错误一样 .
需要执行内核才能发生错误 .
对这个新信息的任何帮助都会很棒 .
2 回答
我遇到过这种情况,似乎没有解决这个问题的独特解决方案 . 在我的情况下,当使用标准化坐标采样器的纹理也使用
read()
函数时,会出现问题 . 当我将read()
功能切换到sample()
时,这个奇怪的错误被删除了 . 我希望你的问题已经解决了 .我也遇到了同样的错误:“编译器因XPC_ERROR_CONNECTION_INTERRUPTED而失败” . 问题得到了解决 . 它源于尝试使用'threadgroup bool'类型变量 . 重构代码以使用'threadgroup short'变量代替布尔值解决了错误 . (如果bool类型是或不是有效的线程组类型,则无法在Metal Version 2规范中找到 . )