newComputePipelineStateWithFunction falhou

Estou tentando deixar uma rede neural correr em metal. A idéia básica é a duplicação de dados. Cada thread gpu executa uma versão da rede para pontos de dados aleatórios.

Eu escrevi outros shaders que funcionam bem.

Eu também tentei meu código em um aplicativo de linha de comando c ++. Não há erros lá. Também não há erro de compilação.

Usei a documentação da apple para converter em metal c ++, pois nem tudo é suportado no c ++ 11.

Ele trava depois de carregar a função do kernel e quando tenta atribuirnewComputePipelineStateWithFunction para o dispositivo de metal. Isso significa que há um problema com o código que não é capturado no momento da compilação.

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;

}

Atualizar

Tem tudo a ver com matrizes dinâmicas.

Como ele falha na criação do estado do pipeline e não falha ao executar o shader real, deve ser um problema de codificação. Não é um problema de entrada.

Atribuir valores de uma matriz dinâmica a um buffer faz com que ela falhe.

questionAnswers(2)

yourAnswerToTheQuestion