This is the mail archive of the gcc-cvs@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

r191051 - in /trunk/gcc: ChangeLog lto-streamer...


Author: ak
Date: Fri Sep  7 02:56:17 2012
New Revision: 191051

URL: http://gcc.gnu.org/viewcvs?root=gcc&view=rev&rev=191051
Log:
Reduce memory usage for storing LTO decl resolutions

With a LTO build of a large project (>11k subfiles incrementially linked)
storing the LTO resolutions took over 0.5GB memory:

lto/lto.c:1087 (lto_resolution_read)                      0: 0.0%  540398500           15903: 0.0%

The reason is that the declaration indexes are quite sparse, but every subfile
got a full continuous vector for them. Since there are so many of them the
many vectors add up.

This patch instead stores the resolutions initially in a compact (index, resolution)
format. This is only expanded into a sparse vector for fast lookup when
the subfile is actually read, but then immediately freed. This means only one
vector is allocated at a time.

This brings the overhead for this down to less than 3MB for the test case:

lto/lto.c:1087 (lto_resolution_read)                      0: 0.0%    2821456           42186: 0.0%

gcc/:

2012-09-06  Andi Kleen  <ak@linux.intel.com>

	* gcc/lto-streamer.h (res_pair): Add.
	(lto_file_decl_data): Replace resolutions with respairs.
	Add max_index.
	* gcc/lto/lto.c (lto_resolution_read): Remove max_index.  Add rp.
	Initialize respairs.
	(lto_file_finalize): Set up resolutions vector lazily from respairs.

Modified:
    trunk/gcc/ChangeLog
    trunk/gcc/lto-streamer.h
    trunk/gcc/lto/lto.c


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]