HomeUser Control Panel (unavailable in archive)ForumsTutorialsArt GalleryResourcesMaps

maxinstances and optimization

08-28-2007, 04:56 PM#1
Vexorian
So, the 8191 limit is way too small, but it may also be too big sometimes, I still doubt having plenty of arrays is a big issue, but there is no reason to have so much arrays, is there? Some structs typically have very few required instances, for example data for an spell would hardly need more than 50 instances.

This is fixable by adding a maxinstances keyword (or maybe a better sounding syntax, open for suggestions)

Like


Collapse JASS:
struct sss maxinstances 100
    integer a
    real b
endstruct

struct ttt maxinstances 8000
    integer per
    real timeelapsed
endstruct

It is plausible for the compiler to generate code that makes both structs use the same memory space, since 8000+100 <= 8191...
08-28-2007, 05:58 PM#2
NightBreeze
I kinda like the idea of not having to worry about how many instances a struct must support. That would be the 'reason' for having so many arrays. However, if this would produce notable benefits it's worth considering.

But my question is: Do you intend it to be mandatory?
Edit: second question: What happens if you create more instances than the given amount? Will the code automatically revert to the old system or will it error?

p.s.: maxinstances sounds ok
08-28-2007, 07:51 PM#3
MaD[Lion]
hmm
sounds nice
also will spare some global vars space too
08-28-2007, 07:58 PM#4
Vexorian
Quote:
Do you intend it to be mandatory?
nah.

Quote:
second question: What happens if you create more instances than the given amount? Will the code automatically revert to the old system or will it error?
allocate() will return 0, so in order to take advantage of the optimization one will need to know what he is doing.
08-28-2007, 08:11 PM#5
Anitarf
Well, I have some considerations.

The algorithm that determines which structs to team together would have to be pretty "smart". It would need to consider which structs have the most compatible members and also which structs have compatible values for maxinstances. Then there's the problem of naming the members, since it could no longer be neither a nor per. Wc3 doesn't care what variables are named like but for debugging purposes, it's useful if the jass code that gets generated by the preprocessor bears some resemblance to the original vJass code, and since the syntax gets greatly transformed the variable names are important in deciphering on which line exactly does the syntax error occur.

I don't abuse structs too much anyway so this does not concern me, but I can see how this would be potentialy useful to grim001... that is, if you can somehow prove with benchmarks that having too many arrays actualy affects performance in a way that justifies the extra overhead (however small) in the struct code.
08-28-2007, 08:14 PM#6
Toadcop
well ok =)
but !
maxinstances is too looong =\
suggestions:

struct xxx
or
struct mx xxx

=) it's MUCH better...

Quote:
that is, if you can somehow prove with benchmarks that having too many arrays actualy affects performance in a way that justifies the extra overhead (however small) in the struct code.
well the presense of arrays vars doesnt matter.
i thinks there is no great difference. cause any array slot i allocted dynamicaly. so if you will have 1000 slots i 1 array or 10 with 100 does not matter (well maybe a bit). but ok test it ^^ any way it will nothing change for me.
!!! btw hmmm =\ i had ~1K (or more) inited global vars and it does not affects performance (maybe a extreme little bit ^^) so i could not mention this by setting a variable 1K times. the results were the same.

but anyway test it.
08-28-2007, 08:16 PM#7
PipeDream
Space for arrays is only allocated up to the last instance you assigned to the nearest power of two[1]. So no space savings, but you do load the fixed size global hash table less.. but that will be offset by the rebasing.

I encourage you to not bother unless you're doing it because the filling the bag problem is interesting to you.
08-28-2007, 08:18 PM#8
cohadar
Quote:
Originally Posted by Vexorian
So, the 8191 limit is way too small, but it may also be too big sometimes, I still doubt having plenty of arrays is a big issue, but there is no reason to have so much arrays, is there? Some structs typically have very few required instances, for example data for an spell would hardly need more than 50 instances.

Well if someone would ask me to describe this in one word I would definitely say - USELESS

Besides in half the time it would take you to make this you could make a demo map with say 1000 global arrays
(simply make c++ program to generate that repetitive JASS code for you, that is what I did)
Hidden information:

Collapse JASS:
//==============================================================================
//  TORMENT - ultimate leak resistance test by Cohadar
//
//  PURPOUSE:
//  	* This baby will create 1MB (megabyte) of handles
//        and keep references to all of them.
//
//      * It does that by creating locations and storing them in arrays, 
//        this will require around 300MB of RAM
//
//  HOW TO IMPORT:
//       * Just create a trigger named torment
//         convert it to text and replace the whole trigger text with this one
//       * type -torment in game to start the test.
//==============================================================================

globals
    constant integer TEST_SIZE = 4096 // 8192 causes op limit break
endglobals

//! textmacro TEST takes NUMBER
globals
    location array L$NUMBER$
endglobals 

function FillL$NUMBER$ takes nothing returns nothing
    local integer i = 0
    loop
        exitwhen i >= TEST_SIZE
        set L$NUMBER$[i] = GetRandomLocInRect(GetPlayableMapRect())
        set i = i + 1
    endloop
    call BJDebugMsg("Last Handle Index: " + I2S(ABC_H2I(L$NUMBER$[TEST_SIZE-1])-0x100000))
endfunction

//! endtextmacro

//! runtextmacro TEST("0")
//! runtextmacro TEST("1")
//! runtextmacro TEST("2")
//! runtextmacro TEST("3")
//! runtextmacro TEST("4")
//! runtextmacro TEST("5")
//! runtextmacro TEST("6")
//! runtextmacro TEST("7")
//! runtextmacro TEST("8")
//! runtextmacro TEST("9")

//! runtextmacro TEST("10")
//! runtextmacro TEST("11")
//! runtextmacro TEST("12")
//! runtextmacro TEST("13")
//! runtextmacro TEST("14")
//! runtextmacro TEST("15")
//! runtextmacro TEST("16")
//! runtextmacro TEST("17")
//! runtextmacro TEST("18")
//! runtextmacro TEST("19")

//! runtextmacro TEST("20")
//! runtextmacro TEST("21")
//! runtextmacro TEST("22")
//! runtextmacro TEST("23")
//! runtextmacro TEST("24")
//! runtextmacro TEST("25")
//! runtextmacro TEST("26")
//! runtextmacro TEST("27")
//! runtextmacro TEST("28")
//! runtextmacro TEST("29")

//! runtextmacro TEST("30")
//! runtextmacro TEST("31")
//! runtextmacro TEST("32")
//! runtextmacro TEST("33")
//! runtextmacro TEST("34")
//! runtextmacro TEST("35")
//! runtextmacro TEST("36")
//! runtextmacro TEST("37")
//! runtextmacro TEST("38")
//! runtextmacro TEST("39")

//! runtextmacro TEST("40")
//! runtextmacro TEST("41")
//! runtextmacro TEST("42")
//! runtextmacro TEST("43")
//! runtextmacro TEST("44")
//! runtextmacro TEST("45")
//! runtextmacro TEST("46")
//! runtextmacro TEST("47")
//! runtextmacro TEST("48")
//! runtextmacro TEST("49")

//! runtextmacro TEST("50")
//! runtextmacro TEST("51")
//! runtextmacro TEST("52")
//! runtextmacro TEST("53")
//! runtextmacro TEST("54")
//! runtextmacro TEST("55")
//! runtextmacro TEST("56")
//! runtextmacro TEST("57")
//! runtextmacro TEST("58")
//! runtextmacro TEST("59")

//! runtextmacro TEST("60")
//! runtextmacro TEST("61")
//! runtextmacro TEST("62")
//! runtextmacro TEST("63")
//! runtextmacro TEST("64")
//! runtextmacro TEST("65")
//! runtextmacro TEST("66")
//! runtextmacro TEST("67")
//! runtextmacro TEST("68")
//! runtextmacro TEST("69")

//! runtextmacro TEST("70")
//! runtextmacro TEST("71")
//! runtextmacro TEST("72")
//! runtextmacro TEST("73")
//! runtextmacro TEST("74")
//! runtextmacro TEST("75")
//! runtextmacro TEST("76")
//! runtextmacro TEST("77")
//! runtextmacro TEST("78")
//! runtextmacro TEST("79")

//! runtextmacro TEST("80")
//! runtextmacro TEST("81")
//! runtextmacro TEST("82")
//! runtextmacro TEST("83")
//! runtextmacro TEST("84")
//! runtextmacro TEST("85")
//! runtextmacro TEST("86")
//! runtextmacro TEST("87")
//! runtextmacro TEST("88")
//! runtextmacro TEST("89")

//! runtextmacro TEST("90")
//! runtextmacro TEST("91")
//! runtextmacro TEST("92")
//! runtextmacro TEST("93")
//! runtextmacro TEST("94")
//! runtextmacro TEST("95")
//! runtextmacro TEST("96")
//! runtextmacro TEST("97")
//! runtextmacro TEST("98")
//! runtextmacro TEST("99")

//===========================//

//! runtextmacro TEST("100")
//! runtextmacro TEST("101")
//! runtextmacro TEST("102")
//! runtextmacro TEST("103")
//! runtextmacro TEST("104")
//! runtextmacro TEST("105")
//! runtextmacro TEST("106")
//! runtextmacro TEST("107")
//! runtextmacro TEST("108")
//! runtextmacro TEST("109")

//! runtextmacro TEST("110")
//! runtextmacro TEST("111")
//! runtextmacro TEST("112")
//! runtextmacro TEST("113")
//! runtextmacro TEST("114")
//! runtextmacro TEST("115")
//! runtextmacro TEST("116")
//! runtextmacro TEST("117")
//! runtextmacro TEST("118")
//! runtextmacro TEST("119")

//! runtextmacro TEST("120")
//! runtextmacro TEST("121")
//! runtextmacro TEST("122")
//! runtextmacro TEST("123")
//! runtextmacro TEST("124")
//! runtextmacro TEST("125")
//! runtextmacro TEST("126")
//! runtextmacro TEST("127")
//! runtextmacro TEST("128")
//! runtextmacro TEST("129")

//! runtextmacro TEST("130")
//! runtextmacro TEST("131")
//! runtextmacro TEST("132")
//! runtextmacro TEST("133")
//! runtextmacro TEST("134")
//! runtextmacro TEST("135")
//! runtextmacro TEST("136")
//! runtextmacro TEST("137")
//! runtextmacro TEST("138")
//! runtextmacro TEST("139")

//! runtextmacro TEST("140")
//! runtextmacro TEST("141")
//! runtextmacro TEST("142")
//! runtextmacro TEST("143")
//! runtextmacro TEST("144")
//! runtextmacro TEST("145")
//! runtextmacro TEST("146")
//! runtextmacro TEST("147")
//! runtextmacro TEST("148")
//! runtextmacro TEST("149")

//! runtextmacro TEST("150")
//! runtextmacro TEST("151")
//! runtextmacro TEST("152")
//! runtextmacro TEST("153")
//! runtextmacro TEST("154")
//! runtextmacro TEST("155")
//! runtextmacro TEST("156")
//! runtextmacro TEST("157")
//! runtextmacro TEST("158")
//! runtextmacro TEST("159")

//! runtextmacro TEST("160")
//! runtextmacro TEST("161")
//! runtextmacro TEST("162")
//! runtextmacro TEST("163")
//! runtextmacro TEST("164")
//! runtextmacro TEST("165")
//! runtextmacro TEST("166")
//! runtextmacro TEST("167")
//! runtextmacro TEST("168")
//! runtextmacro TEST("169")

//! runtextmacro TEST("170")
//! runtextmacro TEST("171")
//! runtextmacro TEST("172")
//! runtextmacro TEST("173")
//! runtextmacro TEST("174")
//! runtextmacro TEST("175")
//! runtextmacro TEST("176")
//! runtextmacro TEST("177")
//! runtextmacro TEST("178")
//! runtextmacro TEST("179")

//! runtextmacro TEST("180")
//! runtextmacro TEST("181")
//! runtextmacro TEST("182")
//! runtextmacro TEST("183")
//! runtextmacro TEST("184")
//! runtextmacro TEST("185")
//! runtextmacro TEST("186")
//! runtextmacro TEST("187")
//! runtextmacro TEST("188")
//! runtextmacro TEST("189")

//! runtextmacro TEST("190")
//! runtextmacro TEST("191")
//! runtextmacro TEST("192")
//! runtextmacro TEST("193")
//! runtextmacro TEST("194")
//! runtextmacro TEST("195")
//! runtextmacro TEST("196")
//! runtextmacro TEST("197")
//! runtextmacro TEST("198")
//! runtextmacro TEST("199")

//===========================//

//! runtextmacro TEST("200")
//! runtextmacro TEST("201")
//! runtextmacro TEST("202")
//! runtextmacro TEST("203")
//! runtextmacro TEST("204")
//! runtextmacro TEST("205")
//! runtextmacro TEST("206")
//! runtextmacro TEST("207")
//! runtextmacro TEST("208")
//! runtextmacro TEST("209")

//! runtextmacro TEST("210")
//! runtextmacro TEST("211")
//! runtextmacro TEST("212")
//! runtextmacro TEST("213")
//! runtextmacro TEST("214")
//! runtextmacro TEST("215")
//! runtextmacro TEST("216")
//! runtextmacro TEST("217")
//! runtextmacro TEST("218")
//! runtextmacro TEST("219")

//! runtextmacro TEST("220")
//! runtextmacro TEST("221")
//! runtextmacro TEST("222")
//! runtextmacro TEST("223")
//! runtextmacro TEST("224")
//! runtextmacro TEST("225")
//! runtextmacro TEST("226")
//! runtextmacro TEST("227")
//! runtextmacro TEST("228")
//! runtextmacro TEST("229")

//! runtextmacro TEST("230")
//! runtextmacro TEST("231")
//! runtextmacro TEST("232")
//! runtextmacro TEST("233")
//! runtextmacro TEST("234")
//! runtextmacro TEST("235")
//! runtextmacro TEST("236")
//! runtextmacro TEST("237")
//! runtextmacro TEST("238")
//! runtextmacro TEST("239")

//! runtextmacro TEST("240")
//! runtextmacro TEST("241")
//! runtextmacro TEST("242")
//! runtextmacro TEST("243")
//! runtextmacro TEST("244")
//! runtextmacro TEST("245")
//! runtextmacro TEST("246")
//! runtextmacro TEST("247")
//! runtextmacro TEST("248")
//! runtextmacro TEST("249")

//! runtextmacro TEST("250")
//! runtextmacro TEST("251")
//! runtextmacro TEST("252")
//! runtextmacro TEST("253")
//! runtextmacro TEST("254")
//! runtextmacro TEST("255")
//===========================//

function Trig_Handles_Test_Actions takes nothing returns nothing
    local integer i = 0
    
    loop
        exitwhen i>=256
        
        call ExecuteFunc("FillL"+I2S(i))
        call TriggerSleepAction(0.5)
        
        set i = i + 1
    endloop
endfunction

//===========================================================================
function InitTrig_torment takes nothing returns nothing
    set gg_trg_torment = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( gg_trg_torment, Player(0), "-torment", true )
    call TriggerAddAction( gg_trg_torment, function Trig_Handles_Test_Actions )
endfunction


Make it a library, add chat event -gtest for example
that will start a couple of functions that access (both read and write) those arrays (again c++ generated code but with random array numbers and indexes)

and distribute it to us.

We put it in our maps, start game on bnet and type -gtest
if that about global array number is true a bounch of people will desync that moment, if not hurray we know we don't need to worry.
08-28-2007, 09:05 PM#9
grim001
Sounds pointless to me, number of arrays declared doesn't mean anything.
08-28-2007, 09:05 PM#10
Toadcop
cohadar u create 4096 location every time O_o ofc this may desync...
08-28-2007, 09:06 PM#11
cohadar
Quote:
Originally Posted by Litany
It would make a solid addition. Those wasted indices are one the reasons we aren't using vJass for ToB O.

Lolz , indexes that are never used don't waste memory.


Anyways I made that test I was talking about.

WARNING, very very long trigger.
Hidden information:
Collapse JASS:
//==============================================================================
//  GTest - ultimate global test by Cohadar
//
//  PURPOUSE:
//      * To check some rumours
//
//  HOW TO IMPORT:
//       * Just create a trigger named gtest
//         convert it to text and replace the whole trigger text with this one
//       * type -gtest in game to start the test.
//==============================================================================

scope gtest

globals
    integer array gtest0
    integer array gtest1
    integer array gtest2
    integer array gtest3
    integer array gtest4
    integer array gtest5
    integer array gtest6
    integer array gtest7
    integer array gtest8
    integer array gtest9
    integer array gtest10
    integer array gtest11
    integer array gtest12
    integer array gtest13
    integer array gtest14
    integer array gtest15
    integer array gtest16
    integer array gtest17
    integer array gtest18
    integer array gtest19
    integer array gtest20
    integer array gtest21
    integer array gtest22
    integer array gtest23
    integer array gtest24
    integer array gtest25
    integer array gtest26
    integer array gtest27
    integer array gtest28
    integer array gtest29
    integer array gtest30
    integer array gtest31
    integer array gtest32
    integer array gtest33
    integer array gtest34
    integer array gtest35
    integer array gtest36
    integer array gtest37
    integer array gtest38
    integer array gtest39
    integer array gtest40
    integer array gtest41
    integer array gtest42
    integer array gtest43
    integer array gtest44
    integer array gtest45
    integer array gtest46
    integer array gtest47
    integer array gtest48
    integer array gtest49
    integer array gtest50
    integer array gtest51
    integer array gtest52
    integer array gtest53
    integer array gtest54
    integer array gtest55
    integer array gtest56
    integer array gtest57
    integer array gtest58
    integer array gtest59
    integer array gtest60
    integer array gtest61
    integer array gtest62
    integer array gtest63
    integer array gtest64
    integer array gtest65
    integer array gtest66
    integer array gtest67
    integer array gtest68
    integer array gtest69
    integer array gtest70
    integer array gtest71
    integer array gtest72
    integer array gtest73
    integer array gtest74
    integer array gtest75
    integer array gtest76
    integer array gtest77
    integer array gtest78
    integer array gtest79
    integer array gtest80
    integer array gtest81
    integer array gtest82
    integer array gtest83
    integer array gtest84
    integer array gtest85
    integer array gtest86
    integer array gtest87
    integer array gtest88
    integer array gtest89
    integer array gtest90
    integer array gtest91
    integer array gtest92
    integer array gtest93
    integer array gtest94
    integer array gtest95
    integer array gtest96
    integer array gtest97
    integer array gtest98
    integer array gtest99
    integer array gtest100
    integer array gtest101
    integer array gtest102
    integer array gtest103
    integer array gtest104
    integer array gtest105
    integer array gtest106
    integer array gtest107
    integer array gtest108
    integer array gtest109
    integer array gtest110
    integer array gtest111
    integer array gtest112
    integer array gtest113
    integer array gtest114
    integer array gtest115
    integer array gtest116
    integer array gtest117
    integer array gtest118
    integer array gtest119
    integer array gtest120
    integer array gtest121
    integer array gtest122
    integer array gtest123
    integer array gtest124
    integer array gtest125
    integer array gtest126
    integer array gtest127
    integer array gtest128
    integer array gtest129
    integer array gtest130
    integer array gtest131
    integer array gtest132
    integer array gtest133
    integer array gtest134
    integer array gtest135
    integer array gtest136
    integer array gtest137
    integer array gtest138
    integer array gtest139
    integer array gtest140
    integer array gtest141
    integer array gtest142
    integer array gtest143
    integer array gtest144
    integer array gtest145
    integer array gtest146
    integer array gtest147
    integer array gtest148
    integer array gtest149
    integer array gtest150
    integer array gtest151
    integer array gtest152
    integer array gtest153
    integer array gtest154
    integer array gtest155
    integer array gtest156
    integer array gtest157
    integer array gtest158
    integer array gtest159
    integer array gtest160
    integer array gtest161
    integer array gtest162
    integer array gtest163
    integer array gtest164
    integer array gtest165
    integer array gtest166
    integer array gtest167
    integer array gtest168
    integer array gtest169
    integer array gtest170
    integer array gtest171
    integer array gtest172
    integer array gtest173
    integer array gtest174
    integer array gtest175
    integer array gtest176
    integer array gtest177
    integer array gtest178
    integer array gtest179
    integer array gtest180
    integer array gtest181
    integer array gtest182
    integer array gtest183
    integer array gtest184
    integer array gtest185
    integer array gtest186
    integer array gtest187
    integer array gtest188
    integer array gtest189
    integer array gtest190
    integer array gtest191
    integer array gtest192
    integer array gtest193
    integer array gtest194
    integer array gtest195
    integer array gtest196
    integer array gtest197
    integer array gtest198
    integer array gtest199
    integer array gtest200
    integer array gtest201
    integer array gtest202
    integer array gtest203
    integer array gtest204
    integer array gtest205
    integer array gtest206
    integer array gtest207
    integer array gtest208
    integer array gtest209
    integer array gtest210
    integer array gtest211
    integer array gtest212
    integer array gtest213
    integer array gtest214
    integer array gtest215
    integer array gtest216
    integer array gtest217
    integer array gtest218
    integer array gtest219
    integer array gtest220
    integer array gtest221
    integer array gtest222
    integer array gtest223
    integer array gtest224
    integer array gtest225
    integer array gtest226
    integer array gtest227
    integer array gtest228
    integer array gtest229
    integer array gtest230
    integer array gtest231
    integer array gtest232
    integer array gtest233
    integer array gtest234
    integer array gtest235
    integer array gtest236
    integer array gtest237
    integer array gtest238
    integer array gtest239
    integer array gtest240
    integer array gtest241
    integer array gtest242
    integer array gtest243
    integer array gtest244
    integer array gtest245
    integer array gtest246
    integer array gtest247
    integer array gtest248
    integer array gtest249
    integer array gtest250
    integer array gtest251
    integer array gtest252
    integer array gtest253
    integer array gtest254
    integer array gtest255
    integer array gtest256
    integer array gtest257
    integer array gtest258
    integer array gtest259
    integer array gtest260
    integer array gtest261
    integer array gtest262
    integer array gtest263
    integer array gtest264
    integer array gtest265
    integer array gtest266
    integer array gtest267
    integer array gtest268
    integer array gtest269
    integer array gtest270
    integer array gtest271
    integer array gtest272
    integer array gtest273
    integer array gtest274
    integer array gtest275
    integer array gtest276
    integer array gtest277
    integer array gtest278
    integer array gtest279
    integer array gtest280
    integer array gtest281
    integer array gtest282
    integer array gtest283
    integer array gtest284
    integer array gtest285
    integer array gtest286
    integer array gtest287
    integer array gtest288
    integer array gtest289
    integer array gtest290
    integer array gtest291
    integer array gtest292
    integer array gtest293
    integer array gtest294
    integer array gtest295
    integer array gtest296
    integer array gtest297
    integer array gtest298
    integer array gtest299
    integer array gtest300
    integer array gtest301
    integer array gtest302
    integer array gtest303
    integer array gtest304
    integer array gtest305
    integer array gtest306
    integer array gtest307
    integer array gtest308
    integer array gtest309
    integer array gtest310
    integer array gtest311
    integer array gtest312
    integer array gtest313
    integer array gtest314
    integer array gtest315
    integer array gtest316
    integer array gtest317
    integer array gtest318
    integer array gtest319
    integer array gtest320
    integer array gtest321
    integer array gtest322
    integer array gtest323
    integer array gtest324
    integer array gtest325
    integer array gtest326
    integer array gtest327
    integer array gtest328
    integer array gtest329
    integer array gtest330
    integer array gtest331
    integer array gtest332
    integer array gtest333
    integer array gtest334
    integer array gtest335
    integer array gtest336
    integer array gtest337
    integer array gtest338
    integer array gtest339
    integer array gtest340
    integer array gtest341
    integer array gtest342
    integer array gtest343
    integer array gtest344
    integer array gtest345
    integer array gtest346
    integer array gtest347
    integer array gtest348
    integer array gtest349
    integer array gtest350
    integer array gtest351
    integer array gtest352
    integer array gtest353
    integer array gtest354
    integer array gtest355
    integer array gtest356
    integer array gtest357
    integer array gtest358
    integer array gtest359
    integer array gtest360
    integer array gtest361
    integer array gtest362
    integer array gtest363
    integer array gtest364
    integer array gtest365
    integer array gtest366
    integer array gtest367
    integer array gtest368
    integer array gtest369
    integer array gtest370
    integer array gtest371
    integer array gtest372
    integer array gtest373
    integer array gtest374
    integer array gtest375
    integer array gtest376
    integer array gtest377
    integer array gtest378
    integer array gtest379
    integer array gtest380
    integer array gtest381
    integer array gtest382
    integer array gtest383
    integer array gtest384
    integer array gtest385
    integer array gtest386
    integer array gtest387
    integer array gtest388
    integer array gtest389
    integer array gtest390
    integer array gtest391
    integer array gtest392
    integer array gtest393
    integer array gtest394
    integer array gtest395
    integer array gtest396
    integer array gtest397
    integer array gtest398
    integer array gtest399
    integer array gtest400
    integer array gtest401
    integer array gtest402
    integer array gtest403
    integer array gtest404
    integer array gtest405
    integer array gtest406
    integer array gtest407
    integer array gtest408
    integer array gtest409
    integer array gtest410
    integer array gtest411
    integer array gtest412
    integer array gtest413
    integer array gtest414
    integer array gtest415
    integer array gtest416
    integer array gtest417
    integer array gtest418
    integer array gtest419
    integer array gtest420
    integer array gtest421
    integer array gtest422
    integer array gtest423
    integer array gtest424
    integer array gtest425
    integer array gtest426
    integer array gtest427
    integer array gtest428
    integer array gtest429
    integer array gtest430
    integer array gtest431
    integer array gtest432
    integer array gtest433
    integer array gtest434
    integer array gtest435
    integer array gtest436
    integer array gtest437
    integer array gtest438
    integer array gtest439
    integer array gtest440
    integer array gtest441
    integer array gtest442
    integer array gtest443
    integer array gtest444
    integer array gtest445
    integer array gtest446
    integer array gtest447
    integer array gtest448
    integer array gtest449
    integer array gtest450
    integer array gtest451
    integer array gtest452
    integer array gtest453
    integer array gtest454
    integer array gtest455
    integer array gtest456
    integer array gtest457
    integer array gtest458
    integer array gtest459
    integer array gtest460
    integer array gtest461
    integer array gtest462
    integer array gtest463
    integer array gtest464
    integer array gtest465
    integer array gtest466
    integer array gtest467
    integer array gtest468
    integer array gtest469
    integer array gtest470
    integer array gtest471
    integer array gtest472
    integer array gtest473
    integer array gtest474
    integer array gtest475
    integer array gtest476
    integer array gtest477
    integer array gtest478
    integer array gtest479
    integer array gtest480
    integer array gtest481
    integer array gtest482
    integer array gtest483
    integer array gtest484
    integer array gtest485
    integer array gtest486
    integer array gtest487
    integer array gtest488
    integer array gtest489
    integer array gtest490
    integer array gtest491
    integer array gtest492
    integer array gtest493
    integer array gtest494
    integer array gtest495
    integer array gtest496
    integer array gtest497
    integer array gtest498
    integer array gtest499
    integer array gtest500
    integer array gtest501
    integer array gtest502
    integer array gtest503
    integer array gtest504
    integer array gtest505
    integer array gtest506
    integer array gtest507
    integer array gtest508
    integer array gtest509
    integer array gtest510
    integer array gtest511
    integer array gtest512
    integer array gtest513
    integer array gtest514
    integer array gtest515
    integer array gtest516
    integer array gtest517
    integer array gtest518
    integer array gtest519
    integer array gtest520
    integer array gtest521
    integer array gtest522
    integer array gtest523
    integer array gtest524
    integer array gtest525
    integer array gtest526
    integer array gtest527
    integer array gtest528
    integer array gtest529
    integer array gtest530
    integer array gtest531
    integer array gtest532
    integer array gtest533
    integer array gtest534
    integer array gtest535
    integer array gtest536
    integer array gtest537
    integer array gtest538
    integer array gtest539
    integer array gtest540
    integer array gtest541
    integer array gtest542
    integer array gtest543
    integer array gtest544
    integer array gtest545
    integer array gtest546
    integer array gtest547
    integer array gtest548
    integer array gtest549
    integer array gtest550
    integer array gtest551
    integer array gtest552
    integer array gtest553
    integer array gtest554
    integer array gtest555
    integer array gtest556
    integer array gtest557
    integer array gtest558
    integer array gtest559
    integer array gtest560
    integer array gtest561
    integer array gtest562
    integer array gtest563
    integer array gtest564
    integer array gtest565
    integer array gtest566
    integer array gtest567
    integer array gtest568
    integer array gtest569
    integer array gtest570
    integer array gtest571
    integer array gtest572
    integer array gtest573
    integer array gtest574
    integer array gtest575
    integer array gtest576
    integer array gtest577
    integer array gtest578
    integer array gtest579
    integer array gtest580
    integer array gtest581
    integer array gtest582
    integer array gtest583
    integer array gtest584
    integer array gtest585
    integer array gtest586
    integer array gtest587
    integer array gtest588
    integer array gtest589
    integer array gtest590
    integer array gtest591
    integer array gtest592
    integer array gtest593
    integer array gtest594
    integer array gtest595
    integer array gtest596
    integer array gtest597
    integer array gtest598
    integer array gtest599
    integer array gtest600
    integer array gtest601
    integer array gtest602
    integer array gtest603
    integer array gtest604
    integer array gtest605
    integer array gtest606
    integer array gtest607
    integer array gtest608
    integer array gtest609
    integer array gtest610
    integer array gtest611
    integer array gtest612
    integer array gtest613
    integer array gtest614
    integer array gtest615
    integer array gtest616
    integer array gtest617
    integer array gtest618
    integer array gtest619
    integer array gtest620
    integer array gtest621
    integer array gtest622
    integer array gtest623
    integer array gtest624
    integer array gtest625
    integer array gtest626
    integer array gtest627
    integer array gtest628
    integer array gtest629
    integer array gtest630
    integer array gtest631
    integer array gtest632
    integer array gtest633
    integer array gtest634
    integer array gtest635
    integer array gtest636
    integer array gtest637
    integer array gtest638
    integer array gtest639
    integer array gtest640
    integer array gtest641
    integer array gtest642
    integer array gtest643
    integer array gtest644
    integer array gtest645
    integer array gtest646
    integer array gtest647
    integer array gtest648
    integer array gtest649
    integer array gtest650
    integer array gtest651
    integer array gtest652
    integer array gtest653
    integer array gtest654
    integer array gtest655
    integer array gtest656
    integer array gtest657
    integer array gtest658
    integer array gtest659
    integer array gtest660
    integer array gtest661
    integer array gtest662
    integer array gtest663
    integer array gtest664
    integer array gtest665
    integer array gtest666
    integer array gtest667
    integer array gtest668
    integer array gtest669
    integer array gtest670
    integer array gtest671
    integer array gtest672
    integer array gtest673
    integer array gtest674
    integer array gtest675
    integer array gtest676
    integer array gtest677
    integer array gtest678
    integer array gtest679
    integer array gtest680
    integer array gtest681
    integer array gtest682
    integer array gtest683
    integer array gtest684
    integer array gtest685
    integer array gtest686
    integer array gtest687
    integer array gtest688
    integer array gtest689
    integer array gtest690
    integer array gtest691
    integer array gtest692
    integer array gtest693
    integer array gtest694
    integer array gtest695
    integer array gtest696
    integer array gtest697
    integer array gtest698
    integer array gtest699
    integer array gtest700
    integer array gtest701
    integer array gtest702
    integer array gtest703
    integer array gtest704
    integer array gtest705
    integer array gtest706
    integer array gtest707
    integer array gtest708
    integer array gtest709
    integer array gtest710
    integer array gtest711
    integer array gtest712
    integer array gtest713
    integer array gtest714
    integer array gtest715
    integer array gtest716
    integer array gtest717
    integer array gtest718
    integer array gtest719
    integer array gtest720
    integer array gtest721
    integer array gtest722
    integer array gtest723
    integer array gtest724
    integer array gtest725
    integer array gtest726
    integer array gtest727
    integer array gtest728
    integer array gtest729
    integer array gtest730
    integer array gtest731
    integer array gtest732
    integer array gtest733
    integer array gtest734
    integer array gtest735
    integer array gtest736
    integer array gtest737
    integer array gtest738
    integer array gtest739
    integer array gtest740
    integer array gtest741
    integer array gtest742
    integer array gtest743
    integer array gtest744
    integer array gtest745
    integer array gtest746
    integer array gtest747
    integer array gtest748
    integer array gtest749
    integer array gtest750
    integer array gtest751
    integer array gtest752
    integer array gtest753
    integer array gtest754
    integer array gtest755
    integer array gtest756
    integer array gtest757
    integer array gtest758
    integer array gtest759
    integer array gtest760
    integer array gtest761
    integer array gtest762
    integer array gtest763
    integer array gtest764
    integer array gtest765
    integer array gtest766
    integer array gtest767
    integer array gtest768
    integer array gtest769
    integer array gtest770
    integer array gtest771
    integer array gtest772
    integer array gtest773
    integer array gtest774
    integer array gtest775
    integer array gtest776
    integer array gtest777
    integer array gtest778
    integer array gtest779
    integer array gtest780
    integer array gtest781
    integer array gtest782
    integer array gtest783
    integer array gtest784
    integer array gtest785
    integer array gtest786
    integer array gtest787
    integer array gtest788
    integer array gtest789
    integer array gtest790
    integer array gtest791
    integer array gtest792
    integer array gtest793
    integer array gtest794
    integer array gtest795
    integer array gtest796
    integer array gtest797
    integer array gtest798
    integer array gtest799
    integer array gtest800
    integer array gtest801
    integer array gtest802
    integer array gtest803
    integer array gtest804
    integer array gtest805
    integer array gtest806
    integer array gtest807
    integer array gtest808
    integer array gtest809
    integer array gtest810
    integer array gtest811
    integer array gtest812
    integer array gtest813
    integer array gtest814
    integer array gtest815
    integer array gtest816
    integer array gtest817
    integer array gtest818
    integer array gtest819
    integer array gtest820
    integer array gtest821
    integer array gtest822
    integer array gtest823
    integer array gtest824
    integer array gtest825
    integer array gtest826
    integer array gtest827
    integer array gtest828
    integer array gtest829
    integer array gtest830
    integer array gtest831
    integer array gtest832
    integer array gtest833
    integer array gtest834
    integer array gtest835
    integer array gtest836
    integer array gtest837
    integer array gtest838
    integer array gtest839
    integer array gtest840
    integer array gtest841
    integer array gtest842
    integer array gtest843
    integer array gtest844
    integer array gtest845
    integer array gtest846
    integer array gtest847
    integer array gtest848
    integer array gtest849
    integer array gtest850
    integer array gtest851
    integer array gtest852
    integer array gtest853
    integer array gtest854
    integer array gtest855
    integer array gtest856
    integer array gtest857
    integer array gtest858
    integer array gtest859
    integer array gtest860
    integer array gtest861
    integer array gtest862
    integer array gtest863
    integer array gtest864
    integer array gtest865
    integer array gtest866
    integer array gtest867
    integer array gtest868
    integer array gtest869
    integer array gtest870
    integer array gtest871
    integer array gtest872
    integer array gtest873
    integer array gtest874
    integer array gtest875
    integer array gtest876
    integer array gtest877
    integer array gtest878
    integer array gtest879
    integer array gtest880
    integer array gtest881
    integer array gtest882
    integer array gtest883
    integer array gtest884
    integer array gtest885
    integer array gtest886
    integer array gtest887
    integer array gtest888
    integer array gtest889
    integer array gtest890
    integer array gtest891
    integer array gtest892
    integer array gtest893
    integer array gtest894
    integer array gtest895
    integer array gtest896
    integer array gtest897
    integer array gtest898
    integer array gtest899
    integer array gtest900
    integer array gtest901
    integer array gtest902
    integer array gtest903
    integer array gtest904
    integer array gtest905
    integer array gtest906
    integer array gtest907
    integer array gtest908
    integer array gtest909
    integer array gtest910
    integer array gtest911
    integer array gtest912
    integer array gtest913
    integer array gtest914
    integer array gtest915
    integer array gtest916
    integer array gtest917
    integer array gtest918
    integer array gtest919
    integer array gtest920
    integer array gtest921
    integer array gtest922
    integer array gtest923
    integer array gtest924
    integer array gtest925
    integer array gtest926
    integer array gtest927
    integer array gtest928
    integer array gtest929
    integer array gtest930
    integer array gtest931
    integer array gtest932
    integer array gtest933
    integer array gtest934
    integer array gtest935
    integer array gtest936
    integer array gtest937
    integer array gtest938
    integer array gtest939
    integer array gtest940
    integer array gtest941
    integer array gtest942
    integer array gtest943
    integer array gtest944
    integer array gtest945
    integer array gtest946
    integer array gtest947
    integer array gtest948
    integer array gtest949
    integer array gtest950
    integer array gtest951
    integer array gtest952
    integer array gtest953
    integer array gtest954
    integer array gtest955
    integer array gtest956
    integer array gtest957
    integer array gtest958
    integer array gtest959
    integer array gtest960
    integer array gtest961
    integer array gtest962
    integer array gtest963
    integer array gtest964
    integer array gtest965
    integer array gtest966
    integer array gtest967
    integer array gtest968
    integer array gtest969
    integer array gtest970
    integer array gtest971
    integer array gtest972
    integer array gtest973
    integer array gtest974
    integer array gtest975
    integer array gtest976
    integer array gtest977
    integer array gtest978
    integer array gtest979
    integer array gtest980
    integer array gtest981
    integer array gtest982
    integer array gtest983
    integer array gtest984
    integer array gtest985
    integer array gtest986
    integer array gtest987
    integer array gtest988
    integer array gtest989
    integer array gtest990
    integer array gtest991
    integer array gtest992
    integer array gtest993
    integer array gtest994
    integer array gtest995
    integer array gtest996
    integer array gtest997
    integer array gtest998
    integer array gtest999
endglobals

function FillGlobals takes integer i, integer j returns nothing
    set gtest0[i] = j
    set gtest1[i] = j
    set gtest2[i] = j
    set gtest3[i] = j
    set gtest4[i] = j
    set gtest5[i] = j
    set gtest6[i] = j
    set gtest7[i] = j
    set gtest8[i] = j
    set gtest9[i] = j
    set gtest10[i] = j
    set gtest11[i] = j
    set gtest12[i] = j
    set gtest13[i] = j
    set gtest14[i] = j
    set gtest15[i] = j
    set gtest16[i] = j
    set gtest17[i] = j
    set gtest18[i] = j
    set gtest19[i] = j
    set gtest20[i] = j
    set gtest21[i] = j
    set gtest22[i] = j
    set gtest23[i] = j
    set gtest24[i] = j
    set gtest25[i] = j
    set gtest26[i] = j
    set gtest27[i] = j
    set gtest28[i] = j
    set gtest29[i] = j
    set gtest30[i] = j
    set gtest31[i] = j
    set gtest32[i] = j
    set gtest33[i] = j
    set gtest34[i] = j
    set gtest35[i] = j
    set gtest36[i] = j
    set gtest37[i] = j
    set gtest38[i] = j
    set gtest39[i] = j
    set gtest40[i] = j
    set gtest41[i] = j
    set gtest42[i] = j
    set gtest43[i] = j
    set gtest44[i] = j
    set gtest45[i] = j
    set gtest46[i] = j
    set gtest47[i] = j
    set gtest48[i] = j
    set gtest49[i] = j
    set gtest50[i] = j
    set gtest51[i] = j
    set gtest52[i] = j
    set gtest53[i] = j
    set gtest54[i] = j
    set gtest55[i] = j
    set gtest56[i] = j
    set gtest57[i] = j
    set gtest58[i] = j
    set gtest59[i] = j
    set gtest60[i] = j
    set gtest61[i] = j
    set gtest62[i] = j
    set gtest63[i] = j
    set gtest64[i] = j
    set gtest65[i] = j
    set gtest66[i] = j
    set gtest67[i] = j
    set gtest68[i] = j
    set gtest69[i] = j
    set gtest70[i] = j
    set gtest71[i] = j
    set gtest72[i] = j
    set gtest73[i] = j
    set gtest74[i] = j
    set gtest75[i] = j
    set gtest76[i] = j
    set gtest77[i] = j
    set gtest78[i] = j
    set gtest79[i] = j
    set gtest80[i] = j
    set gtest81[i] = j
    set gtest82[i] = j
    set gtest83[i] = j
    set gtest84[i] = j
    set gtest85[i] = j
    set gtest86[i] = j
    set gtest87[i] = j
    set gtest88[i] = j
    set gtest89[i] = j
    set gtest90[i] = j
    set gtest91[i] = j
    set gtest92[i] = j
    set gtest93[i] = j
    set gtest94[i] = j
    set gtest95[i] = j
    set gtest96[i] = j
    set gtest97[i] = j
    set gtest98[i] = j
    set gtest99[i] = j
    set gtest100[i] = j
    set gtest101[i] = j
    set gtest102[i] = j
    set gtest103[i] = j
    set gtest104[i] = j
    set gtest105[i] = j
    set gtest106[i] = j
    set gtest107[i] = j
    set gtest108[i] = j
    set gtest109[i] = j
    set gtest110[i] = j
    set gtest111[i] = j
    set gtest112[i] = j
    set gtest113[i] = j
    set gtest114[i] = j
    set gtest115[i] = j
    set gtest116[i] = j
    set gtest117[i] = j
    set gtest118[i] = j
    set gtest119[i] = j
    set gtest120[i] = j
    set gtest121[i] = j
    set gtest122[i] = j
    set gtest123[i] = j
    set gtest124[i] = j
    set gtest125[i] = j
    set gtest126[i] = j
    set gtest127[i] = j
    set gtest128[i] = j
    set gtest129[i] = j
    set gtest130[i] = j
    set gtest131[i] = j
    set gtest132[i] = j
    set gtest133[i] = j
    set gtest134[i] = j
    set gtest135[i] = j
    set gtest136[i] = j
    set gtest137[i] = j
    set gtest138[i] = j
    set gtest139[i] = j
    set gtest140[i] = j
    set gtest141[i] = j
    set gtest142[i] = j
    set gtest143[i] = j
    set gtest144[i] = j
    set gtest145[i] = j
    set gtest146[i] = j
    set gtest147[i] = j
    set gtest148[i] = j
    set gtest149[i] = j
    set gtest150[i] = j
    set gtest151[i] = j
    set gtest152[i] = j
    set gtest153[i] = j
    set gtest154[i] = j
    set gtest155[i] = j
    set gtest156[i] = j
    set gtest157[i] = j
    set gtest158[i] = j
    set gtest159[i] = j
    set gtest160[i] = j
    set gtest161[i] = j
    set gtest162[i] = j
    set gtest163[i] = j
    set gtest164[i] = j
    set gtest165[i] = j
    set gtest166[i] = j
    set gtest167[i] = j
    set gtest168[i] = j
    set gtest169[i] = j
    set gtest170[i] = j
    set gtest171[i] = j
    set gtest172[i] = j
    set gtest173[i] = j
    set gtest174[i] = j
    set gtest175[i] = j
    set gtest176[i] = j
    set gtest177[i] = j
    set gtest178[i] = j
    set gtest179[i] = j
    set gtest180[i] = j
    set gtest181[i] = j
    set gtest182[i] = j
    set gtest183[i] = j
    set gtest184[i] = j
    set gtest185[i] = j
    set gtest186[i] = j
    set gtest187[i] = j
    set gtest188[i] = j
    set gtest189[i] = j
    set gtest190[i] = j
    set gtest191[i] = j
    set gtest192[i] = j
    set gtest193[i] = j
    set gtest194[i] = j
    set gtest195[i] = j
    set gtest196[i] = j
    set gtest197[i] = j
    set gtest198[i] = j
    set gtest199[i] = j
    set gtest200[i] = j
    set gtest201[i] = j
    set gtest202[i] = j
    set gtest203[i] = j
    set gtest204[i] = j
    set gtest205[i] = j
    set gtest206[i] = j
    set gtest207[i] = j
    set gtest208[i] = j
    set gtest209[i] = j
    set gtest210[i] = j
    set gtest211[i] = j
    set gtest212[i] = j
    set gtest213[i] = j
    set gtest214[i] = j
    set gtest215[i] = j
    set gtest216[i] = j
    set gtest217[i] = j
    set gtest218[i] = j
    set gtest219[i] = j
    set gtest220[i] = j
    set gtest221[i] = j
    set gtest222[i] = j
    set gtest223[i] = j
    set gtest224[i] = j
    set gtest225[i] = j
    set gtest226[i] = j
    set gtest227[i] = j
    set gtest228[i] = j
    set gtest229[i] = j
    set gtest230[i] = j
    set gtest231[i] = j
    set gtest232[i] = j
    set gtest233[i] = j
    set gtest234[i] = j
    set gtest235[i] = j
    set gtest236[i] = j
    set gtest237[i] = j
    set gtest238[i] = j
    set gtest239[i] = j
    set gtest240[i] = j
    set gtest241[i] = j
    set gtest242[i] = j
    set gtest243[i] = j
    set gtest244[i] = j
    set gtest245[i] = j
    set gtest246[i] = j
    set gtest247[i] = j
    set gtest248[i] = j
    set gtest249[i] = j
    set gtest250[i] = j
    set gtest251[i] = j
    set gtest252[i] = j
    set gtest253[i] = j
    set gtest254[i] = j
    set gtest255[i] = j
    set gtest256[i] = j
    set gtest257[i] = j
    set gtest258[i] = j
    set gtest259[i] = j
    set gtest260[i] = j
    set gtest261[i] = j
    set gtest262[i] = j
    set gtest263[i] = j
    set gtest264[i] = j
    set gtest265[i] = j
    set gtest266[i] = j
    set gtest267[i] = j
    set gtest268[i] = j
    set gtest269[i] = j
    set gtest270[i] = j
    set gtest271[i] = j
    set gtest272[i] = j
    set gtest273[i] = j
    set gtest274[i] = j
    set gtest275[i] = j
    set gtest276[i] = j
    set gtest277[i] = j
    set gtest278[i] = j
    set gtest279[i] = j
    set gtest280[i] = j
    set gtest281[i] = j
    set gtest282[i] = j
    set gtest283[i] = j
    set gtest284[i] = j
    set gtest285[i] = j
    set gtest286[i] = j
    set gtest287[i] = j
    set gtest288[i] = j
    set gtest289[i] = j
    set gtest290[i] = j
    set gtest291[i] = j
    set gtest292[i] = j
    set gtest293[i] = j
    set gtest294[i] = j
    set gtest295[i] = j
    set gtest296[i] = j
    set gtest297[i] = j
    set gtest298[i] = j
    set gtest299[i] = j
    set gtest300[i] = j
    set gtest301[i] = j
    set gtest302[i] = j
    set gtest303[i] = j
    set gtest304[i] = j
    set gtest305[i] = j
    set gtest306[i] = j
    set gtest307[i] = j
    set gtest308[i] = j
    set gtest309[i] = j
    set gtest310[i] = j
    set gtest311[i] = j
    set gtest312[i] = j
    set gtest313[i] = j
    set gtest314[i] = j
    set gtest315[i] = j
    set gtest316[i] = j
    set gtest317[i] = j
    set gtest318[i] = j
    set gtest319[i] = j
    set gtest320[i] = j
    set gtest321[i] = j
    set gtest322[i] = j
    set gtest323[i] = j
    set gtest324[i] = j
    set gtest325[i] = j
    set gtest326[i] = j
    set gtest327[i] = j
    set gtest328[i] = j
    set gtest329[i] = j
    set gtest330[i] = j
    set gtest331[i] = j
    set gtest332[i] = j
    set gtest333[i] = j
    set gtest334[i] = j
    set gtest335[i] = j
    set gtest336[i] = j
    set gtest337[i] = j
    set gtest338[i] = j
    set gtest339[i] = j
    set gtest340[i] = j
    set gtest341[i] = j
    set gtest342[i] = j
    set gtest343[i] = j
    set gtest344[i] = j
    set gtest345[i] = j
    set gtest346[i] = j
    set gtest347[i] = j
    set gtest348[i] = j
    set gtest349[i] = j
    set gtest350[i] = j
    set gtest351[i] = j
    set gtest352[i] = j
    set gtest353[i] = j
    set gtest354[i] = j
    set gtest355[i] = j
    set gtest356[i] = j
    set gtest357[i] = j
    set gtest358[i] = j
    set gtest359[i] = j
    set gtest360[i] = j
    set gtest361[i] = j
    set gtest362[i] = j
    set gtest363[i] = j
    set gtest364[i] = j
    set gtest365[i] = j
    set gtest366[i] = j
    set gtest367[i] = j
    set gtest368[i] = j
    set gtest369[i] = j
    set gtest370[i] = j
    set gtest371[i] = j
    set gtest372[i] = j
    set gtest373[i] = j
    set gtest374[i] = j
    set gtest375[i] = j
    set gtest376[i] = j
    set gtest377[i] = j
    set gtest378[i] = j
    set gtest379[i] = j
    set gtest380[i] = j
    set gtest381[i] = j
    set gtest382[i] = j
    set gtest383[i] = j
    set gtest384[i] = j
    set gtest385[i] = j
    set gtest386[i] = j
    set gtest387[i] = j
    set gtest388[i] = j
    set gtest389[i] = j
    set gtest390[i] = j
    set gtest391[i] = j
    set gtest392[i] = j
    set gtest393[i] = j
    set gtest394[i] = j
    set gtest395[i] = j
    set gtest396[i] = j
    set gtest397[i] = j
    set gtest398[i] = j
    set gtest399[i] = j
    set gtest400[i] = j
    set gtest401[i] = j
    set gtest402[i] = j
    set gtest403[i] = j
    set gtest404[i] = j
    set gtest405[i] = j
    set gtest406[i] = j
    set gtest407[i] = j
    set gtest408[i] = j
    set gtest409[i] = j
    set gtest410[i] = j
    set gtest411[i] = j
    set gtest412[i] = j
    set gtest413[i] = j
    set gtest414[i] = j
    set gtest415[i] = j
    set gtest416[i] = j
    set gtest417[i] = j
    set gtest418[i] = j
    set gtest419[i] = j
    set gtest420[i] = j
    set gtest421[i] = j
    set gtest422[i] = j
    set gtest423[i] = j
    set gtest424[i] = j
    set gtest425[i] = j
    set gtest426[i] = j
    set gtest427[i] = j
    set gtest428[i] = j
    set gtest429[i] = j
    set gtest430[i] = j
    set gtest431[i] = j
    set gtest432[i] = j
    set gtest433[i] = j
    set gtest434[i] = j
    set gtest435[i] = j
    set gtest436[i] = j
    set gtest437[i] = j
    set gtest438[i] = j
    set gtest439[i] = j
    set gtest440[i] = j
    set gtest441[i] = j
    set gtest442[i] = j
    set gtest443[i] = j
    set gtest444[i] = j
    set gtest445[i] = j
    set gtest446[i] = j
    set gtest447[i] = j
    set gtest448[i] = j
    set gtest449[i] = j
    set gtest450[i] = j
    set gtest451[i] = j
    set gtest452[i] = j
    set gtest453[i] = j
    set gtest454[i] = j
    set gtest455[i] = j
    set gtest456[i] = j
    set gtest457[i] = j
    set gtest458[i] = j
    set gtest459[i] = j
    set gtest460[i] = j
    set gtest461[i] = j
    set gtest462[i] = j
    set gtest463[i] = j
    set gtest464[i] = j
    set gtest465[i] = j
    set gtest466[i] = j
    set gtest467[i] = j
    set gtest468[i] = j
    set gtest469[i] = j
    set gtest470[i] = j
    set gtest471[i] = j
    set gtest472[i] = j
    set gtest473[i] = j
    set gtest474[i] = j
    set gtest475[i] = j
    set gtest476[i] = j
    set gtest477[i] = j
    set gtest478[i] = j
    set gtest479[i] = j
    set gtest480[i] = j
    set gtest481[i] = j
    set gtest482[i] = j
    set gtest483[i] = j
    set gtest484[i] = j
    set gtest485[i] = j
    set gtest486[i] = j
    set gtest487[i] = j
    set gtest488[i] = j
    set gtest489[i] = j
    set gtest490[i] = j
    set gtest491[i] = j
    set gtest492[i] = j
    set gtest493[i] = j
    set gtest494[i] = j
    set gtest495[i] = j
    set gtest496[i] = j
    set gtest497[i] = j
    set gtest498[i] = j
    set gtest499[i] = j
    set gtest500[i] = j
    set gtest501[i] = j
    set gtest502[i] = j
    set gtest503[i] = j
    set gtest504[i] = j
    set gtest505[i] = j
    set gtest506[i] = j
    set gtest507[i] = j
    set gtest508[i] = j
    set gtest509[i] = j
    set gtest510[i] = j
    set gtest511[i] = j
    set gtest512[i] = j
    set gtest513[i] = j
    set gtest514[i] = j
    set gtest515[i] = j
    set gtest516[i] = j
    set gtest517[i] = j
    set gtest518[i] = j
    set gtest519[i] = j
    set gtest520[i] = j
    set gtest521[i] = j
    set gtest522[i] = j
    set gtest523[i] = j
    set gtest524[i] = j
    set gtest525[i] = j
    set gtest526[i] = j
    set gtest527[i] = j
    set gtest528[i] = j
    set gtest529[i] = j
    set gtest530[i] = j
    set gtest531[i] = j
    set gtest532[i] = j
    set gtest533[i] = j
    set gtest534[i] = j
    set gtest535[i] = j
    set gtest536[i] = j
    set gtest537[i] = j
    set gtest538[i] = j
    set gtest539[i] = j
    set gtest540[i] = j
    set gtest541[i] = j
    set gtest542[i] = j
    set gtest543[i] = j
    set gtest544[i] = j
    set gtest545[i] = j
    set gtest546[i] = j
    set gtest547[i] = j
    set gtest548[i] = j
    set gtest549[i] = j
    set gtest550[i] = j
    set gtest551[i] = j
    set gtest552[i] = j
    set gtest553[i] = j
    set gtest554[i] = j
    set gtest555[i] = j
    set gtest556[i] = j
    set gtest557[i] = j
    set gtest558[i] = j
    set gtest559[i] = j
    set gtest560[i] = j
    set gtest561[i] = j
    set gtest562[i] = j
    set gtest563[i] = j
    set gtest564[i] = j
    set gtest565[i] = j
    set gtest566[i] = j
    set gtest567[i] = j
    set gtest568[i] = j
    set gtest569[i] = j
    set gtest570[i] = j
    set gtest571[i] = j
    set gtest572[i] = j
    set gtest573[i] = j
    set gtest574[i] = j
    set gtest575[i] = j
    set gtest576[i] = j
    set gtest577[i] = j
    set gtest578[i] = j
    set gtest579[i] = j
    set gtest580[i] = j
    set gtest581[i] = j
    set gtest582[i] = j
    set gtest583[i] = j
    set gtest584[i] = j
    set gtest585[i] = j
    set gtest586[i] = j
    set gtest587[i] = j
    set gtest588[i] = j
    set gtest589[i] = j
    set gtest590[i] = j
    set gtest591[i] = j
    set gtest592[i] = j
    set gtest593[i] = j
    set gtest594[i] = j
    set gtest595[i] = j
    set gtest596[i] = j
    set gtest597[i] = j
    set gtest598[i] = j
    set gtest599[i] = j
    set gtest600[i] = j
    set gtest601[i] = j
    set gtest602[i] = j
    set gtest603[i] = j
    set gtest604[i] = j
    set gtest605[i] = j
    set gtest606[i] = j
    set gtest607[i] = j
    set gtest608[i] = j
    set gtest609[i] = j
    set gtest610[i] = j
    set gtest611[i] = j
    set gtest612[i] = j
    set gtest613[i] = j
    set gtest614[i] = j
    set gtest615[i] = j
    set gtest616[i] = j
    set gtest617[i] = j
    set gtest618[i] = j
    set gtest619[i] = j
    set gtest620[i] = j
    set gtest621[i] = j
    set gtest622[i] = j
    set gtest623[i] = j
    set gtest624[i] = j
    set gtest625[i] = j
    set gtest626[i] = j
    set gtest627[i] = j
    set gtest628[i] = j
    set gtest629[i] = j
    set gtest630[i] = j
    set gtest631[i] = j
    set gtest632[i] = j
    set gtest633[i] = j
    set gtest634[i] = j
    set gtest635[i] = j
    set gtest636[i] = j
    set gtest637[i] = j
    set gtest638[i] = j
    set gtest639[i] = j
    set gtest640[i] = j
    set gtest641[i] = j
    set gtest642[i] = j
    set gtest643[i] = j
    set gtest644[i] = j
    set gtest645[i] = j
    set gtest646[i] = j
    set gtest647[i] = j
    set gtest648[i] = j
    set gtest649[i] = j
    set gtest650[i] = j
    set gtest651[i] = j
    set gtest652[i] = j
    set gtest653[i] = j
    set gtest654[i] = j
    set gtest655[i] = j
    set gtest656[i] = j
    set gtest657[i] = j
    set gtest658[i] = j
    set gtest659[i] = j
    set gtest660[i] = j
    set gtest661[i] = j
    set gtest662[i] = j
    set gtest663[i] = j
    set gtest664[i] = j
    set gtest665[i] = j
    set gtest666[i] = j
    set gtest667[i] = j
    set gtest668[i] = j
    set gtest669[i] = j
    set gtest670[i] = j
    set gtest671[i] = j
    set gtest672[i] = j
    set gtest673[i] = j
    set gtest674[i] = j
    set gtest675[i] = j
    set gtest676[i] = j
    set gtest677[i] = j
    set gtest678[i] = j
    set gtest679[i] = j
    set gtest680[i] = j
    set gtest681[i] = j
    set gtest682[i] = j
    set gtest683[i] = j
    set gtest684[i] = j
    set gtest685[i] = j
    set gtest686[i] = j
    set gtest687[i] = j
    set gtest688[i] = j
    set gtest689[i] = j
    set gtest690[i] = j
    set gtest691[i] = j
    set gtest692[i] = j
    set gtest693[i] = j
    set gtest694[i] = j
    set gtest695[i] = j
    set gtest696[i] = j
    set gtest697[i] = j
    set gtest698[i] = j
    set gtest699[i] = j
    set gtest700[i] = j
    set gtest701[i] = j
    set gtest702[i] = j
    set gtest703[i] = j
    set gtest704[i] = j
    set gtest705[i] = j
    set gtest706[i] = j
    set gtest707[i] = j
    set gtest708[i] = j
    set gtest709[i] = j
    set gtest710[i] = j
    set gtest711[i] = j
    set gtest712[i] = j
    set gtest713[i] = j
    set gtest714[i] = j
    set gtest715[i] = j
    set gtest716[i] = j
    set gtest717[i] = j
    set gtest718[i] = j
    set gtest719[i] = j
    set gtest720[i] = j
    set gtest721[i] = j
    set gtest722[i] = j
    set gtest723[i] = j
    set gtest724[i] = j
    set gtest725[i] = j
    set gtest726[i] = j
    set gtest727[i] = j
    set gtest728[i] = j
    set gtest729[i] = j
    set gtest730[i] = j
    set gtest731[i] = j
    set gtest732[i] = j
    set gtest733[i] = j
    set gtest734[i] = j
    set gtest735[i] = j
    set gtest736[i] = j
    set gtest737[i] = j
    set gtest738[i] = j
    set gtest739[i] = j
    set gtest740[i] = j
    set gtest741[i] = j
    set gtest742[i] = j
    set gtest743[i] = j
    set gtest744[i] = j
    set gtest745[i] = j
    set gtest746[i] = j
    set gtest747[i] = j
    set gtest748[i] = j
    set gtest749[i] = j
    set gtest750[i] = j
    set gtest751[i] = j
    set gtest752[i] = j
    set gtest753[i] = j
    set gtest754[i] = j
    set gtest755[i] = j
    set gtest756[i] = j
    set gtest757[i] = j
    set gtest758[i] = j
    set gtest759[i] = j
    set gtest760[i] = j
    set gtest761[i] = j
    set gtest762[i] = j
    set gtest763[i] = j
    set gtest764[i] = j
    set gtest765[i] = j
    set gtest766[i] = j
    set gtest767[i] = j
    set gtest768[i] = j
    set gtest769[i] = j
    set gtest770[i] = j
    set gtest771[i] = j
    set gtest772[i] = j
    set gtest773[i] = j
    set gtest774[i] = j
    set gtest775[i] = j
    set gtest776[i] = j
    set gtest777[i] = j
    set gtest778[i] = j
    set gtest779[i] = j
    set gtest780[i] = j
    set gtest781[i] = j
    set gtest782[i] = j
    set gtest783[i] = j
    set gtest784[i] = j
    set gtest785[i] = j
    set gtest786[i] = j
    set gtest787[i] = j
    set gtest788[i] = j
    set gtest789[i] = j
    set gtest790[i] = j
    set gtest791[i] = j
    set gtest792[i] = j
    set gtest793[i] = j
    set gtest794[i] = j
    set gtest795[i] = j
    set gtest796[i] = j
    set gtest797[i] = j
    set gtest798[i] = j
    set gtest799[i] = j
    set gtest800[i] = j
    set gtest801[i] = j
    set gtest802[i] = j
    set gtest803[i] = j
    set gtest804[i] = j
    set gtest805[i] = j
    set gtest806[i] = j
    set gtest807[i] = j
    set gtest808[i] = j
    set gtest809[i] = j
    set gtest810[i] = j
    set gtest811[i] = j
    set gtest812[i] = j
    set gtest813[i] = j
    set gtest814[i] = j
    set gtest815[i] = j
    set gtest816[i] = j
    set gtest817[i] = j
    set gtest818[i] = j
    set gtest819[i] = j
    set gtest820[i] = j
    set gtest821[i] = j
    set gtest822[i] = j
    set gtest823[i] = j
    set gtest824[i] = j
    set gtest825[i] = j
    set gtest826[i] = j
    set gtest827[i] = j
    set gtest828[i] = j
    set gtest829[i] = j
    set gtest830[i] = j
    set gtest831[i] = j
    set gtest832[i] = j
    set gtest833[i] = j
    set gtest834[i] = j
    set gtest835[i] = j
    set gtest836[i] = j
    set gtest837[i] = j
    set gtest838[i] = j
    set gtest839[i] = j
    set gtest840[i] = j
    set gtest841[i] = j
    set gtest842[i] = j
    set gtest843[i] = j
    set gtest844[i] = j
    set gtest845[i] = j
    set gtest846[i] = j
    set gtest847[i] = j
    set gtest848[i] = j
    set gtest849[i] = j
    set gtest850[i] = j
    set gtest851[i] = j
    set gtest852[i] = j
    set gtest853[i] = j
    set gtest854[i] = j
    set gtest855[i] = j
    set gtest856[i] = j
    set gtest857[i] = j
    set gtest858[i] = j
    set gtest859[i] = j
    set gtest860[i] = j
    set gtest861[i] = j
    set gtest862[i] = j
    set gtest863[i] = j
    set gtest864[i] = j
    set gtest865[i] = j
    set gtest866[i] = j
    set gtest867[i] = j
    set gtest868[i] = j
    set gtest869[i] = j
    set gtest870[i] = j
    set gtest871[i] = j
    set gtest872[i] = j
    set gtest873[i] = j
    set gtest874[i] = j
    set gtest875[i] = j
    set gtest876[i] = j
    set gtest877[i] = j
    set gtest878[i] = j
    set gtest879[i] = j
    set gtest880[i] = j
    set gtest881[i] = j
    set gtest882[i] = j
    set gtest883[i] = j
    set gtest884[i] = j
    set gtest885[i] = j
    set gtest886[i] = j
    set gtest887[i] = j
    set gtest888[i] = j
    set gtest889[i] = j
    set gtest890[i] = j
    set gtest891[i] = j
    set gtest892[i] = j
    set gtest893[i] = j
    set gtest894[i] = j
    set gtest895[i] = j
    set gtest896[i] = j
    set gtest897[i] = j
    set gtest898[i] = j
    set gtest899[i] = j
    set gtest900[i] = j
    set gtest901[i] = j
    set gtest902[i] = j
    set gtest903[i] = j
    set gtest904[i] = j
    set gtest905[i] = j
    set gtest906[i] = j
    set gtest907[i] = j
    set gtest908[i] = j
    set gtest909[i] = j
    set gtest910[i] = j
    set gtest911[i] = j
    set gtest912[i] = j
    set gtest913[i] = j
    set gtest914[i] = j
    set gtest915[i] = j
    set gtest916[i] = j
    set gtest917[i] = j
    set gtest918[i] = j
    set gtest919[i] = j
    set gtest920[i] = j
    set gtest921[i] = j
    set gtest922[i] = j
    set gtest923[i] = j
    set gtest924[i] = j
    set gtest925[i] = j
    set gtest926[i] = j
    set gtest927[i] = j
    set gtest928[i] = j
    set gtest929[i] = j
    set gtest930[i] = j
    set gtest931[i] = j
    set gtest932[i] = j
    set gtest933[i] = j
    set gtest934[i] = j
    set gtest935[i] = j
    set gtest936[i] = j
    set gtest937[i] = j
    set gtest938[i] = j
    set gtest939[i] = j
    set gtest940[i] = j
    set gtest941[i] = j
    set gtest942[i] = j
    set gtest943[i] = j
    set gtest944[i] = j
    set gtest945[i] = j
    set gtest946[i] = j
    set gtest947[i] = j
    set gtest948[i] = j
    set gtest949[i] = j
    set gtest950[i] = j
    set gtest951[i] = j
    set gtest952[i] = j
    set gtest953[i] = j
    set gtest954[i] = j
    set gtest955[i] = j
    set gtest956[i] = j
    set gtest957[i] = j
    set gtest958[i] = j
    set gtest959[i] = j
    set gtest960[i] = j
    set gtest961[i] = j
    set gtest962[i] = j
    set gtest963[i] = j
    set gtest964[i] = j
    set gtest965[i] = j
    set gtest966[i] = j
    set gtest967[i] = j
    set gtest968[i] = j
    set gtest969[i] = j
    set gtest970[i] = j
    set gtest971[i] = j
    set gtest972[i] = j
    set gtest973[i] = j
    set gtest974[i] = j
    set gtest975[i] = j
    set gtest976[i] = j
    set gtest977[i] = j
    set gtest978[i] = j
    set gtest979[i] = j
    set gtest980[i] = j
    set gtest981[i] = j
    set gtest982[i] = j
    set gtest983[i] = j
    set gtest984[i] = j
    set gtest985[i] = j
    set gtest986[i] = j
    set gtest987[i] = j
    set gtest988[i] = j
    set gtest989[i] = j
    set gtest990[i] = j
    set gtest991[i] = j
    set gtest992[i] = j
    set gtest993[i] = j
    set gtest994[i] = j
    set gtest995[i] = j
    set gtest996[i] = j
    set gtest997[i] = j
    set gtest998[i] = j
    set gtest999[i] = j
endfunction



public function Actions takes nothing returns nothing
    local integer i
    
    set i = 0
    loop
        exitwhen i >= 100
        call FillGlobals((100-i)*80 ,GetRandomInt(-10000, 10000))
        call TriggerSleepAction(0.0)
        call BJDebugMsg("gtest " + I2S(i))
        set i = i + 1
    endloop
    
    call BJDebugMsg("gtest completed.")
endfunction

//===========================================================================
public function InitTrig takes nothing returns nothing
    local trigger trig = CreateTrigger(  )
    call TriggerRegisterPlayerChatEvent( trig, Player(0), "-gtest", true )
    call TriggerAddAction( trig, function Actions )
    set trig = null
endfunction

endscope
08-28-2007, 09:37 PM#12
Toadcop
hmmm i have tested this trigger... and
after it my war3 needed 117 MB memory (in Task Manager) so not allot ^^
well 90K used slots it's FUCKING ALOT! =)
well conclusion =) arrays are our best friends ^^.

btw... just tested... !!! i was right (dunno why ^^)
after and before cohadars test the needed time to operate with arrays IS THE SAME ! (and we have here 90K used slots O_o !!!)

well here the test map...

A_R_R_A_Y_S___F_O_R_E_V_E_R_!_!_! =)
Attached Files
File type: w3xTEST.w3x (48.9 KB)
08-28-2007, 09:50 PM#13
cohadar
90K ??? - where did you get this number ?

one array = 8192 = 8K
There is 1000 arrays in gtest, that is 1000 * 8K = 8000K

---

Anyways I am glad we cleared this thing now.
Structs forever.

EDIT:

Btw times before and after the test are same because I sort of "cheated" on the test

Look at this line:
Collapse JASS:
call FillGlobals((100-i)*80 ,GetRandomInt(-10000, 10000))

(100-i) // <-------------<<

I fill arrays FROM BEHIND.
If you put simply i instead 100-i test will lag the game to death.

Reason: array does not use all 8192 memory at once, it uses memory only until the biggest index
If you fill it from front it has to increase it size every time you increase index.
But if you fill it from behind it allocates whole array at once and after that game does not lag.

That is the reason I have initializers in my systems:
Collapse JASS:
static method init takes nothing returns nothing
    set Key$X$[8190] = 1
    set Key$X$[8192] = 0        
    set Value$X$[8192] = 1
    set Value$X$[8192] = 0
endmethod

So I initialize arrays before I use them and there is no lag. :P

So Vexorian I suggest that instead of maxinstances you add init static method to structs
08-28-2007, 10:09 PM#14
cohadar
I think it is a bad decision because you don't need efficiency all the time.
The only places you need it in fact are periodic functions.
That you optimize any way you like.

But on other places layers of abstraction can really help you
by reducing the time you need to make stuff and also making your
code easier to understand and find bugs.

My general opinion is that people waste too much time optimizing stuff
that don't need to be optimized at all.
08-28-2007, 10:09 PM#15
PipeDream
Actually you can't do anything more efficiently than vJass. Obviously you can misuse it, but if you need the functionality of a given feature, you can't hand compile it faster. The abstractions are practically non existent and don't 'leak'. It's just
  • A little shorter to write
  • Easier than teaching people how to write code this way by hand

I don't care how you write your map, just pointing out facts.