Re: [Bulk] Re: C vs C++
Tim Bronski <[email protected]>
| Newsgroups | gmane.comp.lang.as400.c |
|---|---|
| Message-ID | <[email protected]> |
What about doing the packed decimal work in a C module wrapped in a c++ class? On 2/17/2015 2:56 PM, Jevgeni Astanovski wrote: > Mark, > > Spent some time and rewrote the API to use long long. > However I have nothing to do about the data that I'm processing. > I work in the finance area so effectively my API works not with > numbers - rather with money. > And all the money in the tables is kept as packed decimals. > So what I did - I read packed decimals and immediately convert them to > long long before I make some arithmetics with them. > Result is still the same - 2 times slower than the C version... > > I'll now go and experiment with the benchmarking program of yours to > see what consumes time. If conversion of packed to int (or long) is > most ti,e consuming, then probably I'm digging in the wrong > direction..... > > > > On Mon, Feb 16, 2015 at 9:38 PM, Mark S Waterbury > <[email protected]> wrote: >> Jevgeni: >> >> I can pretty much guarantee that using 64-bit integers will always win "big >> time" over using packed decimal, even in ILE C/400, from a performance >> standpoint. All the more so, with ILE C++. >> >> Mark >> >>> On 2/16/2015 2:31 PM, Jevgeni Astanovski wrote: >>> >>> Mark, frankly speaking packed decimal was my suspect since I saw the >>> difference. I saw the difference - it was intuitively clear that the >>> implementations of packed decimal is fundamentally different in C and C++ >>> (however unclear why). What I'll do tomorrow, I'll write my own trivial >>> benchmark using decimal arithmetics. >>> Hopefully I shall see the difference. >>> The program uses decimal (15,0), decimal (15,9) and decimal (11,7) - It >>> seems that they all fit into 8 byte int. >>> I'll then see which is better - staying on C and decimals or switch to C++ >>> and integers... >>> >>> Thanks, >>> Jevgeni. >>> On Feb 16, 2015 8:29 PM, "Mark S Waterbury" >>> <[email protected]> >>> wrote: >>> >>>> Jevjeni: >>>> >>>> I just noticed near the bottom of your post, where you said: >>>> >>>> Program makes a lot of calculations with packed decimal. >>>> >>>> There is a big difference in the way ILE C implements support for "packed >>>> decimal" as a "native" data type -- versus the way it is "supported" in >>>> ILE >>>> C++ -- in ILE C, the compiler directly genrerates in-line code (in WCode >>>> / >>>> NMI) to work on packed decimal data. In the ILE C++ compiler, support >>>> for >>>> "packed decimal" is through a C++ library called "BCD" -- there are a lot >>>> of macros and such defined in the QSYSINC/H include member named BCD ... >>>> if >>>> you take a peek at that member, I think you will see that this uses >>>> "operator overloading" in C++ to trick the compiler into calling the >>>> desired library functions when operations are performed on "packed >>>> decimal" >>>> data. >>>> >>>> This difference could easily account for the big differences you are >>>> seeing. >>>> >>>> And then, you said: >>>> >>>> ... is there anything that can be done about it? >>>> >>>> In C++, you could look into converting the packed decimal data into >>>> 64-bit >>>> integers, and then performing any calculations using those long integers. >>>> This would be much faster than using packed decimal arithmetic, then >>>> convert back to packed decimal format, if needed. Or, just stick with >>>> ILE >>>> C/400 for those programs that require doing a lot of packed decimal >>>> arithmetic operations. >>>> >>>> Hope that helps, >>>> >>>> Mark S. Waterbury >>>> >> -- >> This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) >> mailing list >> To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected] >> To subscribe, unsubscribe, or change list options, >> visit: http://lists.midrange.com/mailman/listinfo/c400-l >> or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected] >> Before posting, please take a moment to review the archives >> at http://archive.midrange.com/c400-l. >> -- Need secure FTP? Download your native sFTP solution here: www.arpeggiosoftware.com -- This is the Bare Metal Programming IBM i (AS/400 and iSeries) (C400-L) mailing list To post a message email: C400-L-Zwy7GipZuJhWk0Htik3J/[email protected] To subscribe, unsubscribe, or change list options, visit: http://lists.midrange.com/mailman/listinfo/c400-l or email: C400-L-request-Zwy7GipZuJhWk0Htik3J/[email protected] Before posting, please take a moment to review the archives at http://archive.midrange.com/c400-l.