From: "Robert I. Eachus" <rieachus@comcast.net>
Subject: Re: reading a text file into a string
Date: Thu, 22 Jul 2004 18:34:20 -0400
Date: 2004-07-22T18:34:20-04:00 [thread overview]
Message-ID: <OrednWv2_cdw3Z3cRVn-uQ@comcast.com> (raw)
In-Reply-To: <XMCdnQjqXrrDf2PdRVn-pw@megapath.net>
Randy Brukardt wrote:
> "Robert I. Eachus" <rieachus@comcast.net> wrote in message
> news:nM-dnegXLbmdK2DdRVn-hQ@comcast.com...
> ...
>
>>When the programmer can do something simple like this to improve program
>>performance, it should be supported by all compilers. (Notice that this
>>is an error, not a warning.) I can see not supporting the subtype case
>>due to the (potential) requirement for either large stack frames or
>>varying size stack frames. But for an object that can be allocated at
>>link time, I don't see why it shouldn't be supported.
>
>
> What's an object allocated at link time? I don't know of any such thing (you
> can allocate segments at link time, but the number of those is quite
> limited).
Um, a compiler can (but most Ada compilers don't) allocate objects in
library packages on the heap, in static storage, or even in code
segments. But you are right that this is very definitely not the usual
in x86 compilers and environments.
> Similarly, do you know of *any* compiler for *any* language that supports
> 256 byte alignment? I don't, at least on Windows.
You are probably correct with regards to Windows. I do know of
compilers that do support such alignments, but only for supercomputers.
With the rate at which x86 chips are taking over the supercomputer
market though, I'll have to check.
But the real reason I posted all this is that Ada compilers for x86,
including x86 Windows SHOULD support this alignment, even if it is
relatively painful to do so. (Painful in terms of gaps in the stack, or
doing the extra effort required when allocating space on the heap.) The
case of a String buffer when reading files is a perfect case in point.
If the buffer is 128 (AMD) or 256 (Intel) byte aligned when reading from
a memory-mapped file, you will reduce the number of cache line misses
during the execution of the program. (If the buffer is in a single
cache line, then that line will stay resident in L1 cache. If the
buffer is distributed over two (Intel) or more (AMD) cache lines, the
lines that are not referenced every line may get paged out.
This is much more likely on an Intel CPU, and is potentially much more
painful when it happens. The 'exclusive' cache feature on AMD
processors means that if the line gets replaced in L1, it will be copied
back to L2. So it takes two cache line replacements to push the line
out of cache entirely. With Intel the line can get moved to the much
smaller L1 cache, then overwritten in L2 cache. When it is overwritten
in L1, then it will have to be pulled in from main memory next time around.
We may only be talking say, a 2 or 3% slowdown from such a misaligned
text buffer. Not really worth going to all the trouble to align buffers
for casual programming. But when I am working on a linear algebra code,
I do go to the effort where it does pay off. (For example, if you
represent the basis in a linear programming subroutine as a matrix and a
series of pivots, it makes for a significant improvement in performance
to start the pivot rows on the correct cache line boundary.)
--
Robert I. Eachus
"The flames kindled on the Fourth of July, 1776, have spread over too
much of the globe to be extinguished by the feeble engines of despotism;
on the contrary, they will consume these engines and all who work them."
-- Thomas Jefferson, 1821
next prev parent reply other threads:[~2004-07-22 22:34 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-07-15 17:27 reading a text file into a string zork
2004-07-15 17:49 ` Marius Amado Alves
2004-07-15 19:57 ` Nick Roberts
2004-07-15 17:59 ` Marius Amado Alves
2004-07-15 19:18 ` Nick Roberts
2004-07-15 19:18 ` Nick Roberts
2004-07-15 20:02 ` Nick Roberts
2004-07-16 1:23 ` Jeffrey Carter
2004-07-16 2:20 ` Steve
2004-07-16 2:26 ` Steve
2004-07-16 16:16 ` Jeffrey Carter
2004-07-16 17:45 ` Nick Roberts
2004-07-16 21:19 ` Randy Brukardt
2004-07-17 2:27 ` Robert I. Eachus
2004-07-17 11:31 ` Mats Weber
2004-07-17 15:52 ` Robert I. Eachus
2004-07-17 22:38 ` Jeffrey Carter
2004-07-18 13:44 ` zork
2004-07-19 8:07 ` Dale Stanbrough
2004-07-19 8:58 ` Martin Dowie
2004-07-21 0:17 ` Robert I. Eachus
2004-07-21 21:39 ` Randy Brukardt
2004-07-22 22:34 ` Robert I. Eachus [this message]
2004-07-23 0:49 ` Randy Brukardt
2004-07-23 21:56 ` Nick Roberts
2004-07-24 0:34 ` tmoran
2004-07-24 1:16 ` Nick Roberts
2004-07-24 1:42 ` Randy Brukardt
2004-07-24 15:14 ` Nick Roberts
2004-07-26 23:48 ` Randy Brukardt
2004-07-27 12:08 ` Nick Roberts
2004-07-27 23:24 ` Robert I. Eachus
2004-07-29 0:55 ` Randy Brukardt
2004-07-29 0:53 ` Randy Brukardt
2004-07-29 7:25 ` Martin Dowie
2004-07-29 20:08 ` Robert I. Eachus
2004-07-30 0:14 ` tmoran
2004-07-24 2:56 ` Robert I. Eachus
2004-07-19 11:51 ` Ada2005 (was " Peter Hermann
2004-07-19 12:51 ` Dmitry A. Kazakov
2004-07-19 13:01 ` Nick Roberts
2004-07-19 13:35 ` Martin Dowie
2004-07-19 17:22 ` Nick Roberts
2004-07-19 23:50 ` Randy Brukardt
replies disabled
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox