[Mesa-dev] [PATCH 0/2] radeon: Use the DMA engine for buffer downloads
Niels Ole Salscheider
niels_ole at salscheider-online.de
Mon Mar 3 12:29:31 PST 2014
Using the DMA engine for buffer downloads vastly improves performance. This is
because reads from VRAM by the CPU are slow because of the high latency of the
PCIe bus.
The first patch allows u_upload_mgr to be used for downloads, too. The second
patch then uses u_upload_mgr in the radeon driver for downloads.
I considered to rename u_upload_mgr to u_transfer_mgr since it might be
confusing that an "upload manager" can be used for downloads. But then again we
also have "transfers" so that u_transfer_mgr might also be confusing. Thus, I
decided not to rename it for now.
Without these patches, the buffer_bandwidth benchmark from uCLbench gives me:
./buffer_bandwidth --size=20000000 --iterations=100
# device 0: AMD BARTS // type gpu (192 MB global memory, 64 KB constant memory,
32 KB local memory)
1/1 direct 20000000 Bytes 759.29 MB/s(HD) 17.13 MB/s(DD)
14.61 MB/s(DH)
With these paches, the read performance is much better:
./buffer_bandwidth --size=20000000 --iterations=100
# device 0: AMD BARTS // type gpu (192 MB global memory, 64 KB constant memory,
32 KB local memory)
1/1 direct 20000000 Bytes 759.90 MB/s(HD) 613.49 MB/s(DD)
1841.07 MB/s(DH)
Judging by these numbers, it might even make sense to use the DMA engine for
larger buffer downloads...
Niels Ole Salscheider (2):
util/u_upload_mgr: Allow to also use it for downloads
radeon: Use transfer manager for buffer downloads
src/gallium/auxiliary/hud/hud_context.c | 3 +-
src/gallium/auxiliary/util/u_blitter.c | 3 +-
src/gallium/auxiliary/util/u_upload_mgr.c | 49 +++++++++++-----
src/gallium/auxiliary/util/u_upload_mgr.h | 13 ++++-
src/gallium/auxiliary/util/u_vbuf.c | 3 +-
src/gallium/auxiliary/vl/vl_compositor.c | 3 +-
src/gallium/drivers/ilo/ilo_context.c | 3 +-
src/gallium/drivers/r300/r300_context.c | 3 +-
src/gallium/drivers/radeon/r600_buffer_common.c | 78 +++++++++++++++++++------
src/gallium/drivers/radeon/r600_pipe_common.c | 14 ++++-
src/gallium/drivers/radeon/r600_pipe_common.h | 1 +
src/mesa/state_tracker/st_context.c | 9 ++-
12 files changed, 136 insertions(+), 46 deletions(-)
--
1.9.0
More information about the mesa-dev
mailing list