This is the mail archive of the binutils@sources.redhat.com mailing list for the binutils 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]

RE: GAS


Hi, Nick!
Hash statistics says that increasing the size we really reduce average
chain length and number of hash comparisons. However I was not able to
measure any comptime change on 1.3MB of x86 assembly source code.
Hopefully bigger sources will expose the gain. Therefore we may keep
default hash size value unchanged.

Also there is a little problem with the patch: new command line option
has no affect on symbol table and local symbol table hashes because
routine parse_args gets called after symbol_begin in "as.c", where these
hashes allocated. 

Best regards!
- Grigory

>-----Original Message-----
>From: Nick Clifton [mailto:nickc@redhat.com]
>Sent: Wednesday, April 06, 2005 3:15 PM
>To: Zagorodnev, Grigory
>Cc: Stas Kiselev; binutils@sources.redhat.com
>Subject: Re: GAS
>
>Hi Grigory,
>
>> Similar issue was reported against 'ld' 1.5 years ago. Simple change
of
>> default hash size from 4K to 64K gave 2x link time improvement.
>> http://lists.gnu.org/archive/html/bug-gnu-utils/2003-08/msg00153.html
>>
>> Thus the patch may look like this:
>>
>> $ diff gas/hash.c.org gas/hash.c
>>
>> 38c38
>> < #define DEFAULT_SIZE (4051)
>> ---
>>>#define DEFAULT_SIZE (65537)
>
>We might as well do this properly.  Please could you try the attached
>patch which as well as changing the default hash size adds two new
>switches: --hash-size=<NUMBER> and --reduce-memory-overheads which
>behave in much the same way as their linker namesakes.
>
>If the patch works for you and there are no objections then I will
apply
>it next week.
>
>Cheers
>   Nick
>
>gas/ChangeLog
>
>2005-04-06  Nick Clifton  <nickc@redhat.com>
>
>	* hash.c (DEFAULT_SIZE): Delete.  Replace with:
>	(gas_hash_table_size): New static variable.
>	(set_gas_hash_table_size): New function:  Records a requested
size
>	for the hash tables.
>	(get_gas_hash_table_size): New function: Return a prime number
>	near the requested size of the hash table.
>	(hash_new): Use get_gas_hash_table_size.
>	* hash.h: Add a prototype for set_gas_hash_table_size.
>	* as.c (show_usage): Add description of new switches:
--hash-size
>	and --reduce-memory-overheads.
>	(option_values): Add OPTION_HASH_TABLE_SIZE and
>	OPTION_REDUCE_MEMORY_OVERHEADS.
>	(std_longpopts): Add entries for the new options.
>	(parse_args): Handle the new options.
>	* Makefile.am: Add a dependency of as.c on hash.h.
>	* Makefile.in: Regenerate.
>	* doc/as.texinfo: Document the new switches.
>	* NEWS: Mention the new switches.


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