Such a small benchmark
Viktor
vi.ki at worldonline.cz
Wed Oct 16 19:17:27 UTC 2002
> > > To be a little bit more fair you should write the Squeak benchmark
> > exactly
> > > like the C++ one:
> > >
> > > | a |
> > > a := Array new: 1.
> > > 1 to: 10000000 do: [:i| a at: 1 put: 3.]
> > >
> > > Using #to:do: gives a speed-up by 100% here!
> > >
> > > -- Bert
> > >
> > > PS: of course, we should change the implementation of #timesRepeat:
> > > accordingly
> >
> > No, it is not "more fair". All Smalltalks run the same code, C++ was
here
> > just for... I don't know exactly why... just for fun?
>
> I know that many fortran compilers would just optimize the whole loop
> away. Are you certain that the compiled C program wasn't also
> similiarily affected?
>
> --
> Travis Griggs
No, I supposed such optimizations, but I was wrong.
Here is disassembled code:
436: void CSelfDlg::OnBuildObject()
437: {
0040EF40 53 push ebx
0040EF41 55 push ebp
0040EF42 56 push esi
0040EF43 8B 35 28 40 41 00 mov esi,dword ptr
[__imp__GetTickCount at 0 (00414028)]
0040EF49 57 push edi
0040EF4A 8B D9 mov ebx,ecx
0040EF4C FF D6 call esi
438: DWORD BegTime = ::GetTickCount();
439: DWORD *Array = new DWORD [1];
0040EF4E 6A 04 push 4
0040EF50 8B E8 mov ebp,eax
0040EF52 E8 A5 31 00 00 call operator new (004120fc)
0040EF57 8B F8 mov edi,eax
0040EF59 83 C4 04 add esp,4
0040EF5C B8 80 96 98 00 mov eax,989680h
0040EF61 8B 0F mov ecx,dword ptr [edi]
440: for (DWORD Index = 0; Index < 10000000; Index++)
0040EF63 48 dec eax
441: {
442: Array [0] = 3;
0040EF64 B9 03 00 00 00 mov ecx,3
0040EF69 75 F8 jne CSelfDlg::OnBuildObject+23h
(0040ef63)
0040EF6B 89 0F mov dword ptr [edi],ecx
443: };
444: DWORD TotalTime = ::GetTickCount() - BegTime;
0040EF6D FF D6 call esi
0040EF6F 8B F0 mov esi,eax
445: delete Array;
0040EF71 57 push edi
0040EF72 2B F5 sub esi,ebp
0040EF74 E8 77 31 00 00 call operator delete (004120f0)
0040EF79 83 C4 04 add esp,4
More information about the Squeak-dev
mailing list
|