[Wine] Re: Slow performance with many 3D games

jeffz wineforum-user at winehq.org
Tue Sep 2 02:30:27 CDT 2008


chourmovs wrote:
> 
> Fazer wrote:
> >  very low performance in comparison to running on the same computer on Windows. 
> 
> 
> 
> Ulberon wrote:
> > binding the process (game) to a single core, if you are in a multi-core system
> 
> 
> you have your answer
> 
> More than linux's xorg  and wine's directx limitation, wine is suffering of is lack of multithreading implementation
> recent game used lot of multithreading, hyperthreading and other cpu functionality.


That's not accurate.  Wine supports multithreading just fine.  Consider this example:




Code:
#include <windows.h>
#include <stdio.h>
#include <assert.h>
DWORD WINAPI MyThreadFunction( LPVOID lpParam )
{
  printf("Thread %d going into infinite loop.\n",(int)lpParam);
  while(1);
  return 0;
}
int main(int argc, char *argv[])
{
  int i;
  DWORD dwThreadIdArray[4];
  HANDLE th;
  for(i = 0;i < 4;i++)
    {
      th = CreateThread(
               NULL,                   // default security attributes                                                                                                                         
               0,                      // use default stack size                                                                                                                              
               MyThreadFunction,       // thread function name                                                                                                                                
               (LPVOID)i,          // argument to thread function                                                                                                                             
               0,                      // use default creation flags                                                                                                                          
               &dwThreadIdArray[i]);   // returns the thread identifier                                                                                                                       
      assert(th);
    }
  puts("Sleeping for 15 seconds\n");
  Sleep(15000);
  return 0;
}






> 
> jeffz at genera:~$ i586-mingw32msvc-gcc thread.c -o thread.exe
> jeffz at genera:~$ time ~/git/wine/wine thread.exe 
> Thread 1 going into infinite loop.
> Thread 0 going into infinite loop.
> Sleeping for 15 seconds
> 
> Thread 3 going into infinite loop.
> Thread 2 going into infinite loop.
> 
> real	0m15.104s
> user	0m59.512s
> sys	0m0.044s
> 


I have 4 cores and you can see that 59.5 seconds of user time have elapsed in 15 seconds of wall time.  All cores were kept busy doing work.

If that's not what you meant, please explain.







More information about the wine-users mailing list