Интегрированный графический процессор Intel быстрее, чем Radeon на MacBook - PullRequest
0 голосов
/ 04 сентября 2018

Я пишу приложение, в котором широко используются фильтры CoreImage + пользовательские шейдеры. Обычный случай:

  1. Загрузка и кэширование большого RAW-файла с жесткого диска через CIFilter(imageURL)
  2. Применение коррекций (оттенок, температура, экспозиция)
  3. Применение случайных предопределенных фильтров CoreImage
  4. Применение пользовательских шейдеров
  5. Отобразить все до MTLTexture
  6. Визуализация из MTLTexture на экран
  7. Перейти к шагу 2.

Теперь мы наблюдали на различных MacBook (например, в конце 2014 года), что этот код работает быстрее, если целевой MTLDevice - это интегрированный графический процессор Intel, а не высокопроизводительный Radeon, подключенный к MBP.

Есть идеи, почему это так? Я ожидал бы, что Radeon будет намного быстрее.

редактирование:


Протестированные карточки:

  • "Radeon Pro 460 4096 МБ" против "Intel HD Graphics 530 1536 МБ"
  • «NVIDIA GeForce GT 750M 2 ГБ GDDR5» против «Intel Iris Pro Graphics»

Упрощенная версия кода, который мы используем:

let filter = CIFilter(imageURL: urlToRawFile20MBLarge)

class Renderer: MTKView {
    override func draw() {

        filter.setValue(temp, forKey: kCIInputNeutralTemperatureKey)

        let image: CIImage = filter.cropped(to: rect)
                                   // uses CIFilter(name: "CIGaussianBlur").outputImage
                                   .applyBlurFilter(radius: radius)
                                   .applyCustomShader1(param: x)
                                   .applyCustomShader2(param: y)

        // ... create command buffer and `CIRenderDestination`

        do {
            try ciContext.startTask(toClear: dest)
            try ciContext.startTask(toRender: image, to: dest)
        } catch {
            log(error)
        }

        if let drawable = currentDrawable {
            commandBuffer.present(drawable)
        }
    }
}
...