Сбой 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;

}

Обновить

Это имеет отношение к динамическим массивам.

Поскольку он не может создать состояние конвейера и не приводит к сбою при запуске реального шейдера, это должно быть проблемой кодирования. Не проблема ввода.

Назначение значений из динамического массива в буфер приводит к сбою.

Ответы на вопрос(2)

Ваш ответ на вопрос