Should you buy a 3990X for rendering in blender?
When the 3990X dropped in February of this year, it certainly landed with a thud. But is it a good purchase for rendering? Is that even a sane question when its clear its faster than anything else out there CPU-wise right now? Assuming you're thinking about purchasing either a new workstation, or perhaps even building a render farm. After crunching numbers, I have some insights I'd love to share to answer these questions :)
In this article
A comparison of the 3990X along side the fastest rendering CPU's out there, the focus is on raytracing, particularly in cycles, we'll be looking at;
How each CPU performs and where the 3990X sits in the pack
How to determine a measure of value to compare each CPU against
How to determine a measure of value to include power draw
Other factors that affect performance, such as memory
Implications for building either a workstation or render farm
Why read this article?
I've told you whats in here, but should you spend your precious time reading on? Why is this stuff important? Well, here's the 'why'.
When purchasing a new system for any reason, there are two ways you can go about it, either you get all emotional and excited about the latest thing that is being hyped, or you get analytical and look at data to try and forecast the consequences of each option. So, if you take anything away from this article, know that we're recommending you do your own research, be objective, not emotional, and aim to get understanding about what you value, and how to get it.
Please, don't buy on hype, and, remember, there will be lots of assumptions we've made in this analysis (watch out for them as you read!). So back yourself up with your own research, ask questions, the comments section is a good place for that, and above all, stay calm!!
How do we choose a CPU for rendering in Blender?
I mean really? If you're not already familiar with all the various models (or SKUs if you will) of each CPU on the market, you'd be forgiven for feeling overwhelmed. What with all the confusing names, Intel has its *something*-lake names for CPU architectures, for example coffee-, sky-, cascade, ice-, purple-, monkey-, dishwasher- lake (etc). AMD also has quite a few models with equally weird names, like zen, Threadripper, Ryzen and so on. Throw hype in there and you need to be a seasoned techy to know what to buy.
Its clear we need data!
Thanks to Blender's Open Data Project
We turned to Blender's Open Data Project, which hosts a very large number of benchmarks that have been contributed by the community using a consistent benchmark utility tool. With this free data set, anyone can get in on the analyst game! I said you should do your own research, now you can!
Methodology - What we did
Now, if you're one to skip ahead to the conclusions, let me say that reading the methodology usually saves you some embarrassment later on. I'll try to be as succinct as I can be (verbosity is my blessing and curse it seems).
We downloaded and put a daily snapshot of the Open Data ... errr.... data, into a mongo database. This, though somewhat technical, is possible for anyone with a computer and an internet connection thanks to free software like python and mongodb. If you'd like to know how to do this yourself, let us know in the comments, if we get enough interest, we'll gladly show you how :) Or, just check out https://opendata.blender.org/.
The project got an upgrade this year and has made it easier for you to run your own queries if you want to check out how different hardware performs :)
Next we limited the scope of results to just one benchmark, running on windows, running blender 2.81. This is to try and limit the variables that might affect our analysis, like the fact that between blender versions, performance can be different, different OS types have been known to have different render times for the same scenes, and of course different benchmarks run different render times. What we want is just the differences due to the hardware alone, and nothing else.
Then it was simply a case of sorting the results by render time and concentrating on the fastest. then we hit a problem, our benchmark had no data for the 3990X, so we turned to a couple of sources online that had thankfully run the same scene and used that data ( assumption 1 These sources really did run the same scene as the benchmark)!
Why this benchmark though? Well its fairly new, so it represents a more recent state of the art, its also a decent length that will get a CPU to a steady state temperature, so the numbers represent something stable, not transient. CPU's tend to protect themselves from overheating, so they will turbo at a greater speed until they reach a limit, then they adjust their speed until finding a steady state they can keep going at.
There are problems of course using data in this way, there are hardware variables outside the CPU that we can't account for, such as the cooling solution or the RAM used, the motherboard, the ambient air temperature, etc. (assumption number 2, these effects will be minor as most hardware aims to not be terrible and bottleneck the speed of your expensive CPU, cause otherwise it would get replaced with something better).
For price, we used google, with the location set to the United States, so all prices are in USD. We tried to find at least four different prices for each CPU and took the average price (assumption 3, the prices haven't changed between me looking them up and you reading this article!! Seriously, price changes make quite drastic changes to the rankings of these CPU's!)
So, the TLDR here is, we used one benchmark, one OS, one version of blender, and then we got a few prices for each CPU we considered. Job done.
But really, what do we care about when it comes to buying CPUs anyways?
This depends on who you are and what you have in the bank to some extent, there will be those who love the rights of bragging about having a 3990X system as their latest toy. Personally I hope they share, and FYI we're working on a system that will allow those lucky individuals to do so (shameless plug for our render farm software we're building).
However, if you are concerned with efficiency, either for building a large scale render farm, or building a budget workstation, you are probably concerned with how much performance you get for your $$$.
So without further delay, here's a chart that shows just that for the fastest rendering CPUs in blender at the current epoch.
If you're thinking *yuck, what a mess* to yourself, don't worry, you're not alone, just a bit of cognitive strain as your brain attempts to figure what's going on. A helpful hint to interpreting the chart is to realize what we all want is infinite, free rendering power :)
Yup, the holy grail of computing, zero cost, zero time renders!
Now in practice this doesn't exist, so instead let's try to find a real CPU that is as close as possible. This means finding the CPU that is closest to the origin point on the chart or zero render time, zero cost (this chart has been set with its x-axis at 100 to make the data fit better in the frame, so there is a bit of skew because of that).
You can just eyeball this, or you can get pedantic (like me) and measure. Eyeballing would have likely had you pick the 3970X or 3960X as closest, with maybe the i9-10980XE as third place? (your guess in the comments?)
That would have been a terrifically good guess, but, not spot on! And, spoiler alert, the 3990X is a long way away from the origin, so by the eyeballs method, its not going to win this contest.
Doing it via measurement takes a bit more effort, we need to find the distances marked '?' for each CPU. The more 'valuable' CPU's will have smaller values for '?'. Now measure this line for all the CPU's. This is trivial if you know some high school mathematics. The best CPU then has the smallest value for '?'. Job Done!
And if you'd done that as described, you'd actually be making a mistake. Lets do a quick sanity check. This method seems seductively intuitive and simple, but it implies something a bit silly if we pick the right example.
Lets say we have two CPU's, one is $10,000 and gives us a render time of 100 seconds, the other is $5000 and gives us a render time of 200 seconds. If we agree that fewer seconds of render time is valuable to us, as in, we'll pay for less of them, then it seems logical that we'd agree that either of these two CPU's are just as valuable, since their performance vs cost is identical on that basis. So lets calculate an imaginary line on the graph for these imaginary CPU's
C1 = $10000, P1 = 100 where C is cost, P is render time in seconds
C2 = $500, P2 = 200
We use the formula for finding the distance to each point from the origin which is given by Pythagoras' theorem;
V1 = SQRT( C1^2 + P1^2) so that's the square root of the sum of the squares of the cost and render time, see? Easy!
V2 = SQRT(C2^2 + P2^2)
Finally, keeping the appropriate number of significant digits (which is all of them, cause copy paste from calculator...)
V1 = 10000.49998750062
V2 = 5003.9984012787214318818398802492
Recall, these should be equal, because if we get half the render time, but double the cost, its the same value, but uh oh, there not... hmmmmm annoying.
Ok, so what just happened? As you might have already guessed, the calculated values are almost the same as my imaginary prices of my imaginary CPU's. So its clear that the cost of the CPU is actually dominating the 'length' of the line we draw from the origin, this is not obvious when looking at the charts above.