Почему не достигается увеличение производительности текстур в оттенках серого OpenGL? - PullRequest
0 голосов
/ 03 мая 2018

Я использую вычислительный шейдер OpenGL для обработки изображения, шейдер копирует только исходную текстуру в целевую текстуру.

В первом тесте исходная и целевая текстуры оба BGR8 , во втором тесте они оба R8 .

Объем памяти текстур в оттенках серого примерно в 4 раза меньше цветовой текстуры, поэтому я ожидаю получить 4x скорость во втором тесте. тем не менее, я получаю только 1.5x прирост скорости .

Кто-нибудь может сказать мне, если что-то не так?

прикрепить код, в первый раз обе текстуры используют .bgra8Unorm, во второй раз использовать .r8Unorm,

kernel void
copyKernel(texture2d<half, access::read>  inTexture  [[texture(0)]],
           texture2d<half, access::write> outTexture [[texture(1)]],
           uint2 gid [[thread_position_in_grid]]) {
    half4 inColor  = inTexture.read(gid);
    outTexture.write(inColor, gid);
}

1 Ответ

0 голосов
/ 03 мая 2018

Примечание: следующее предполагает, что вы правильно профилируете свою производительность (используя запросы таймера и т. П.).

С каждым процессом связаны затраты. Существует стоимость фактического выполнения работы, которая включает доступ к памяти и тому подобное. Но есть также стоимость выполнения чего угодно : накладные расходы на выполнение процесса вообще.

Хотя стоимость выполнения работ, как правило, зависит от объема работы, накладные расходы обычно являются фиксированными. Это означает, что чем меньше работы вы выполняете, тем больше накладных расходов относительно этой работы.

Таким образом, когда вы делаете свою работу менее напряженной, производительность вашего процесса становится более зависимой от фиксированных накладных расходов на вызов операции. В вашем случае, оригинальная 3-компонентная копия текстуры, вероятно, не была большой работой с самого начала. Таким образом, сокращение работы при одновременном повышении производительности не сказалось на накладных расходах на ее выполнение.

...