1923 – GC optimization for contiguous pointers to the same page

D issues are now tracked on GitHub. This Bugzilla instance remains as a read-only archive.
Issue 1923 - GC optimization for contiguous pointers to the same page
Summary: GC optimization for contiguous pointers to the same page
Status: RESOLVED FIXED
Alias: None
Product: D
Classification: Unclassified
Component: phobos (show other issues)
Version: D1 (retired)
Hardware: All All
: P3 enhancement
Assignee: Walter Bright
URL:
Keywords: patch
Depends on:
Blocks:
Reported: 2008年03月14日 03:10 UTC by Vladimir Panteleev
Modified: 2014年02月24日 16:00 UTC (History)
0 users

See Also:


Attachments
Proposed patch (1.11 KB, patch)
2008年03月14日 03:11 UTC, Vladimir Panteleev
Details | Diff
Add an attachment (proposed patch, testcase, etc.)

Note You need to log in before you can comment on or make changes to this issue.
Description Vladimir Panteleev 2008年03月14日 03:10:58 UTC
Probably the best practical example for this situation is splitting a large text file by whitespace: 
import std.file, std.string, std.gc;
import std.stdio: putr = writefln;
alias char[] string;
static import std.c.time;
double clock() {
 auto t = std.c.time.clock();
 return t/cast(double)std.c.time.CLOCKS_PER_SEC;
}
void main() {
 //disable;
 auto t0 = clock();
 auto txt = cast(string)read("text.txt"); // 6.3 MB of text
 auto t1 = clock();
 auto words = txt.split();
 auto t2 = clock();
 
 putr("loading time: ", t1 - t0); // 0.08 s
 putr("splitting time: ", t2 - t1); // 3.69 s with GC, 0.66 s without
 // Total running time with GC = 10.85 s
}
Example is from this NG post by bearophile: 
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=67673 
The attached patch increases the performance of this particular case tenfold by my tests. It should have no significant overhead on other situations. There's a bit more info in my reply to the abovementioned NG post.
Comment 1 Vladimir Panteleev 2008年03月14日 03:11:49 UTC
Created attachment 239 [details] 
Proposed patch
Tested myself on a >10000 line application, didn't notice any ill side-effects.
Comment 2 Leandro Lucarella 2009年03月28日 15:17:48 UTC
Is there any reason why this patch is no applied?
Comment 3 Neia Neutuladh 2009年03月28日 15:50:42 UTC
For reference, this patch has been applied to Tango and has not caused any known issues.
Comment 4 Walter Bright 2009年03月29日 01:54:58 UTC
Complete discussion:
http://www.digitalmars.com/d/archives/digitalmars/D/Slow_GC_67673.html 
Comment 5 Walter Bright 2009年03月29日 02:05:23 UTC
This patch is already in D2, I'll add it to D1.
Comment 6 Leandro Lucarella 2009年03月29日 10:15:56 UTC
But for some reason D2 (druntime) timings are still huge.
Here is a test, dmd es 1.041 with the patch attached here, dmd2 is 2.026.
$ cat split.d
// Written by bearophile <bearophileHUGS@lycos.com>
// Fount at http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=67673
// Sightly modified by Leandro Lucarella <llucax@gmail.com>
// (removed timings)
import std.file, std.string;
import std.stdio: writefln;
static import std.c.time;
void main() {
	auto txt = cast(string) read("split.txt");
	auto words = txt.split();
}
$ dmd -release -O -inline -ofsplit1 split.d 
$ dmd2 -release -O -inline -ofsplit2 split.d 
$ ls -lh split.txt 
-rw-r--r-- 1 luca luca 15M mar 28 17:01 split.txt
$ time ./split1
real	0m0.751s
user	0m0.443s
sys	0m0.128s
$ time ./split2
real	0m25.293s
user	0m20.517s
sys	0m0.233s
(timings for D1 without the patch are about the same as D2)
Comment 7 Walter Bright 2009年04月01日 13:51:11 UTC
Fixed DMD 1.042


AltStyle によって変換されたページ (->オリジナル) /