June 18, 2013 [Issue 10402] New: memmove optimization for std.algorithm.copy | ||||
---|---|---|---|---|
| ||||
http://d.puremagic.com/issues/show_bug.cgi?id=10402 Summary: memmove optimization for std.algorithm.copy Product: D Version: unspecified Platform: All OS/Version: All Status: NEW Severity: enhancement Priority: P2 Component: Phobos AssignedTo: nobody@puremagic.com ReportedBy: tommitissari@hotmail.com --- Comment #0 from Tommi <tommitissari@hotmail.com> 2013-06-18 05:24:34 PDT --- Add an optimization for: Range2 copy(Range1, Range2)(Range1 source, Range2 target); ...to use the c function memmove when it is safe to do so and the two ranges overlap each other (when they don't overlap, a vectorized copy should be faster). As far as I can tell, it is safe to use memmove for copying source over target if all of the following are true: 1) Both ranges are arrays (static or dynamic) 2) Both arrays have the same element type 3) hasElaborateAssign!T is false for the element type T I haven't benchmarked anything, but all the good C++ standard library implementations of std::copy seem to do this optimization, and I trust that they know what they are doing. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
June 18, 2013 [Issue 10402] memmove optimization for std.algorithm.copy | ||||
---|---|---|---|---|
| ||||
Posted in reply to Tommi | http://d.puremagic.com/issues/show_bug.cgi?id=10402 --- Comment #1 from Tommi <tommitissari@hotmail.com> 2013-06-18 06:03:11 PDT --- (In reply to comment #0) > Add an optimization for: > > Range2 copy(Range1, Range2)(Range1 source, Range2 target); > > ...to use the c function memmove when it is safe to do so and the two ranges overlap each other (when they don't overlap, a vectorized copy should be faster). As far as I can tell, it is safe to use memmove for copying source over target if all of the following are true: > > 1) Both ranges are arrays (static or dynamic) > 2) Both arrays have the same element type > 3) hasElaborateAssign!T is false for the element type T > > I haven't benchmarked anything, but all the good C++ standard library implementations of std::copy seem to do this optimization, and I trust that they know what they are doing. Also, the documentation for std.algorithm.copy should be changed to indicate that the ranges are allowed to overlap if the above conditions hold. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: ------- |
Copyright © 1999-2021 by the D Language Foundation