I’m using 12 core 24 thread CPU, but when I look at the task manager while working on Rhino, only 2~4 threads are used. Is there a setting to optimize to use more threads?
I want to ask a question because I want to use hardware resources more efficiently.
Windows 10.0.22000 SR0.0 or greater (Physical RAM: 32Gb)
Computer platform: DESKTOP
Standard graphics configuration.
Primary display and OpenGL: NVIDIA GeForce RTX 3070 Ti (NVidia) Memory: 8GB, Driver date: 9-13-2021 (M-D-Y). OpenGL Ver: 4.6.0 NVIDIA 472.12
> Accelerated graphics device with 4 adapter port(s)
- Windows Main Display attached to adapter port #0
OpenGL Settings
Safe mode: Off
Use accelerated hardware modes: On
Redraw scene when viewports are exposed: On
Graphics level being used: OpenGL 4.6 (primary GPU’s maximum)
Anti-alias mode: 8x
Mip Map Filtering: Linear
Anisotropic Filtering Mode: High
Vendor Name: NVIDIA Corporation
Render version: 4.6
Shading Language: 4.60 NVIDIA
Driver Date: 9-13-2021
Driver Version: 30.0.14.7212
Maximum Texture size: 32768 x 32768
Z-Buffer depth: 24 bits
Maximum Viewport size: 32768 x 32768
Total Video Memory: 8 GB
Rhino plugins that do not ship with Rhino
C:\Users\flawl\AppData\Roaming\McNeel\Rhinoceros\packages\7.0\NVIDIADenoiser\0.4.3\NVIDIADenoiser.Windows.rhp “NVIDIADenoiser.Windows” 0.4.3.0
Certain operations that can be are multithreaded, probably more will be added in the future, but what people don’t get–still 20 years after this has been a thing!–is that “content creation” is in general impossible to multithread. 9 women can’t grow a baby in 1 month.
The reasons to buy a high-end CPU with lots of cores are…well what else are you going to do? And you get more PCI lanes for the GPUs you use for the tasks that CAN easily be multithreaded like raytracing. And you can have lots of Chrome tabs open while you’re working.
The answer is no. Rhino code is not dominated by parallel operations that will exploit the capabilities of your i9 1290K CPU (same as what I have with 8 large 2-threaded cores and 8 smaller cores for 24 logical threads (often called cores)).
Rhino does use lots of parallism for some operations like ray tracing. In this case it will use most of the 1000’s of Cuda cores in your Nvidia GPU.
I get Rhino to use lots of cores by writing my own scripts in Python and C++. See my recent post about this. To do this click on my Rhino symbol and go to Activity and click on the one about importing a large mesh. Doing this I can get Rhino to do some operations 100X faster.
Some day Rhino may exploit more of our cores for more of its operations. But this will take a lot of work and other activities like new features and bug fixes take higher priority so it could be some time before you see an improvement.
In the ray tracing and rendering areas, I was well aware that 100% of the CPU was used a few years ago, but it seems that there is still no way to do it in the modeling operation processing area.
It’s what I told you, 9 women can’t make a baby in 1 month. When you are building something you are generally doing THIS one thing, then THAT one thing, then THAT other thing, there is just no opportunity. You need a problem that can be broken down into a bunch of independent buckets that are going to do their own thing without tripping over each other and locking up the system. It’s not something you just ‘turn on,’ it’s a bunch of programming work.
And even where something might possibly be parallelizable, there is OVERHEAD in setting up the jobs to send to each processor, marshalling if God forbid they DO have to talk to each other, waiting for them all to finish, and bringing that all together and updating the model database, so it might not even be faster most of the time.
As I said, we’ve had multi core CPUs for about 20 years now, if you’re lucky multiple CPUs longer than that, that more cores doesn’t magically speed everything up should be common knowledge.
Not when almost every ad for new hardware out there focuses on how many cores their new version has compared to the outdated model of yesteryear. So this topic will never get old
Keep in mind that Apple is selling their ‘many slower cores beats few fast ones’ strategy too.
So smart coding is whats needed. But the problem with that is that it isn’t simple. So for Rhino to maintain a bunch of overly complex code would probably result in fewer commands and less staility. Which would in the long run render the user less productive.
If you would share a file and a scenario that you need sped up then please share it. That way other systems and workflows could be compared and discussed.
The only reason I aspire to building a new computer with 16 or perhaps 24 cores is for using computational fluid dynamics that relates expressly to the boats I design in Rhino. For Flamingo users, more cores do help. For Cycles users an Nvidia GPU with ray tracing is almost an absolute.
I hope that I am able to get multi device rendering with the updated Cycles working so well that you could render with both CPU and GPU at the same time. Then more cores anywhere will be a big benefit.
Assuming the primary motive for increasing the core count in the CPU you use is so that future versions of Rhino cycles will to be able to take advantage of them; How many cores would you (guess-estimate) needing to fully leverage the innovations you are developing?
Also, I believe related to this is what range of system RAM and GPU RAM should one start to consider needing to optimize a Rhino use system? I appreciate that these are very difficult questions to answer because there are so many variables but just as a guess range, what amounts should one start to consider to “future proof” a Rhino use new system? Just to give you a rough idea -current time Rhino7 - on a laptop with two external monitors connected to it and 8 objects that are a little under 2cm square and 4mm thick and one textured surface + a few other minor objects , to view them in Raytrace mode in the perspective viewport 7.7 /8.0 GB of the GPU RAM is used and 26.5 / 63.9 GB of system RAM is used. The file size is 618 MB. So one can or does easily maxing out the system and GPU RAM that is currently available.
Sorry, to be rhetoric but does one; start to consider systems with 128 GB+ of system RAM and 48GB + of GPU RAM ? And I do not know what to state for the number of CPU cores.
For rendering the answer is going to be as much and fast memory for both CPU and GPU as you can fit into your budget. If you have fast GPUs with boatloads of RAM on them then CPU rendering is maybe not that interesting. But when your models don’t fit into GPU memory you may want lots of CPU RAM and many, many cores. Also as many you can fit into your budget.
Nathan, would you anticipate splitting work between the GPU and CPU?
Metashape, the photogrammetry software I use, distributes some tasks between the CPU and GPU. It starts the tasks with small amounts of processing using the CPU and then the GPU and calculates the relative speed of each. Then it distributes the work based on those relative speeds to try to maximize the overall speed.
Cycles is able to do that. I believe they call it work stealing - render devices will work on bits of the rendering and when they’re done they look to see if they can do parts that are queued for other devices, steal them if they can.