Jump to content
The Dark Mod Forums

SIMD anyone?


MoroseTroll

Recommended Posts

Forgive me for my pessimism, but I heavily doubt that your work would be useful. I used to play with SSE in TDM and concluded that SSE did not play important role in TDM performance nowadays.

 

First of all, Doom3 engine uses its own private (statically linked) version of idLib. So your changes will only affect TDM code which uses SIMD code rarely.

 

Second, I tested TDM with SSE completely off (there is a cvar to disable SIMD optimization in both idLib instances). The performance was the same as with SSE enabled. I believe that most of the today TDM is RAM-bound (including Tels's ModelGenerator) and rewriting code in SSE won't help performance even a tiny bit. SSE won't increase performance of linear algorithm unless the data is loaded from cache (which is unlikely).

 

And the last idea is about writing SSE code in asm. IMO it is VERY bad decision :wacko:. You'd have done everything in intel SSE intrinsics (MSDN page). They are very portable (MSVC, GCC, ICC, SunStudio and whatever else). They save vast amount of coding time. And I think that by using them you can get better performance because compiler will handle register allocation (it knows this topic much better than humans).

 

Note that ID decided to use hand-coded assembly instead of intrinsics only because they started coding Doom3 on MSVC6 compiler (13 years old now) which had very bad intrinsics support. Modern compilers have become much better.

Link to comment
Share on other sites

Well, I understand your point of view. Yes, my code is still useless until id Tech 4 will become open. I hope this will happen this year, and then we will see how (in)efficient my code is ;).

 

You see, I still hope that by boosting Doom 3 itself, I could boost TDM as well. Moreover, if someone from TDM team will learn that some hot function works too slow, I would help to improve it by implementing it in the idSIMD library.

 

Yes, I know that due to the suboptimal size of the idDrawVert class (60 bytes instead of 64), any massive manipulations with it (as in ModelGenerator) can fool CPU hardware prefetchers, and because of this they can be RAM-bound. But I hope that it can be resolved when (if) the Doom 3 source will be released.

 

As for ASM-code versus intrinsics I should say that it is not so important. If my code will be efficient enough, I will make it available on Linux and Mac versions of TDM, one way or another.

Link to comment
Share on other sites

Yes, I know that due to the suboptimal size of the idDrawVert class (60 bytes instead of 64), any massive manipulations with it (as in ModelGenerator) can fool CPU hardware prefetchers, and because of this they can be RAM-bound. But I hope that it can be resolved when (if) the Doom 3 source will be released.

 

CPU prefetchers take data from L1 cache. To get there the data must go through path: (hard drive) -> RAM -> L2 -> L1. And I suppose that RAM -> L2 is bottleneck (and it is MUCH slower than prefetching unaligned data you mention).

 

For example, this code can be greatly accelerated by SSE because it works with the same 4Kb of data many times:

 

 for (int i = 0; i<20<<10; i++) for (int j = 0; j < 1<<10; j++) sum += arr[j]; 

 

But this code won't work faster with SSE because the huge 80Mb array is accessed once:

 

 for (int i = 0; i<20<<20; i++) sum += arr[i]; 

 

So I mean that everything might be slow because of small RAM bandwidth. In case of TDM small chunks of memory allocated in the heap are accessed in random patterns. So the effective bandwidth may be even less.

 

By the way I have intel CPU, so I don't know how slow idSIMD is on AMD processors. Perhaps optimizing SSE can improve performance for AMD users. Anyway I wish you good luck!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recent Status Updates

    • taffernicus

      i am so euphoric to see new FMs keep coming out and I am keen to try it out in my leisure time, then suddenly my PC is spouting a couple of S.M.A.R.T errors...
      tbf i cannot afford myself to miss my network emulator image file&progress, important ebooks, hyper-v checkpoint & hyper-v export and the precious thief & TDM gamesaves. Don't fall yourself into & lay your hands on crappy SSD
       
      · 2 replies
    • OrbWeaver

      Does anyone actually use the Normalise button in the Surface inspector? Even after looking at the code I'm not quite sure what it's for.
      · 7 replies
    • Ansome

      Turns out my 15th anniversary mission idea has already been done once or twice before! I've been beaten to the punch once again, but I suppose that's to be expected when there's over 170 FMs out there, eh? I'm not complaining though, I love learning new tricks and taking inspiration from past FMs. Best of luck on your own fan missions!
      · 4 replies
    • The Black Arrow

      I wanna play Doom 3, but fhDoom has much better features than dhewm3, yet fhDoom is old, outdated and probably not supported. Damn!
      Makes me think that TDM engine for Doom 3 itself would actually be perfect.
      · 6 replies
    • Petike the Taffer

      Maybe a bit of advice ? In the FM series I'm preparing, the two main characters have the given names Toby and Agnes (it's the protagonist and deuteragonist, respectively), I've been toying with the idea of giving them family names as well, since many of the FM series have named protagonists who have surnames. Toby's from a family who were usually farriers, though he eventually wound up working as a cobbler (this serves as a daylight "front" for his night time thieving). Would it make sense if the man's popularly accepted family name was Farrier ? It's an existing, though less common English surname, and it directly refers to the profession practiced by his relatives. Your suggestions ?
      · 9 replies
×
×
  • Create New...