[Mono-list] Performance benchmark

Robert Jordan robertj at gmx.net
Sat Feb 27 19:51:35 EST 2010


On 28.02.2010 00:48, James Mansion wrote:
> Robert Jordan wrote:
>> It was an example why results might be different.
>>
>>
> Relevant?

Who?

>> It is not. The GC is interacting with low-level OS parts and can
>> be triggered any time during your benchmarks.
>>
> Lets back up, becuase I still think there has been some hand-waving. If
> the answer
> is really 'its stuck in GC and yes it sucks' then fine, but the speed
> difference
> is very large for this code, and it doesn't look right unless the
> Windows code is
> very bad. The order of magnitude difference is hard to explain by OS
> interface
> efficiency differences, unless the OS interfaces are being used badly.

Feel free to disassemble a method compiled under Windows
and Linux. You'll find no differences.


Now on TLS:

---
// compile with: cl /Od tls.c
#include <windows.h>

int __declspec(thread) foo;

int
main (void)
{
	int i;
	DWORD ticks;
	DWORD tls = TlsAlloc ();

	ticks = GetTickCount ();
	for (i = 0; i < 100000000; i++) {
		foo = i + 1;
	}
	printf ("elapsed %d for __thread\n", GetTickCount () - ticks);

	ticks = GetTickCount ();
	for (i = 0; i < 100000000; i++) {
		TlsSetValue (tls, (LPVOID)(i + 1));
	}
	printf ("elapsed %d for TlsSetValue\n", GetTickCount () - ticks);
}
---

See the difference?

And yes, Mono is compiled w/out __thread support on Windows.
Patches are welcome ;)

Robert



More information about the Mono-list mailing list