Re: gimp-developer-list Digest, Vol 26, Issue 10

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

 



Hi DeVont, thanks for your suggestions & interest in contribution.

I'm not really a GIMP developer and am definitely not familiar with the
codebase, but I'm deeply familiar with software engineering/ re-engineering
& I'll just give you a few comments on first principles.

> 1. gimp/libgimpmath/gimpmathtypes.h (file in
> question:gimp/libgimpmath/gimpmatrix.h(c))
>
> This file declares math structures that gimp uses like vectors and
> matrices. The GimpMatrix structure come in 2X2, 3X3 and even 4X4 versions.
> Each matrix is a 2Dimensional gdouble array with the appropriate amount of
> elements to span the NXN matrix.I believe this data structure is used for
> computation during image editing. There are functions handling
> comparisons, identities, transformations, rotations, translations and
> various other matrix operations.
>
> Possible changes: I believe the declaration of 3 special kinds of gimp
> matrices can be generalized to a struct (or class) that holds and defines
> an NXN matrix.

Generalizing these structures, would almost certainly make them slower.
While in peripheral areas that might be fine, I do not think GIMP users
wish to lose performance on matrix-based image transformations.

Neither am I aware that there could ever be a need for matrices larger than
4x4.

So, I probably recommend against pursuing #1.


> 2. gimp/app/core/gimpcontainer.h
> This class contains a data structure that is used to store different
things about the
> various objects in gimp. It works hand and hand with the GimpObject class.
> This class uses what I believe to be some form of tree or heap structure.
The
> class refers to add, remove, reorder, and getChild functions that are
defined
> across the class. The gimp.h code uses the GimpContainer class pointers
for everything
> from fonts, to documents, to displays. As this data structure is used with
> GimpObject (which controls a large amount of functionality in gimp) and is
> heavily referenced in the gimp.h file, optimizing this class could go a
long way in
> optimizing the code.

This area is probably more productive for investigation. You will need to
take some measurements/ benchmarks, to verify whether your changes are
delivering an actual performance improvement -- and by how much.

If you document the number of calls into this data structure/site, measure
performance beforehand, trial various changes, measure & document
performance from each version, write the results up formally and submit
code (if any) you will have completed your assignment fully.

I am not assuming that you will be able to improve performance, this may be
quite possible but even measuring & investigating thoroughly and coming to
the well-supported conclusion that you can't, would be a very competent
completion of your assignment.

> If we decrease the amount of time to ?reorder? the tree, then we decrease
the amount of time
> several other objects take to be initialized and added to the tree.

Well, it sounds quite plausible!  But only the measurements can tell.


> 3. gimp/libgimpmath/gimpvector.h(c)
> The GimpVector data structure keeps track of axis orientations and
lengths.
> I believe this is used in the various drawing tools. I also believe the
> automated shapes functions may use it for drawing polygons. The vector
data
> structure is a structure that holds four gdouble variables that are
> separately declared (gdouble x, y, z, w for the 4axis vector for example).
> There are three versions of the gimp vector: 2axis, 3axis, and 4axis. A
potential change to
> GimpVector could be altering the way that it is stored like we plan to
> change the GimpMatrix. This means making a streamlined generalized vector
that can be of
> dimension N.

I didn't like the GimpMatrix idea, due to reduced efficiency of
very-heavily used code. I expect the GimpVector may also be quite heavily
used -- perhaps less so than GimpMatrix, but I would have to be convinced
it was not performance-critical.

"Unrolled loops" -- and thus separate size-specific implementations, as per
the existing code -- are the best design choice for performance-critical
code.

Implementing a variable-length vector/list will, I expect, be vastly slower
than using a fixed-size struct or array. Structs and arrays are much more
efficient to allocate & de-reference.. Perhaps comparing such codes on a
testbed might give you a better idea/assessment of the potential relative
performance?

IN CONCLUSION:

It's great that your group is interested & willing to challenge yourself,
by taking a look at some serious large-scale software.

I think #2 (GimpContainer/ the heap) sounds like the most plausible area
for investigation & optimization. Make sure you measure & benchmark in a
reliable way (warm-up first, # of iterations, etc) -- you may need to write
some scripts or support code to enable this.

Be sure to write up all your initial measurements, different approaches,
results & conclusions.

Good luck!
_______________________________________________
gimp-developer-list mailing list
List address:    gimp-developer-list@xxxxxxxxx
List membership: https://mail.gnome.org/mailman/listinfo/gimp-developer-list




[Index of Archives]     [Video For Linux]     [Photo]     [Yosemite News]     [gtk]     [GIMP for Windows]     [KDE]     [GEGL]     [Gimp's Home]     [Gimp on GUI]     [Gimp on Windows]     [Steve's Art]

  Powered by Linux