[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Dynamic allocation of Non zeros?



Barry Smith wrote:



Zhifeng,

We already do this; it helps with the time, but still results in very inefficient runs if your preallocation is zero entries.

Perhaps you could describe how your matrix entries are generated and we can suggest a
preallocation scheme?


Barry


On Nov 1, 2007, at 7:52 AM, Zhifeng Sheng wrote:

Dear all

It is always not easy to determine the number of nonzeros in a row without any cost.

I wonder if I can make dynamic allocation, for instance, if one found the nonzeros of a row overflow the pre-allocated space, then the space shall be doubled.

This may waste some memory but it may not be that bad. Or maybe this is already done in Petsc?

Could please tell what happens if I assign the nozero number in rows to be zeros and let the programme fills in the nonzeros ?

Best regards
Zhifeng Sheng


In that case I'd better do some preallocation. I am working on 3D FEM code with unstructured tetrahedron mesh, and on each node, we can have 3 to arround 12 unknowns, at this moment I assigned 50 nonzeros to each rows, and it is sufficient... just half of the memory assigned went wasted. Then I tried 25 nonzeros in a row, but this is not enough and the performance is terrible.

So... do I really need to compute the nonzero pattern?

Ps. my matrix is SeqSBAIJ with block size 1, so I am wondering when I specify the nonzeros in a row, does it mean the actually nonzeros numbers or the memory that is needed? (for instance, for SeqSBAIJ, the actual nonzeros in a row would twice as much as memory needed)

Thank you
Best regards
Zhifeng