自從轉向Xcode 8和iOS10以來,我的基於金屬的應用程序根本無法運行。在推出我得到的錯誤:「編譯器失敗,XPC_ERROR_CONNECTION_INTERRUPTED」無法使用Xcode 8編譯的金屬函數
這出現在控制檯兩到三次因MTLComputePipelineState
沒有成功創建崩潰並調用MTLDevice
功能makeComputePipelineState(function:)
時拋出一個錯誤之前。我對該項目進行的唯一更改是更新到Swift 3.0,但控制檯似乎意味着編譯器錯誤,這是由於我假設的崩潰導致某些金屬代碼無法正確編譯。
任何幫助將不勝感激,這是過早老化我。
UPDATE:
我位於造成的.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
和都是在同一內核中計算的整數。
內核很大,所以我會發佈一個link到GitHub位置。這是導致問題的稱爲simplex3D
和simplex4D
的功能。這些非常相似,所以只關注其中的一個,它們是碳副本,但4D有另一個變量運行(ll
,l1
,l
等)。
這個問題當然似乎是用計算變量查找這些數組,因爲當我將變量更改爲簡單文字時,沒有錯誤。
內核需要執行才能發生錯誤。
任何幫助這個新的信息將是偉大的。
這幾乎肯定是一個編譯器錯誤。請檢查Xcode中的設備日誌以查看MTLCompilerService中的崩潰情況,並將日誌附加到包含儘可能多其他信息的雷達上。 – warrenm
檢查之後,它們中包含的MTLCompilerService不會崩潰。 –
另外值得注意的是,當我嘗試運行沒有其他函數調用的內核時,它運行良好。當我嘗試從內核中調用另一個函數時彈出錯誤。現在不在我的電腦上,但我會在上傳一個例子 –