1
votes

Today I have figured out something that really made me wondering. I have the Samsung Exynos 4412 ARM9 CPU which has a GPU400(QuadCore). I tried to get a texture from the GPU to CPU by all known methods and its really slow. The same scenario and slow speed happens also in modern CPUs and GPUs in the PC Platform. My wondering is how that happens and the Samsung Exynos is an SoC and both of them has the same memory and I should not care about the bus. Why that happens ?

The data from the GPU to the CPU is transferred by many methods which I have tried glReadpixels, gltexSubImage2D, gltexImage2d, FBO. The frame rate drops from 40FPS to 7FPs or 7FPS while using any of those methods, on a texture 1024*1024 24bits.

1
@ZanLynx The GPU I have has no CUDA or OpenCLAhmed Saleh
Could you define slow in ms or in some other value? Also provide more information how you transferring the data.Kimi
And note that in that other question his real problem was his code was measuring the wrong thing. Showing your code might help get an answer.Zan Lynx

1 Answers

2
votes

Possible answers taken from the OpenGL forums:

  • Latency: it takes time for the read command to reach the hardware.
  • OpenGL command buffering: Reading the data requires the OpenGL driver to complete all outstanding commands.
  • Hardware buffering: Hardware must empty all GPU core pipelines before doing a readback.

Possible solution: - Copy the data internally on the GPU to another location and read it back some number of frames after computing it. This should allow everything writing to that location to have completed before you attempt to read it.