Почему копирование памяти из VRAM в RAM медленнее, чем из RAM в VRAM? (OpenGL)

Я создаю что-то похожее на CUDA, но я видел, что копирование памяти из RAM в VRAM очень быстро, как копирование из RAM в себя. Но копирование из VRAM в RAM намного медленнее, чем из RAM в VRAM.

Кстати, я использую glTexSubImage2D скопировать из ОЗУ в ВРАМ и glGetTexImage скопировать из VRAM в RAM.

Зачем? Есть ли способ улучшить его производительность, как копирование ОЗУ в VRAM?

4

Решение

Передача данных из GPU в CPU всегда была очень медленной операцией.

GPU -> CPU readback вводит «точку синхронизации», когда ЦП должен ждать, пока графический процессор завершит свои вычисления. В течение этого времени центральный процессор перестает снабжать графический процессор данными, что приводит к его остановке.

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

Считывание результатов асинхронно (через несколько кадров) позволяет графическому процессору продолжать выполнение без истощения потоков (проблема остановки и возобновления, описанная выше). Это значительно повышает производительность — чем параллельнее графический процессор, тем выше повышение производительности.

В зависимости от вашего графического чипа и драйвера, возможно, вы получите лучшую производительность, используя ОПО.

6

Другие решения

Кстати, я использую glTexSubImage2D для копирования из RAM в VRAM и glGetTexImage для копирования из VRAM в RAM.

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

Поскольку вы не предоставили реальный код, нет способа узнать, выбрали ли вы неверные параметры или нет.

Если вы хотите проверить прямой копирование производительность, используйте буферный объект.

3

По вопросам рекламы [email protected]