D - GC modification
- berobero users.sourceforge.net (62/62) Feb 02 2004 D documentaton says,
D documentaton says,
"The garbage collector's algorithms depend on pointers being pointers and not
pointers being not pointers. "
but this feature isn't impremented now.
so, when you use big data, such as:
ubyte[] buffer = new ubyte[BIGSIZE];
GC think it may include pointer and scan whole data.
I've added atomic data allocation.
currently supports 1byte(char,byte,ubyte) or 2byte(wchar,short,ushort) type
array.
benchmark:
small array: same or bit slow
large array: about 50% fast
import std.gc;
import std.c.time;
int main(char[][] args) {
clock_t start = clock();
for(int i=0;i<1000000;i++) {
char[] tmp = new char[20];
}
std.gc.fullCollect();
printf("%d:",clock()-start); start=clock();
for(int i=0;i<100;i++) {
char[] tmp = new char[1000000];
}
std.gc.fullCollect();
printf("%d\n",clock()-start);
return 0;
}
1312:1142 orig >dmd test.d
1312:530 new >dmd test.d gc.obj gcx.obj
why bit slow? I think:
when new char[n],
original version get memory from pointer area
separete version allocate new 4K block even if pointer area has free area.
inside D,
new Type[n]
fall into
_d_new(n,Type.size) * except bit array
ex:
new char[n]
-> d_new(n,1)
new int[n]
new float[n]
new pointer[n]
-> d_new(n,4)
so if Type.size < pointer.size(4), it should be atomic value.
if Type.size is same or larger than 4, I can't decide it pointer or value.
Compiler know it. In the feature, D complier may generate another _new runtime
function call for atomic data.
the other side,
new Class
fall into
_d_newclass(ClassInfo ci)
Classinfo has flags.
in the feature, D complier may generate flags the class has pointer or data
only.
----
This code is based on phobos code.
in my view, only dmd frontend is under Artistic and others are "Digital mars
Licence".
so I don't release in this point.
Feb 02 2004
Some interesting stuff! <berobero users.sourceforge.net> wrote in message news:bvmoeb$2qtn$1 digitaldaemon.com...D documentaton says, "The garbage collector's algorithms depend on pointers being pointers andnotpointers being not pointers. " but this feature isn't impremented now. so, when you use big data, such as: ubyte[] buffer = new ubyte[BIGSIZE]; GC think it may include pointer and scan whole data. I've added atomic data allocation. currently supports 1byte(char,byte,ubyte) or 2byte(wchar,short,ushort)typearray. benchmark: small array: same or bit slow large array: about 50% fast import std.gc; import std.c.time; int main(char[][] args) { clock_t start = clock(); for(int i=0;i<1000000;i++) { char[] tmp = new char[20]; } std.gc.fullCollect(); printf("%d:",clock()-start); start=clock(); for(int i=0;i<100;i++) { char[] tmp = new char[1000000]; } std.gc.fullCollect(); printf("%d\n",clock()-start); return 0; } 1312:1142 orig >dmd test.d 1312:530 new >dmd test.d gc.obj gcx.obj why bit slow? I think: when new char[n], original version get memory from pointer area separete version allocate new 4K block even if pointer area has free area. inside D, new Type[n] fall into _d_new(n,Type.size) * except bit array ex: new char[n] -> d_new(n,1) new int[n] new float[n] new pointer[n] -> d_new(n,4) so if Type.size < pointer.size(4), it should be atomic value. if Type.size is same or larger than 4, I can't decide it pointer or value. Compiler know it. In the feature, D complier may generate another _newruntimefunction call for atomic data. the other side, new Class fall into _d_newclass(ClassInfo ci) Classinfo has flags. in the feature, D complier may generate flags the class has pointer ordataonly. ---- This code is based on phobos code. in my view, only dmd frontend is under Artistic and others are "DigitalmarsLicence". so I don't release in this point.
Feb 02 2004
Heres a link for ya ;) http://www.netbsd.org/Ports/dreamcast/ Sounds interesting , any plans on making it public ? <berobero users.sourceforge.net> wrote in message news:bvmoeb$2qtn$1 digitaldaemon.com...D documentaton says, "The garbage collector's algorithms depend on pointers being pointers andnotpointers being not pointers. " but this feature isn't impremented now. so, when you use big data, such as: ubyte[] buffer = new ubyte[BIGSIZE]; GC think it may include pointer and scan whole data. I've added atomic data allocation. currently supports 1byte(char,byte,ubyte) or 2byte(wchar,short,ushort)typearray. benchmark: small array: same or bit slow large array: about 50% fast import std.gc; import std.c.time; int main(char[][] args) { clock_t start = clock(); for(int i=0;i<1000000;i++) { char[] tmp = new char[20]; } std.gc.fullCollect(); printf("%d:",clock()-start); start=clock(); for(int i=0;i<100;i++) { char[] tmp = new char[1000000]; } std.gc.fullCollect(); printf("%d\n",clock()-start); return 0; } 1312:1142 orig >dmd test.d 1312:530 new >dmd test.d gc.obj gcx.obj why bit slow? I think: when new char[n], original version get memory from pointer area separete version allocate new 4K block even if pointer area has free area. inside D, new Type[n] fall into _d_new(n,Type.size) * except bit array ex: new char[n] -> d_new(n,1) new int[n] new float[n] new pointer[n] -> d_new(n,4) so if Type.size < pointer.size(4), it should be atomic value. if Type.size is same or larger than 4, I can't decide it pointer or value. Compiler know it. In the feature, D complier may generate another _newruntimefunction call for atomic data. the other side, new Class fall into _d_newclass(ClassInfo ci) Classinfo has flags. in the feature, D complier may generate flags the class has pointer ordataonly. ---- This code is based on phobos code. in my view, only dmd frontend is under Artistic and others are "DigitalmarsLicence". so I don't release in this point.
Feb 02 2004
Sounds interesting , any plans on making it public ?Say again, it is based on phobos, so I don't know I can make it public. I'm asking to Walter. bero
Feb 02 2004









"Walter" <walter digitalmars.com> 