[Mono-dev] New (faster) Implementaiton for managed CharCopy
Andreas Nahr
ClassDevelopment at A-SoftTech.com
Mon Mar 20 14:34:14 EST 2006
> On 03/18/06 Andreas Nahr wrote:
>> ALL new Implementations are always faster, sometimes more than twice as
>> fast as current. The best overall is CharCopy autoalign. However I'm not
>> sure if this would work on non-x86 Platforms, but CC aligned should
>> always
>> work if I understand the alignment issues right.
>
> Unaligned loads and stores are unacceptable, since they break at least
> sparc and arm.
Unfortunatelly I don't have any sparc or arm system ready so I couldn't
test, but the CC aligned implementation should work, because it is aligned.
> The current memcpy() was done because it is a compromise between speed
> and code bloat.
The current implementation is 180 lines of code. The proposed one only has
113 lines of code. Which one is more bloated?
> You could certainly unroll some more for some speed
> gains.
It doesn't make any sense to unroll anymore, because each additional level
of unrolling will make copying SHORT data much more slow. In fact if you
look at the numbers the new Implementations are not much faster for huge
strings, they are much faster for short and especially medium length
strings.
> If you can provide significant gains with little code bloat in the
> current methods, please do, but we're not going to add additional
> specialized memory copy routines.
Well if a speedup of up to >100% isn't enough for you - how much should it
be???
> memcpy is used also by the runtime and your methods only deal with
> chars, so they are not a replacement.
And how much of the time they are called with using a byte? Two times for
the entire Corelib? And the rest of the time they are called for characters.
Besides that it does not even seem semantically right to put something like
memcopy into the STRING class.
I'd say put the specialized CharCopy into String and move the memcopy to
e.g. Buffer if it is still needed.
> The way to speedup the code is to implement arch-specific hand-coded
> managed implementations in the jit.
I absolutely agree on that, however I don't see any reason why we should
have a managed fallback that is much slower than it could possibly be.
Especially as nobody has done this in the last few years.
In another thread you posted that you should measure against the icalls.
Where is the sense in that if the managed implementation is known to be
slow?
Greets
Andreas
More information about the Mono-devel-list
mailing list