Community
cancel
Showing results for 
Search instead for 
Did you mean: 
asch
Beginner
154 Views

945GME texturing performance

Hi!

I develop an embedded application based on the following prototype HW and SW components:
* Intel Atom CPU
* VGA compatible controller: Intel Corporation Mobile 945GME Express Integrated Graphics Controller (rev 03)
* Linux (Ubuntu with xorg-edgers https://launchpad.net/~xorg-edgers/+archive/ppa)

The plan is to use OpenGL for 2D acceleration and maybe some effects. I have written a simple benchmarking application to measure the hardware's texturing performance. You can find the benchmarking application here (build instructions are in head comment): http://pastebin.com/f5f9c076f

I have monitored the performance of the benchmarking application on both the prototype and my developer hardware. (Developer HW and SW are: Intel CPU, video card with dedicated video memory and NVIDIA GPU and Linux.)

What I have found is that the prototype hardware has acceptable texturing performance (for my purpose) but it has very high CPU usage while only the GPU should work. The GPU works on 100% (monitored by intel_gpu_top) as expected and one CPU core (or one Hyperthread?) is about 70%. On my developer box the same benchmark runs GPU 100% and CPU near 0% as expected.

To tell the truth the CPU 0% on the develpment box could only be achieved by working around a bug in the NVIDIA driver. See this post: http://www.nvnews.net/vbulletin/showthread.php?t=131319

My question is what could cause the CPU usage? How could I monitor it? Is there a way to draw textures with GPU without CPU usage?

I have three ideas:
* The memory bus is allocated by the GPU. CPU tries to access the memory and has to wait for GPU to finish texture transfer. These waits are counted as CPU usage while nothing can be done.
* Some tasks of texturing is not implemented on GPU and that work must be done by the CPU
* This is a synhcronization issue between CPU and GPU. Something like in the NVIDIA driver's case.

0 Kudos
5 Replies
Arti_G_Intel
Employee
154 Views

Quoting - asch
Hi!

I develop an embedded application based on the following prototype HW and SW components:
* Intel Atom CPU
* VGA compatible controller: Intel Corporation Mobile 945GME Express Integrated Graphics Controller (rev 03)
* Linux (Ubuntu with xorg-edgers https://launchpad.net/~xorg-edgers/+archive/ppa)

The plan is to use OpenGL for 2D acceleration and maybe some effects. I have written a simple benchmarking application to measure the hardware's texturing performance. You can find the benchmarking application here (build instructions are in head comment): http://pastebin.com/f5f9c076f

I have monitored the performance of the benchmarking application on both the prototype and my developer hardware. (Developer HW and SW are: Intel CPU, video card with dedicated video memory and NVIDIA GPU and Linux.)

What I have found is that the prototype hardware has acceptable texturing performance (for my purpose) but it has very high CPU usage while only the GPU should work. The GPU works on 100% (monitored by intel_gpu_top) as expected and one CPU core (or one Hyperthread?) is about 70%. On my developer box the same benchmark runs GPU 100% and CPU near 0% as expected.

To tell the truth the CPU 0% on the develpment box could only be achieved by working around a bug in the NVIDIA driver. See this post: http://www.nvnews.net/vbulletin/showthread.php?t=131319

My question is what could cause the CPU usage? How could I monitor it? Is there a way to draw textures with GPU without CPU usage?

I have three ideas:
* The memory bus is allocated by the GPU. CPU tries to access the memory and has to wait for GPU to finish texture transfer. These waits are counted as CPU usage while nothing can be done.
* Some tasks of texturing is not implemented on GPU and that work must be done by the CPU
* This is a synhcronization issue between CPU and GPU. Something like in the NVIDIA driver's case.

Hi asch - thanks for your question. We should be able to get back to you soon
regards
Arti
154 Views

Hi asch,

I haven't developed on the Atom or 945GME based platform. So I am going to let someone more experienced to answer those.

Regarding your question on how to monitor CPU usage, I wanted to suggest using the utility 'top'. I feel like you might have already used this, but just in case. BTW, how are you measuring CPU usage?

Also, it would help if you can provide some screenshots of the data you are seeing from the 'intel_gpu_top' tool and the regular 'top' tool.

Cheers,
-Ganesh

asch
Beginner
154 Views

Hi Ganesh,

Thanks for your reply! Here are the snapshots of top and intel_gpu_top.

a.out is the benchmarking application. There is a spooky conformity between "texture fetch" and CPU%. Does that mean that the bottleneck is the memory bus?

The other one I do not understand is texture decompression. The benchmarking application uses uncompressed textures. BTW is there support for lossless texture compression? Compression may help memory bandwidth but lossy compression is not acceptable for our application.

Cheers
Andrew

Quoting - Ganesh (Intel)

Also, it would help if you can provide some screenshots of the data you are seeing from the 'intel_gpu_top' tool and the regular 'top' tool.


top - 08:59:33 up 9 min,  7 users,  load average: 0.74, 0.70, 0.40
Tasks: 152 total,   4 running, 148 sleeping,   0 stopped,   0 zombie
Cpu(s): 33.8%us,  8.6%sy,  0.0%ni, 57.6%id,  0.0%wa,  0.0%hi,  0.0%si,  0.0%st
Mem:   2052236k total,   437172k used,  1615064k free,    11208k buffers
Swap:        0k total,        0k used,        0k free,   267752k cached

  PID USER      PR  NI  VIRT  RES  SHR S %CPU %MEM    TIME+  COMMAND            
 1691 asch      20   0 27936 5520 2660 S   65  0.3   5:16.23 a.out              
 1183 root      20   0 55912  12m 6788 S    9  0.6   0:54.11 Xorg               
 1748 root      20   0  2532  724  584 R    6  0.0   0:26.65 intel_gpu_top      
 1562 asch      20   0 79984  23m 7796 S    5  1.2   0:28.76 compiz.real        
 1642 asch      20   0 38172  13m 9364 S    1  0.7   0:08.28 gnome-terminal     
 1716 asch      20   0  2468 1180  884 R    1  0.1   0:03.75 top                
 1936 asch      20   0  2468 1176  884 R    1  0.1   0:00.10 top                
    1 root      20   0  2528 1488 1120 S    0  0.1   0:01.98 init
render clock: 400 Mhz  display clock: 320 Mhz
                     ring idle:   3%:                                        
                    ring space: 111/126976 (0%)
                          task  percent busy

              Color calculator:  89%:      
                   Bypass FIFO:  89%:      
                Intermediate Z:  81%:         
                  Pixel shader:  79%:          
                 Sampler Cache:  78%:          
                        Map L2:  78%:          
                     Filtering:  77%:           
                    Windowizer:  77%:           
         Texture decompression:  77%:           
     Perspective interpolation:  76%:           
            Projection and LOD:  76%:           
 Dependent address calculation:  75%:           
                 Texture fetch:  65%:               
                    Dispatcher:  47%:                       
                  Setup engine:  23%:                                
                    Map filter:  10%:                                     
               Strips and fans:   2%: 

154 Views

Thanks for that post Asch.

One more question: which graphics driver and version are you using? As in are you using the IEGD driver or the one from intellinuxgraphics.org?
asch
Beginner
154 Views

Hi!

Thanks for your reply!

Quoting - Ganesh (Intel)
One more question: which graphics driver and version are you using? As in are you using the IEGD driver or the one from intellinuxgraphics.org?

I was not aware that there were more drivers available for this Intel GPU. I am using the one that is available in Ubuntu Karmic Koala. And to be sure that it is the latest I have installed the xorg-edgers package archieve that updates the driver package regularly from git. The driver package is called xserver-xorg-video-intel. This package contains the X.org xf86-video-intel driver as described here: http://packages.ubuntu.com/karmic/xserver-xorg-video-intel.

Is it different from the one on http://intellinuxgraphics.org/? How can I query the version? Should I install the driver from source from Intel Linux Graphics?

Reply