- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Answering post #20:
Yes now I see what do you mean. I was under assumption of the skewed results and I pay less attention to code analysis(had not time for detailed analysis). It seems that Watcom generated instruction (fild?) which converted int to float in the microcode (probably part of x87 FPU stack) thus speeding somehow execution. I think that CPU scheduler dispatched loop control statement for the computation on the Port6 (forward branch) it could has been also fused with the jl instruction. As you mentioned in your comment Watcom compiler did not use stack for accessing multiplier value and whole computation was performed entirely "inside" FPU x87 unit.
ICL produced probably unoptimized code with interleaved multiplication operation with constant stack access needed to reload running product multiplier. If that multiplier remained the same value I wonder if it was cached because of high temporal frequency of usage. Constant usage of stack resident multiplier at ebp-30h probably slowed down the computation. ILP exploitation of loop control statement probably had zero impact on computation speed up when compared to Watcom code.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Sergey Kostrov wrote:
>>...why Watcom C++ compiler easily outperformed all the rest modern C/C++ compilers but I clearly see that two multiplication
>>operations ( FMUL ) are done with FPU registers instead of memory variables created on the stack[ Watcom C++ compiler ]
...
00402AED fst st(2)
00402AEF fmul st, st(2)
00402AF1 fmul st, st(2)
00402AF3 fstp st(1)
...The core part of the calculations is done with FPU registers!
Beside the core calculation I think that also an int->float conversion is managed by the x87 instruction internally at uop level. I think that FILD is the is responsible for that, but this can have impact on the loop computation speed.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
>>>Even if STL is a good library C++ overheads affect performance significantly and it is clearly seen when it comes to processing with boosted thread priorities, like Above Normal or Time Critical, and measurements of time intervals with microseconds, or less ( hundred of nanoseconds ) accuracy.>>>
Do you mean in highly portable DSP-like applications running on Windows desktop OS?
I ask this because in my own projects I tend to rely so much on STL std::valarray and std::vector for scientific computation. I prefer to lean on resources deallocation (destructor calls) of those aforementioned containers.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page