www.digitalmars.com         C & C++   DMDScript  

digitalmars.D.bugs - [Issue 10402] New: memmove optimization for std.algorithm.copy

reply d-bugmail puremagic.com writes:
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: -------
Jun 18 2013
parent d-bugmail puremagic.com writes:
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: -------
Jun 18 2013