There may be a hint to the reason for the jump in the explanation of MVCLE, programming note 3.
"The function of not processing more than approximately 4K bytes of either operand is intended to permit software polling of a flag that may be set by a program on another CPU during long operations." If a similar process happens with MVCL at the 2K boundary, that could be the explanation. I'm not a hardware guy, so just guessing. Chris Blaicher Technical Architect Precisely.com -----Original Message----- From: IBM Mainframe Assembler List [mailto:[email protected]] On Behalf Of Christopher Y. Blaicher Sent: Tuesday, October 20, 2020 2:47 PM To: [email protected] Subject: Re: Conditional MVCL macro? This message originated Externally. Use proper judgement and caution with attachments, links, or responses. I just re-ran a test on our z15 machine and got interesting numbers. The $MVC was reasonably linear from start to finish. The MVCL has a big jump from 2K to 4K, but was also reasonably linear outside of that jump. It never caught up to the $MVC implementation. TEST TYPE = BASE CODE CPU TIME USED= 0.003873 TEST TYPE = 1K 4 MVC CPU TIME USED= 0.171274 TEST TYPE = 1K $MVC CPU TIME USED= 0.183642 TEST TYPE = 1K MVCL CPU TIME USED= 0.345227 TEST TYPE = 2K $MVC CPU TIME USED= 0.357314 TEST TYPE = 2K MVCL CPU TIME USED= 0.509385 TEST TYPE = 4K $MVC CPU TIME USED= 0.704173 TEST TYPE = 4K MVCL CPU TIME USED= 2.790247 TEST TYPE = 8K $MVC CPU TIME USED= 1.426892 TEST TYPE = 8K MVCL CPU TIME USED= 5.480536 TEST TYPE = 32K $MVC CPU TIME USED= 5.835773 TEST TYPE = 32K MVCL CPU TIME USED= 21.734112 TEST TYPE = 64K $MVC CPU TIME USED= 12.278130 TEST TYPE = 64K MVCL CPU TIME USED= 43.380435 TEST TYPE = 128K $MVC CPU TIME USED= 54.570900 TEST TYPE = 128K MVCL CPU TIME USED= 86.739562 All the iterations used this basic set of instructions. * * TEST 1K $MVC * SPACE , L R9,REPEATCOUNT DO IT 100,000 TIMES TIMEUSED STORADR=STARTIME,CPU=TOD,LINKAGE=SYSTEM LOOP1A DS 0H L R3,POOLADDR GET FROM ADDRESS L R4,TOADDR GET TO ADDR L R5,=A(1024) MOVE 1K BYTES $MVC (R4),(R3),(R5) MOVE IT AHI R3,1024 AHI R4,1024 BCT R9,LOOP1A LOOP THE NEEDED NUMBER OF TIMES TIMEUSED STORADR=ENDTIME,CPU=TOD,LINKAGE=SYSTEM SPACE 3 LA R1,=CL12'1K $MVC' BAL R14,TIMEOUT * * TEST 1K MVCL * SPACE , L R9,REPEATCOUNT DO IT 100,000 TIMES TIMEUSED STORADR=STARTIME,CPU=TOD,LINKAGE=SYSTEM LOOP2 DS 0H L R2,POOLADDR GET FROM ADDRESS L R3,=F'1024' L R4,TOADDR GET TO ADDR L R5,=F'1024' MVCL R4,R2 MOVE IT BCT R9,LOOP2 LOOP THE NEEDED NUMBER OF TIMES TIMEUSED STORADR=ENDTIME,CPU=TOD,LINKAGE=SYSTEM SPACE 3 LA R1,=CL12'1K MVCL' BAL R14,TIMEOUT The REPEATCOUNT value is 10,000,000 Both POOLADDR and TOADDR areas are 256K in size, so they both should be on page boundaries. Chris Blaicher Technical Architect Precisely.com -----Original Message----- From: IBM Mainframe Assembler List [mailto:[email protected]] On Behalf Of Charles Mills Sent: Tuesday, October 20, 2020 1:57 PM To: [email protected] Subject: Re: Conditional MVCL macro? This message originated Externally. Use proper judgement and caution with attachments, links, or responses. Right. I should have said "an interruptibility that is visible to the surrounding assembler instructions via the CC." Charles -----Original Message----- From: IBM Mainframe Assembler List [mailto:[email protected]] On Behalf Of Seymour J Metz Sent: Tuesday, October 20, 2020 10:52 AM To: [email protected] Subject: Re: Conditional MVCL macro? MVCL is, and always has been, interruptible.
