× The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.



This is a strange way to waste human "processing time" but for the fun of
it I made a 1,000,000 loop on both instructions and the processing time was
exactly the same even though it varied slightly each of the 20 times I ran
the program.

The tested instructions were:

If *in01;

If not *in01;

If a = ‘1’;

If a <> ‘1’;



The other day I tested for building large data (about 400K) from 10.000
trunks of data (xmldata):

xmlString += xmlData;

xmlString += %trimr(xmlData);

and it came out with the same result, %trimr() bif dosn’t really affect
performance however my xmlNode() support in powerEXT ran about 25-30 %
faster by populating xml in allocated storage than the above concatenation
even if I included special characters in the xmlData that was automatically
encoded (like ‘<’ to ‘&lt;’).

Now the xmlNode() procedure calls the xmlEncode() procedure and then the
echo() procedure that calls the CGIDEV2 wrtNoSection() procedure that calls
the nonpublic stdout() procedure that places the data in the allocated
storage. All in all about 900 RPGLE statements!

That the above is actually faster than concatenation of fields points in
the direction that concatenation of large fields is a very expensive
instruction to use if you use them frequently.



The worst case scenario was if I did this that actually concatenates a 6MB
varying field (xmlString) with the result from encodeXML – a 64K varying
field:

xmlString += encodeXML(xmldata);

This nearly tripled the processing time!

This has of course only relevance for us who handles large string of data
in buffers such as HTML, XML and/or JSON. But there it has a real
performance meaning by shifting from large RPGLE fields/CLOB or BLOB to
allocated storage.



xmlString += xmlData;

becomes a very expensive instruction as the data in the result field grows
in size:

1000 concats = 0.011024

2000 concats = 0.060848

5000 concats = 0.348928

10000 concats = 1.350744

The example is also a good example that it isn’t the instruction (+=) in
itself that takes the processing time it is the amount of data it has to
handle that takes the processing time and supersizing fields is a
performance buttleneck!


On Sat, Oct 5, 2013 at 1:47 AM, Jon Paris <jon.paris@xxxxxxxxxxxxxx> wrote:

Well I can't find any documentation on the Power 7 instruction set - but
there is documentation on the older Power 2 and 4 hardware which (as I
suggested earlier) appear to have + and <> branch options.

Not that it matters but RPGIII generates pretty much the same instructions
for both scenario. We can't look at RPG IV - just a hardware dump of the
instruction stream which I could not interpret and have no desire to learn
to do so since I could do little with that knowledge.

Here's what is generated for the RPG code shown:

CMPBLA(B) *IN01,C'1' /NEQ(.ELF0001) <=== *IN01 IFEQ *ON

CMPBLA(B) *IN01,C'1' /EQ( .ELF0002) <=== *IN01 IFNE *ON

CMPBLA(B) *IN01,C'0' /NEQ(.ELF0003) <=== *IN01 IFEQ *OFF

Note that even though we can see the MI we can't see the machine
instructions (although here are people on this list who could) But this is
what was generated for the S/38, and the AS/400 and the i5, and ... all the
way up to today's Power 7 - which is what I used. Yet each of those had
different hardware so the instruction set (as a minimum between CICS and
RISC and Power) was different.

At the end of the day optimizing at this level is futile because one tiny
little hardware or microcode change and all bets are off.



On 2013-10-04, at 6:58 PM, Glenn Gundermann <ggundermann@xxxxxx> wrote:

Hi Alan,

I appreciate "I think" but I was looking for more of a definitive answer.

Perhaps the "if not" is just a different instruction as "if" by itself.

Is this similar to asking: does "if a = b" take the same number of
instructions as "if a <> b"?

Just wondering.

Thanks,

Glenn

-----Original Message-----
From: Alan Campin <alan0307d@xxxxxxxxx>
Sender: rpg400-l-bounces@xxxxxxxxxxxx
Date: Fri, 4 Oct 2013 16:38:02
To: RPG programming on the IBM i (AS/400 and iSeries)<
rpg400-l@xxxxxxxxxxxx>
Reply-To: "RPG programming on the IBM i \(AS/400 and iSeries\)" <
rpg400-l@xxxxxxxxxxxx>
Subject: Re: If boolean vs. If not boolean

If you mean machine instructions, the second would generate more to
reverse
the value of logical true or false I would think.

Why would it matter? A couple of nanoseconds.




On Fri, Oct 4, 2013 at 3:25 PM, Glenn Gundermann <ggundermann@xxxxxx>
wrote:

Hi gurus,

Forgive the trivialness of this question but I am wondering if you smart
folks can answer this.

Compare these two statements:

If booleanVar;
If not booleanVar;

Do both of these take the exact same number of internal instructions for
the test or does the second statement take an extra step?

Thanks.

Glenn Gundermann


--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.


--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.

--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.


Jon Paris

www.partner400.com
www.SystemiDeveloper.com




--
This is the RPG programming on the IBM i (AS/400 and iSeries) (RPG400-L)
mailing list
To post a message email: RPG400-L@xxxxxxxxxxxx
To subscribe, unsubscribe, or change list options,
visit: http://lists.midrange.com/mailman/listinfo/rpg400-l
or email: RPG400-L-request@xxxxxxxxxxxx
Before posting, please take a moment to review the archives
at http://archive.midrange.com/rpg400-l.





As an Amazon Associate we earn from qualifying purchases.

This thread ...

Follow-Ups:
Replies:

Follow On AppleNews
Return to Archive home page | Return to MIDRANGE.COM home page

This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact [javascript protected email address].

Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.