Это странное сообщение об ошибке, которое само по себе заслуживает сообщения об ошибке.
Проблема в том, что вы вручную заполняете свои матричные дескрипторы, но не инициализируете все необходимые поля,В частности, каждый из ваших дескрипторов матрицы имеет свои свойства matrices
и matrixBytes
, установленные на 0, что является недопустимой конфигурацией.
Хотя эти свойства, кажется, не проверяются во время создания матрицы, онипохоже, что проверяется во время кодирования, что приводит к этой ошибке.По моему мнению, во время создания матрицы должна быть более строгая проверка, но поскольку MPSMatrix
является такой легкой оболочкой для буфера, это, вероятно, не было сочтено необходимым.
В любом случаеЛучший способ избежать этого - использовать метод фабрики дескрипторов матриц, чтобы заполнить оставшиеся поля.Это меньше кода, и это более стильно.Например:
MPSMatrixDescriptor * descriptionA =
[MPSMatrixDescriptor matrixDescriptorWithRows:3
columns:1
rowBytes:totalBytesA/3
dataType:MPSDataTypeFloat32];
Кроме того, у вас, похоже, есть ошибка в вызовах создания и кодирования ядра: resultColumns
должно быть 3, а не 1;leftMatrix
должно быть A
;и rightMatrix
должно быть B, чтобы получить матрицу результатов 3x3.