Thread overview | ||||||
---|---|---|---|---|---|---|
|
June 14, 2008 is D so slow? | ||||
---|---|---|---|---|
| ||||
Hello I wrote 2 almost identical test programs(matrix multiplication). One on C and another on D. And D prorgram was 15 times slower! Was it my mistake or not? Thank you p.s. code: void test (int n) { float[] xs = new float[n*n]; float[] ys = new float[n*n]; for(int i = n-1; i>=0; --i) { xs[i] = 1.0; } for(int i = n-1; i>=0; --i) { ys[i] = 2.0; } float[] zs = new float[n*n]; for (int i=0; i<n; ++i) { for (int j=0; j<n; ++j) { float s = 0.0; for (int k=0; k<n; ++k) { s = s + (xs[k + (i*n)] * ys[j + (k*n)]); } zs[j+ (i*n)] = s; } } delete xs; delete ys; delete zs; } |
June 14, 2008 Re: is D so slow? | ||||
---|---|---|---|---|
| ||||
Posted in reply to baleog | baleog wrote:
> Hello
> I wrote 2 almost identical test programs(matrix multiplication). One on C and another on D. And D prorgram was 15 times slower! Was it my mistake or not?
> Thank you
>
> p.s. code:
> void test (int n) { float[] xs = new float[n*n];
> float[] ys = new float[n*n];
> for(int i = n-1; i>=0; --i) {
> xs[i] = 1.0;
> }
> for(int i = n-1; i>=0; --i) {
> ys[i] = 2.0;
> }
> float[] zs = new float[n*n];
> for (int i=0; i<n; ++i) {
> for (int j=0; j<n; ++j) {
> float s = 0.0;
> for (int k=0; k<n; ++k) {
> s = s + (xs[k + (i*n)] * ys[j + (k*n)]);
> }
> zs[j+ (i*n)] = s;
> }
> }
> delete xs;
> delete ys;
> delete zs;
> }
>
To me your code looks reasonable, although you probably want to take the startup time and the gc out of the equation since that cost is fixed. BTW: here's a slightly more optimal reverse loop:
for(int i = n; --i>0; )
-Joel
|
June 14, 2008 Re: is D so slow? | ||||
---|---|---|---|---|
| ||||
Posted in reply to janderson | On Sat, 14 Jun 2008 11:34:20 -0700, janderson wrote: >...To me your code looks reasonable, although you probably want to take the > startup time and the gc out of the equation since that cost is fixed. BTW: here's a slightly more optimal reverse loop: > > for(int i = n; --i>0; ) > > -Joel wouldn't that be: for(int i = n; i-- >0; ) ? first time through i == n-1, last time through i == 0. |
June 14, 2008 Re: is D so slow? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Charles Hixson | Charles Hixson wrote:
> On Sat, 14 Jun 2008 11:34:20 -0700, janderson wrote:
>
>> ...To me your code looks reasonable, although you probably want to take
> the
>> startup time and the gc out of the equation since that cost is fixed.
>> BTW: here's a slightly more optimal reverse loop:
>>
>> for(int i = n; --i>0; )
>>
>> -Joel
>
> wouldn't that be:
> for(int i = n; i-- >0; )
> ?
> first time through i == n-1, last time through i == 0.
Actually it should be:
for(int i = n; --i>=0; )
(missed the >=)
-Joel
|
Copyright © 1999-2021 by the D Language Foundation