CUDA-OpenGL to restore Fermi viewport performance - SUSPENDED:FEASIBILITY DISPROVEN

EDIT2: Changed thread titel again - Feasiblitly disproven - Project suspended.

EDIT1: I changed the thread title - again - as it´s set in motion already and became a more general thread rather than just a poll thread.

The title might be a bit unlucky, it requires further explaination but didn´t fit in the title.

The matter is an easy one. By now most should know about the OpenGL shortcomings the GeForce400/500 series have. If not, check the cite notes of the wiki article on it:

It mostly comes from certain OpenGL calls and buffer operations which are causing the slowdown.

Over in the OpenGL forums die hard coders found out that one can circumvent it by using certain CUDA calls. I tried to look into the Blender source already, but I don´t really have the time nor am I that good of a coder to realize it. It would require quite some time to even read into the codebase.

So I´d thought it´s time to determine the general interest in such a modification anyways and to see how willing people are to donate towards such a branch or if BF agrees to trunk it at some point.
It worked out quite astonishingly for OceanSim and I think the interest to get full performance for newer GeForce cards should be even bigger.

If enough people are interested we could find a coder to look into the matter and tell if the OpenGL calls are really the problem, if the CUDA replacements would have the desired effect and how much efford it would be.
Based on that we could start to raise funds for the development.

Basically I am thinking of a puny checkbox in the user preferences to enable CUDA for viewport and hopefully to regain full viewport performance with GeForce cards again.

As CUDA works x-platform it would be in the spirit of Blender, and most likely in the interest of many users, especially MacBook users where GeForce is widely spread (for what I understand, correct me if I am wrong) and who don´t have the choise of adding another card as well for those who got powerful GeForce cards for CUDA raytracing.

It would also put Blender in a position where no other OpenGL 3D package currently is, mainly because other packages rely on “professional” users with Quadro/FireGL cards.

The whole endevour bears the risk though, that Nvidia could pull some driver stunt to render all implementation effords useless again - by now I wouldn´t put it past them.

How will this impact ATI/AMD card owners since CUDA is proprietary to nVidia? I just get nervous when people start talking about hardware-proprietary code because I don’t want to be forced into buying a certain brand.

Wouldnt it be better to improve viewport performances for both NVIDIA and ATI cards? if it can be done using GPGPU technology, wouldnt OpenCL be a more suitable choice due to its open nature?

I think GPU acceleration for the viewport is definitely worth looking into :slight_smile:

An OpenCL implementation might be safer though, as Nvidia could make the changes obsolete in a future update.
I would donate for an OpenCL implementation.

@asalina,
It wont change anything for AMD/ATI users as the slowdown is Nvidia Fermi specific. AMD/ATI users already have good performance :slight_smile:

@doublebishop,
This is my preferred option too. There is more chance of getting it into an official build with OpenCL too i think.

Viewport performance? How about VBO’s? It’s implemented into blender, only not default :confused:

The issue is that Nvidia has crippled the Fermi based GPUs when using OpenGL, which also affects VBOs. Even with VBOs enabled performance is still much lower than on a card that is 4 generations older. My 8800GTX was maybe 2 or 3 times faster than my GTX 460 in 2.5 :frowning:

Did I get this correctly?:
In new Nvidia cards, they changed something, that makes blender 3D viewport actually work slower then it is supposed to? But other video cards work fast?
In that case, you are willing to code in the changes to regain the speed blender deserves with Nvidia cards, right?

Yes FreeMind. But I am not willing, well I am, but I lack the skill to “repair” the viewport so it works after repairing :wink:

For those still unaware of the OpenGL issues (although we got a 17 page thread in this forum about it) in short:

All AMD Radeon cards work fine.
All Nvidia GeForce200 series cards and older work fine.
All Nvidia GeForce400 series cards and newer are affected.
All Nvidia Quadro cards are not effected.

OpenGL calls like “glReadPixels()” on a GTX480 are ~4 times slower than on a GTX285.
Same goes for certain buffer operations.
So there is the option to replace those function calls with CUDA functions which work with the normal speed.

So the impact would be, that Blender and only a branch would have one more option, to enable those CUDA calls for Fermi cards.
[ ] turn on OpenGL Fermi fix.

It´s not about accellerating the viewport with CUDA, it is about de-decellerating OpenGL calls with a CUDA bypass.
I do not intend to give Nvidia/CUDA users a proprietary advantage, but to remove a disadvantage.

And i was wondering why sculpting mode slows down drastically at 1mln verts.
Maybe this will also fix the issue where Blender runs at 1-2fps when i have a picture viewer, AutoCad or anything else graphics related turned on before I turn on blender.
Nvidia Geforce 8600GT here

@arexma,
Do you think this would be possible with OpenCL as to avoid Nvidia sabotage later?

Also I think this would be a very important fix that should be included in an official release.
Maybe it would be something that Brecht could look into? It may be worth contacting Ton directly and asking the question.

@FreeMind: no the 8600GT is a slowass card, thats all. And it is not affected, as it is older than the 200 series.

To make it even more clear, affected are:
GTX460, 470, 480, 560, 570, 580 - all GF100 or higher GPUs.

@andy: Honestly I got no idea. My multithreaded and GPGPU be it CUDA or OpenCL skills are somewhat aweful.

First we need to find out if there is enough interest.
Then we need to find a coder that can look at the matter and tell us if its possible or if it will be successful. I really don´t care if OpenCL or CUDA :slight_smile:
Then we need to raise funds and get the coder to work on it.

Brecht might be a good address yeh, he should be fit in CUDA. It would also make handling of money easier, as we could simply donate a heap extra to the BF. Or to Brecht if he wants to do it in his free time :stuck_out_tongue:
Die hard coders got no life anyways :smiley:

@arexma,

Yea, I think if there is a large number of people interested in the feature, it would be taken more seriously by the Blender Foundation.

One thing I thought I should mention is that it may be in the Blender Foundations interest to implement this anyway as most people don’t know of the problem and could just assume that its Blenders fault that the performance is bad, which could have a knock on effect of new adopters having issues, false bug reports and Blenders reputation being wrongly tarnished though no fault of their own.
At a first glance I can see why people would cite that Blender is broken if they have no knowledge of the Fermi issues.

How will these Blender code changes affect performance once these cards are obsolete?

Doesn’t it make more sense to fix the card drivers rather than recode Blender?

Well, yes. If only nVidia was willing to fix this issue:

“So far, one customer using an OpenGL based application got a response from nVidia support indicating that the behavior is expected in the GeForce 400 line of cards, and no software update is available to improve the performance of the hardware.”

Don’t get me wrong, I am affected by this issue myself, but adding complexity, code that has to be maintained etc. to Blender just to un-cripple a card that was deliberately crippled by the manufacturer seem perverse to me. It is nvidias task to make their hardware work on the level this bug occurs, not the developers.

It might be their task but they have no commercial interest in fulfilling it… and it sounds like not fixing it is an ongoing business strategy for them.
I’m pretty sure that there’s already lots of code in blender to make things work on this card or that… especially with the recent round of intel fixes… and in commercial software you get loads of hardware tweaks to make things work optimally on cards… especially in games.

PS I’m not affected by this, but I look with interest as at some point I’ll want to upgrade my graphics card… and nvidia have until the 400 series done an amazing job on linux support and on having excellent drivers in general…

I guess the market using this stuff for authoring 3d content using gamer cards is big enough for them to see it as lost revenue for their pro cards, but small enough for them not to be worried at losing some to AMD…
and Cuda is a big loyalty draw for this market.

yea, I think it falls to the community to fix this really as Nvidia are not going to look at this issue, no matter what moral obligation they have.
Its great there is a possible fix though…until this thread I wasn’t aware of the CUDA workaround :slight_smile:

making a direct x blender would get better performance than cuda, and it would increase performance on all cards. if you are going to go non opensource why not go for the most rather than a small niche?

This must be one of the biggest contempt of consumers I’ve ever seen. As a commercial company, it should be in nVidia’s interest to rectify these kind of problems. Especially considering not only Blender users are affected, but users of other 3D-packages as well.

rdo3
Direct X is windows only - sorry.

Daccy,
why should they? The only competitor is AMD.
Take a look at ATT and Verizon and then check out what cell phone costs in other countries.
The only logical explanation is that here is no real competition anymore and markets / consumers are locked in.