Discovered Problems with Eyefinity
Hopefully you followed (or just read) our previous Frame Rating stories and learned about the problems that AMD CrossFire had with runt frames and artificial performance results. As it turns out though in a CrossFire + Eyefinity system, the issues are very different and likely not as simple to fix. I found three individual concerns when running our AMD Radeon HD 7970s in CrossFire at 5760×1080: dropped frames, frame interleaving and stepped tearing.
Dropped Frames
This is the easiest problem to understand and demonstrate. With our overlay that is applied to game frames as they leave the game engine, but before the graphics system takes hold of them, we are not only to accurately measure performance on the screen but discover missing frames. This is possible simply because we know the expected pattern of colors and can easily detect when one of them is missing.
Our test pattern follows a sequence of white, lime, blue, red, teal, navy, green, aqua, maroon, silver, purple, olive, grey, fuchsia, yellow, and orange. These colors then loop and we can use the scan line length of them to measure frame rates very accurately. But if a color is missing in the order, say white then blue, we know that lime was missing and completely dropped from user’s point of view.
Thanks to The Tech Report for the tiled screenshot idea!
These successive captured frames from Bioshock Infinite skip the lime, red, navy, aqua and silver colors indicated that every other frame in this sequence that is being rendered by the game is NOT being displayed. With single display testing we would see RUNT frames in those places but it appears that with Eyefinity the problem is worse and those frames that the game engine submits are never displayed.
Why is this important? Tools like FRAPS that measure performance at the same point as our overlay is applied are essentially DOUBLING the frame rate in this instance, giving unfair and unrepresentative results. In our Observed FPS metrics those missing frames are accounted for correctly with lower frame rates.
Interleaved Frames
Dropped frames were easy to understand but we are about to get more complicated with our discussion. Look at this:
Click to Enlarge
What you are seeing is one frame being displayed at the same time as another, interwoven together. This new problem is being dubbed “interleaved frames” and is unique to Eyefinity. I have witnessed this happening in every game we have tested though the games do shift between dropping frames completely and interleaving them together in this way.
This problem not only causes lower perceived frame rates but also can cause some visual anomalies.
Click to Enlarge
This image from Skyrim shows the problem at work once again and if you look at the vertical lines of the structure you can clearly see the result of an interleaved frame: portions of the image alternate between positions back and forth rather than once with typical Vsync tearing.
After seeing this specific issue I spent a lot of time making sure it was not caused by or influenced by the overlay itself. To double check we captured the output of the screens without the overlay enabled and through simple frame grabs we found interleaving continued.
Click to Enlarge
This animated image shows (in a very slow motion fashion) how the frame interleaving is seen in gameplay.
For a full resolution of the above image, click here. (5MB)
Stepped Tearing
As it turns out, the interleaved frames also result in another visual anomaly we are calling stepped tearing. Take a look at the image below:
Click to Enlarge
Not only are there intermixed frames in this screenshot but the horizontal tears are NOT level, instead they appear to grow or shrink. As a result, and combined with the interleaving, these tears are more noticeable to the end user than the standard vertical sync tears and also are affecting observed frame rates.
Click to Enlarge
Look at this same Skyrim screenshot from above. Notice on the left hand side you’ll see there are clearly five different frames slices (looking at the left side wood strut). But the color bars on the overlay on the far left hand side only see three frames. The first “slice” of that wooden support doesn’t start until somewhere in the middle of the mountain range area in the background.
I was also fearful that perhaps our capture equipment was responsible for the errors and problems seen in these screen grabs and recordings. To enforce the problem I picked up a camera that could record 120 FPS at 1280×720 resolution and recorded the Eyefinity configuration. In this image below you can obviously still see the frame interleaving as well as the stepped tears.
Click to Enlarge
Clearly this problem is real and isn’t a result of our testing methods. It was just nearly impossible to find before the creation of this overlay and the testing methodologies at work here.
We have developed a working theory of what is happening and why we are seeing these interleaving and stepped pattern issues. When running in a multi-GPU configuration of any kind the contents of the buffer from each of the secondary GPUs must be copied back to the primary card that has the display physically connected to it. That card’s frame output buffer is then scanned out to the displays.
I believe that interleaving is caused by incomplete frame buffer copies from the secondary GPU to the primary GPU. If the copy is slow or stalls at any point, the current scan out process (being drawn at the screen at that specific moment) starts to re-read the primary GPU’s frame buffer rather than the secondary GPU’s as it simply didn’t make it in time. When you see a back and forth pattern of frame interleaving it indicates that the copy is actually “catching up” a bit but then falling behind yet again. This may happen a few times before a third frame (from the primary GPU) is ready and is pushed to the buffer easily.
This is likely also the reason that we see dropped frames – the copy of data from the second GPU to the primary is slow enough that the next frame from the primary GPU is ready before a copy takes place.
It is also possible that the interleaving is an issue of synchronization and not bandwidth, but without more data and information from AMD it is hard to tell as an outside observer.
I do want to note before anyone comments ask this question: no enabling Vsync in the game or the control panel does NOT fix or change these problems.
The stepped tearing issue is caused by a different but related property – AMD does not appear to have a synchronization step on each scan line but instead on each pixel. Rather than wait for each scan line to output before updating the frame buffer AMD allows the buffer to update at any point which would cause the variable height frame results we are showing you above.
I asked AMD for more information on why or how this is happening but they decided not to comment at this time. When I approached NVIDIA they said only that they have enabled “locks and syncs” for their frame copies and scan line outputs on SLI.
UPDATE: We did finally get some feedback from AMD on the subject after quite a bit of back and forth. Essentially, AMD claims the problems we are seeing are due only to synchronization issues and NOT from bandwidth limitations. Since the file copies are done over the PCIe bus, only an instance of near 100% utilization on it would cause degradation – and the only instances of that would be from heavy system memory access. However, if you are accessing main system memory with the GPUs in your PC then other performance bottlenecks are going to creep up before CrossFire scaling.
If that is the case then AMD should be able to fix the CrossFire + Eyefinity issues in the coming weeks or months. A bandwidth issue would be much harder to deal with and could mean a fix would have never arrived for HD 7000-series users.
Keep the faith, Ryan and co.
Keep the faith, Ryan and co. Just continue to call it like you see it and let the chips fall where they may.
Hopefully AMD will get its stuff together otherwise they are going to lose a few folks.
I sincerely admire your
I sincerely admire your journalistic integrity Ryan… as well everyone else at the PCper team!
-Stewart Graham
what a difference in AMD
what a difference in AMD graft, they improved on there driver.
Is this so with an APU + Graphic card. Good job Ryan.
Well currently rolling with
Well currently rolling with 2×7970’s on a 1920×1200 triple display setup. Can’t say I ever really been personally bothered the various issues raised in the article in regards to the frame interlieaving and stepped tearing enough to stop playing, though I trust the guys over at PCPer to give it to me straight. I noticed the stuttering with crossfire more than anything else you guys brought up with your new testing methodology. I think most of us gamers at least gained a better understanding about the various issues involved. Sometimes my benchmarking applcation(be it FRAPS or Dxtory) would say I was getting a certain frame amount but the game just felt too jittery, whereas if I disabled crossfire the game felt more smooth even with a lower framerate.
That is not to say I haven’t thoroughly enjoyed my 7970’s/Eyefinity setup. When I’ve been been able to play at Eyefinity resolutions I’ve done so, when I haven’t I’ve just adjusted my quality or resolution settings until I could get a smooth enough playing experience.
Do I hope that AMD is able to smooth out those circumstances where I can’t play at a give resolution/quality due to micro-stuttering with crossfire, yeah that would be awesome. I think a lot of us out here still don’t have a full appreciation for the phenomena due to not having been able to test multi-GPU solutions side by side, so it just comes down to “the game doesn’t feel fluid enough at my current settings so I’ll dial them down until it does”, which I’m sure people have different sensitivities to. Keep up the good work PCPer crew.
what about this
what about this ryan?
http://www.brightsideofnews.com/news/2013/9/18/nvidia-launches-amd-has-issues-marketing-offensive-ahead-of-hawaii-launch.aspx#.Ujo-ScnFMsU.twitter
why use 2 hdmi cables when
why use 2 hdmi cables when you can use a single displayport cable and the problem does not exist with displayport ?
At first I thought this
At first I thought this article may have been over egging the problem with eyefinity + crossfire. Having now disconnected my second HD 7970 and played a few games in eyefinity I have seen that I is not. Radeon Pro may tell me that I’m getting half the FPS that I was but my eyes see the same low FPS experience.
Not impressed AMD, I feel like a chump for spending £300 on a card whose only additional effect to my system has been extra heat and noise.
Still at least I can go back and play Farcry 3 now with out the giant oversized HUD problem.
Thanks For the good article and thanks for bending AMD’s ear.
A damned good read thanks
A damned good read thanks Ryan. AMD owners should be pleased that these issues are highlighted and making sure AMD keep on their toes. Like the FCAT article, it was good to see AMD address the issue and get it fixed and again, it was PCper who made AMD aware of the issues (like they didn’t already know!)and forced them into sorting that out for their users.
I think a lot of hardware
I think a lot of hardware maker define CPU differently then Microsoft.you can ask I wrote a bug report to and today 13.10 beta.if I recall message signal interrupt and its extended variant were implemented in vista for consumer?ROFL we know how vista was received so this might be one overlooked good thing.my case?in regedit MSI was enabled (sad was not for some reason ,can’t enable it)but no amount of MSI set!(if it isn’t set isn’t it defaulting to one msi / socket?but I have 4 CPU in my i5 2500k(ya only physical CPU ms say)so imagine amd 8 core fx lol stuck with 1 MSI / msix.I think this is the cause.sadly on my system none were set . I normally tweak but from what I saw on ms it isn’t a case of 0 or 1.and ms recommend hex value.Rolf a bit too complex for my knowledge.but you guys know a lot of hardcore tweaker . if I’m right ? I would be like what the eck am I the only one that used vista ?
PS:what I wrote is for w8 64
PS:what I wrote is for w8 64 bit!But I suspect a lot of hardware maker default to 1 (probably easier to implement)since socket come fro 2 to 12) detecting might be entertaining.
2.1.4.1. Resolution,
2.1.4.1. Resolution, Granularity, and Accuracy of System Time
http://www.windowstimestamp.com/description
Bottom line?I hate compromise!