Thursday, August 26, 2010

ATi OpenGL 3.x / 4.x performance: something's not right here

Okay, ATi just launched their Catalyst Driver for August. So I've been installing it on my systems, kicking the binaries, and seeing how it performs. In DirectX rendering modes the driver seems fairly competent. In older OpenGL 1.x and 2.x applications, such as F.E.A.R., Quake Live, NOLF, and so on, performance seems fine there too.

In City of Heroes, which leverages OpenGL 3.x for it's ultra-mode graphics, the performance has never really been where I would think it should be on the graphics cards, at least compared to DirectX titles. City of Heroes is extremely difficult to reliably benchmark. There is, however, a software application that does leverage OpenGL 3.x / 4.x API calls, and is a reliably benchmark with easily repeatable results: Unigine Heaven 2.1.

So I pitted the Heaven 2.1 benchmark against my Radeon cards running on AMD's latest driver in both DirectX 11 and OpenGL rendering modes under Windows NT6. For those wondering why I didn't also run Unigine Heaven 2.1 under Mepis Linux to compare OpenGL performance differences between Windows and Linux, it's because the benchmark application doesn't work on Mepis Linux 8.5, or previous versions for that matter. Now I don't know if this is because Unigine Heaven 2.1 is just badly coded, or because some components of Mepis Linux 8.5 are best described in terms of computer paleontology. I'd be more concerned about this if Unigine Heaven 2.1 wasn't effectively bleeding edge software.

Anyways, getting back to the benchmarks themselves, starting with my primary system running Crossfired 5770's atop a Phenom II. In 1920*1200 with Crossfire Active, Unigine Heaven 2.1 posted a score of 947:



Against the same computer, nothing changed but the API, Heaven 2.1 posted a score of 325:



That's a huge difference in performance when nothing but the API is changing. I also happen to know, from the likes of Valve Software and ID Software, that from an API standpoint, there's no performance difference between DirectX or OpenGL. Ergo, on the surface, there is something seriously screwed up with either Unigine's software or with ATi's drivers.

Okay. So, same two graphics cards, different base computer. This one being the Intel I7 920 Engineering Sample. To make this clear, this is not a comparison of Unigine Heaven 2.1 against different hardware platforms. This is a comparison of Unigine Heaven 2.1 against different API's Under DirectX in 1280*1024 this system posted a score of 1284.



Same computer system, all that's changed is the API, and it scores 493



Again, OpenGL performance is roughly 1/3 of the DirectX performance. The performance difference is repeatable, under different resolutions, on entirely different base computer systems. Now, at this point, I was going to test the HD 5770 cards outside of Crossfire rendering mode, only I ran into a rather large problem.

The 10.8 driver is an unstable mess with these cards on 64bit Windows NT6. During the Install of the 10.8 driver on my Phenom II system, the HDMI audio driver kept failing to install. On the I7 system, things were a bit worse. When I turned it on in Windows mode, it blue-screened. System restore which took me back to 10.4 OpenGL 4.0 preview driver, update to 10.8, reboot, blue-screen. Restore again, install 10.7 driver, everything's fine. Install 10.8 driver, everything's fine during that session, but reboot, and blue-screen.

Ergo, I'm forced to conclude that not only are there some rather serious performance problems with the 10.8 driver, there are some serious issues with the 10.8 driver in regards to system stability, at least on the RadeonHD 5x00 series cards I have in my hands.

Next question: Is this a problem shared by all of the ATi OpenGL 3.x / 4.x cards? Or is this a problem solely related to the 5x00 series cards? Well, to start off this testing, I turned to my RadeonHD 4850 system backed by an Intel Core 2 Duo. It ran fine yesterday when I did the initial Crossfire-On benchmarks. Spent the night turned off, turned on fine, no blue-screens, no other problems. So, how did it do under Unigine Heaven 2.1?

With a resolution of 1360*768, in DirectX 11 API rendering mode, this system scored 1793



Under OpenGL, nothing else changed, the system scored 904:



Okay, the good news is performance is no longer one third. The bad news is, the performance gap is still pretty wide, just on the positive side of 50%.

Since that's how ATi cards perform in Unigine Heaven 2.1, how about Nvidia cards?

Well, as I've mentioned before, I don't actually have any GTX 400 series cards on hand to test with. The most recent cards I have from Nvidia on hand to test with are some GTS 250's. Like the RadeonHD 4850 they are an OpenGL 3.x class gpu.

In a resolution of 1680*1050 leveraging DirectX, the GTS 250 system managed to score 1436:



Nothing else changing but the API, the GTS 250 turned in a score of 1200:



Okay. Yes, there is a performance drop here, but OpenGL still delivered 83% of the performance that DirectX delivered. This is a more acceptable delta of change considering that fast-pass OpenGL 3.x / 4.x rendering applications are still very new and drivers could be unoptimized.

Unoptimized drivers are one thing, but the sheer performance difference between the DX11 and OpenGL API's just continues to raise questions. All of these systems so far have been running their respective multi-gpu modes. How exactly would they perform outside of their multi-gpu rendering modes? Well, as mentioned earlier, I was going to do these tests on the RadeonHD 5770 because of the near 1/3 performance difference, but wound up not being able to because of driver stability issues. I'm still trying to sort those problems out.

I can however look at the RadeonHD 4850 and Geforce GTS 250 systems in single card rendering modes.

The RadeonHD 4850, with the DX11 API, and no other changes than disabling Crossfire, achieved a score of 1064:



Under OpenGL with Crossfire turned off the system achieved a score of 931:



Going back to an older system, I ran Unigine Heaven 2.1 atop a Mobile RadeonHD 2600. This GPU is actually too weak to give any meaningful input. Under DX11 it only managed a score of 192:



Under OpenGL, it turned in a score of 151:



Well, that seems to be one problem sorted. Crossfire does not seem to be activating for Unigine Heaven 2.1, at least on the RadeonHD 4850, but the single card performance difference between the OpenGL and DirectX 11 API's are not that extensive.

For comparison, the Geforce GTS 250 under the DirectX 11 API with SLI disabled achieved a score of 867:



The same Geforce GTS 250 system under the OpenGL API with SLI disabled achieved a score of 849:



The immediate conclusion is that SLI is activating for Unigine Heaven 2.1, but Crossfire is not. This explains the 50% performance difference between the RadeonHD 4850 in Crossfire under DirectX and OpenGL, but not the 70% performance difference between the RadeonHD 5770 in Crossfire under DirectX and OpenGL.

1 comment:

Unknown said...

I have the same issue with my Alienware M17x R1 laptop running 2 ATI 5870m which are desktop 5770 cards with slower clocks.
I get horrible, stuttering mess with Crossfire on, in OpenGL only!
In DirectX games that us the Unreal Tournament 3 engine, run phenomenally well in DirectX.

All drivers from 2010-2012 have varying degrees of slow speeds with crossfire.

Even in single card configuration mode, a 5870m is SLOWER in OpenGL then a GTX 260m, which is based on the G92b part (Desktop 8800gts).

ATI does NOT care about OpenGL performance at all with these cards, they've given up working on them.