Сбой newComputePipelineStateWithFunction
Я пытаюсь позволить нейронной сети работать на металле. Основная идея заключается в дублировании данных. Каждый поток GPU запускает одну версию сети для случайных точек данных.
Я написал другие шейдеры, которые работают нормально.
Я также попробовал свой код в приложении командной строки c ++. Там нет ошибок. Также нет ошибки компиляции.
Я использовал документацию Apple, чтобы преобразовать ее в металлический с ++, поскольку поддерживается не все из с ++ 11.
Вылетает после загрузки функции ядра и при попытке назначитьnewComputePipelineStateWithFunction
к металлическому устройству. Это означает, что есть проблема с кодом, который не перехватывается во время компиляции.
MCVE:
kernel void net(const device float *inputsVector [[ buffer(0) ]], // layout of net *
uint id [[ thread_position_in_grid ]]) {
uint floatSize = sizeof(tempFloat);
uint inputsVectorSize = sizeof(inputsVector) / floatSize;
float newArray[inputsVectorSize];
float test = inputsVector[id];
newArray[id] = test;
}
Обновить
Это имеет отношение к динамическим массивам.
Поскольку он не может создать состояние конвейера и не приводит к сбою при запуске реального шейдера, это должно быть проблемой кодирования. Не проблема ввода.
Назначение значений из динамического массива в буфер приводит к сбою.