Help on slow attribute copy
Hi there,
I am fairly new to python, the problem is as follows:
newnodes = {}
for i in nodes:
newnodes[i.label] = i.coordinate
is very slow, which is due to the dots, I know that for functions the
dot lookup
can be done outside the loop, can this be done for attributes in any
way? (in such a way that it is fast)
Coordinate is a tuple in this case, filling a dictionary of that size is
no problem without dots.
I use python 2.0 as shipped with abaqus, there are about 10 nodes
in the current case, and more to come, and the
system can be stuck on this for 15+ minutes :-(
Greetings
Wout
This message has been checked for viruses but the contents of an attachment
may still contain software viruses, which could damage your computer system:
you are advised to perform your own checks. Email communications with the
University of Nottingham may be monitored as permitted by UK legislation.
--
http://mail.python.org/mailman/listinfo/python-list
Re: Help on slow attribute copy
bgs wrote:
>There's no way that loop takes fifteen minutes just because of the dot
>operator. I mean, 20 dots in 15 minutes is 200 dots/second. On a
>1 GHz machine, that would be 5 million cycles per dot. That does not
>seem reasonable (assuming you haven't overridden the dot operator to do
>something more complicated than normal).
>
>Check that i.label does not have __hash__ overridden in a bad way. I
>tried a test case with __hash__ overridden to always return the same
>integer, and I got performance about what you are describing when I
>tried your example loop with 10 iterations.
>
>And, of course, make sure you are not low on memory and relying too
>heavily on swap space.
>
>
>
bgs,
thanks for the quick reply
I don't think it's due to the .label, maybe too, but when I take it out
it is still slow (due to the .coordinate)
here's the abaqus stuff:
>>> print mdb.model['Model-1'].rootAssembly.instance['blok'].nodes[1]
({'coordinate': (3.0122888184, 5.0122888184, 0.53123539686203),
'coordinates': (3.0122888184, 5.0122888184, 0.53123539686203),
'instanceName': 'blok', 'label': 2})
>>> nodes = mdb.model['Model-1'].rootAssembly.instance['blok'].node
>>> for i in nodes:
... dummy = i.coordinate
wait for half an hour
The machine is p4 with 1GB ram so should be ok,
running fedora 3
Thanks
Wout
This message has been checked for viruses but the contents of an attachment
may still contain software viruses, which could damage your computer system:
you are advised to perform your own checks. Email communications with the
University of Nottingham may be monitored as permitted by UK legislation.
--
http://mail.python.org/mailman/listinfo/python-list
Re: Help on slow attribute copy
bgs wrote: >Hmm, it looks like the dot operator has been overloaded to do something >complicated. (although if you haven't already, try "for i in nodes: >pass" just to make sure). Is it retrieving the data from the network > > I tried that (the pass), that runs fast as it should >somewhere? If so, then it looks like it is probably retrieving each >coordinate individually on each iteration of the loop. Perhaps there >is some way of retrieving them all in one bunch? > > I guess it is looking up the node locations from the database with individual queries. As the source for the interface is not provided (only pyc) I will not find out. >It's difficult to say more without knowing anything about abaqus and >its interface. > I'll look for a 'heap lookup', otherwise I'll have to do text parsing... Thanks loads anyway Wout -- http://mail.python.org/mailman/listinfo/python-list
OpenMP uses only 1 core as soon as numpy is loaded
I use openMp in a C-extension that has an interface with Python.
In its simplest form I do this:
== code ==
#pragma omp parallel
{
#pragma omp for
for(int i=0; i<10; i++)
{
// multiply some matrices in C
}
}
== end of code ==
This all works fine, and it uses the number of cores I have. But if I import
numpy in my python session BEFORE I run the code, then it uses only 1 core (and
omp_num_procs also returns 1 core, instead of the maximum of 8 cores).
So how does numpy affect openMp, and does it have anything to do with the GIL
or something? I don't use any Python object in my parallel region.
Any help would be appreciated!
Wout
--
http://mail.python.org/mailman/listinfo/python-list
