Using all processors
-
On 12/05/2014 at 12:03, xxxxxxxx wrote:
With a python tag plugin, I'm calculating voxels, so a lot of polygon handing.
Now I see that cinema is not using all processors (only 1 out of 4) on my Windows 7 machine.
When rendering it uses all processors, but not with my python tag plugin.
What to do, so that cinema will use all processors? -
On 12/05/2014 at 12:58, xxxxxxxx wrote:
It's a CPython Limitation, read up on the GIL and Multiprocessing in Python.
-Niklas
-
On 13/05/2014 at 01:08, xxxxxxxx wrote:
So, in C++ cinema uses uses all / more processors?
-Pim -
On 13/05/2014 at 01:36, xxxxxxxx wrote:
Hi pgrooff
I guess that´s why e.g. supervoxels was written in c++.
http://www.remotion4d.net/redokuwiki/doku.php?id=supervoxels2013
Funny, I also created a voxelizer in the past few days.
cheers
Martin -
On 13/05/2014 at 06:07, xxxxxxxx wrote:
Originally posted by xxxxxxxx
Funny, I also created a voxelizer in the past few days.
Yes, it is quite a challenge, but fun.
The main challenge is to optimize, improve the algorithm step by step.
I am doing a prototype in python and then port it to C++.One of the things I like to do with the voxels, is to explode volumetric objects.
Also with "supervoxels" you have threading option / nr of cores options.
Very advanced and interesting. But I guess you can divide the processing in parts and assign that to different threads (processors?).I saw your new post sharing your voxelizer. Great thanks.
I do not use particle, but straight forward cubes.-Pim
-
On 14/05/2014 at 01:39, xxxxxxxx wrote:
I´ve never used threads before and I´m not sure if I understand this right.
If I open a new thread in c4d, is it only a user thread and not a Kernel thread?
Does that mean that I'm only working on one Kernel and I just delegate tasks to several User threads?And is this the right usage, cause within the function it says that I´m still using the Main thread?
import c4d from c4d.threading import C4DThread class firstThread(c4d.threading.C4DThread) : k=0 def func1(self,k) : print c4d.threading.GeIsMainThread(),"main" for i in xrange(1,8000) : x=1000000/i for j in xrange(1,1000) : y=1000000/j k=x*y print c.IsRunning(),"first inside" return k class secondThread(c4d.threading.C4DThread) : o=0 def func2(self,o) : print c4d.threading.GeIsMainThread(),"main" for i in xrange(1,8000) : x=1000000/i for j in xrange(1,1000) : y=1000000/j o=x*y return o c= firstThread() d= secondThread() #Start Threads c.Start() k= 0 print c.IsRunning(),"first" k= c.func1(op) d.Start() o= 0 print d.IsRunning(),"second" o= d.func2(op) c.End() d.End() print o+k
Martin