| ------------ | |
| Benchmarking | |
| ------------ | |
| There is a set a benchmarking programs in the | |
| "tests" directory. These should be runnable using the | |
| following command-lines corresponding to each of the possible | |
| library builds: | |
| MSVC: | |
| nmake clean VC-bench | |
| nmake clean VCE-bench | |
| nmake clean VSE-bench | |
| Mingw32: | |
| make clean GC-bench | |
| make clean GCE-bench | |
| UWIN: | |
| The benchtests are run as part of the testsuite. | |
| Mutex benchtests | |
| ---------------- | |
| benchtest1 - Lock plus unlock on an unlocked mutex. | |
| benchtest2 - Lock plus unlock on a locked mutex. | |
| benchtest3 - Trylock on a locked mutex. | |
| benchtest4 - Trylock plus unlock on an unlocked mutex. | |
| Each test times up to three alternate synchronisation | |
| implementations as a reference, and then times each of | |
| the four mutex types provided by the library. Each is | |
| described below: | |
| Simple Critical Section | |
| - uses a simple Win32 critical section. There is no | |
| additional overhead for this case as there is in the | |
| remaining cases. | |
| POSIX mutex implemented using a Critical Section | |
| - The old implementation which uses runtime adaptation | |
| depending on the Windows variant being run on. When | |
| the pthreads DLL was run on WinNT or higher then | |
| POSIX mutexes would use Win32 Critical Sections. | |
| POSIX mutex implemented using a Win32 Mutex | |
| - The old implementation which uses runtime adaptation | |
| depending on the Windows variant being run on. When | |
| the pthreads DLL was run on Win9x then POSIX mutexes | |
| would use Win32 Mutexes (because TryEnterCriticalSection | |
| is not implemented on Win9x). | |
| PTHREAD_MUTEX_DEFAULT | |
| PTHREAD_MUTEX_NORMAL | |
| PTHREAD_MUTEX_ERRORCHECK | |
| PTHREAD_MUTEX_RECURSIVE | |
| - The current implementation supports these mutex types. | |
| The underlying basis of POSIX mutexes is now the same | |
| irrespective of the Windows variant, and should therefore | |
| have consistent performance. | |
| Semaphore benchtests | |
| -------------------- | |
| benchtest5 - Timing for various uncontended cases. | |
| In all benchtests, the operation is repeated a large | |
| number of times and an average is calculated. Loop | |
| overhead is measured and subtracted from all test times. | |