Функция (deepwiseConvolution): отсутствует привязка threadgroupMemory по индексу 0 для lM [0] - PullRequest
0 голосов
/ 07 ноября 2018

Я пытаюсь запустить простое ядро ​​DepthwiseConvolution с Metal Performance Shaders на MacOS и у меня проблемы с ним. Сначала я инициализирую MPSImage (называемый debugInputImage) с правильным размером, заполненным некоторым числом, скажем, 1.0. Затем я создаю свое сверточное ядро:

convolution_depthwise_0 = MPSCNNConvolution(device: device, 
    weights: datasource_depthwise_0)

Где datasource_depthwise_0 - это экземпляр MPSCNNConvolutionDataSource со следующим дескриптором:

func descriptor() -> MPSCNNConvolutionDescriptor {
    var desc = MPSCNNDepthWiseConvolutionDescriptor(kernelWidth: 3,
        kernelHeight: 3,
        inputFeatureChannels: 32,
        outputFeatureChannels: 32)
    return desc
}

Вот как я инициализирую входное изображение:

let imageDescriptor = MPSImageDescriptor(channelFormat: .float16, 
    width: 256, height: 256, featureChannels: 32)

debugInputImage = MPSImage(device: device, 
    imageDescriptor: imageDescriptor)

var arrayOfOnes = Array(repeating: Float(1.0), 
    count: imageDescriptor.width * imageDescriptor.height 
        * imageDescriptor.featureChannels)


let arrayOfOnes16 = toFloat16(&arrayOfOnes, size: arrayOfOnes.count)

debugInputImage.writeBytes(arrayOfOnes16, 
    dataLayout: MPSDataLayout.HeightxWidthxFeatureChannels, imageIndex: 0)

Когда я запускаю все это:

let commandBuffer = commandQueue.makeCommandBuffer()!
let outImage = convolution_depthwise_0.encode(commandBuffer: commandBuffer, 
    sourceImage: debugInputImage)

И получите эту ошибку (в этой строке let outImage = convolution_depthwise_0.encode(...):

validateComputeFunctionArguments:860: failed assertion `Compute 
Function(depthwiseConvolution): missing threadgroupMemory binding 
at index 0 for lM[0].'

Для регулярной свертки все хорошо, только для Depthwise я получаю эту проблему.

В чем может быть причина этой ошибки?

Система: MacOS 10.14, XCode 10.1 beta 3

Только MPSCNNDepthWiseConvolutionDescriptor не работает. У меня нет проблем с MPSCNNConvolutionDescriptor. У меня тоже нет проблем на iOS, только Mac OS.

...