Improved Efficiency + Added Matrix Scalar functions

This commit is contained in:
felsabbagh3 2019-03-19 16:37:49 -04:00
parent cae4247343
commit 1892feefbf
7 changed files with 2186 additions and 1565 deletions

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -1,13 +1,13 @@
:0200000480007A
:1000000013054000731005021305800073101502DC
:10001000731040F17310103037F1FF7FEF0080193B
:10002000EF10C01173000000938B0600130D070042
:10002000EF10C06D73000000938B0600130D0700E6
:10003000130F01009303050013051000635C7500A6
:1000400013010180130305006B5003001305150015
:100050006FF0DFFE13010F0013050000930F060081
:10006000938D0300EBE0BF01170500001305051B8E
:100070006B40050017030000130343FB6B000300F4
:1000800067800000170200011302022323200200F0
:1000800067800000170200011302022623200200ED
:100090002322120023242200232632002328420098
:1000A000232A5200232C6200232E72002320820276
:1000B000232292022324A2022326B2022328C20270
@ -16,7 +16,7 @@
:1000E000232A5205232C6205232E72052320820722
:1000F000232292072324A2072326B2072328C2071C
:10010000232AD207232CE207232EF2071302100022
:1001100067800000170200011302021A0320020088
:1001100067800000170200011302021D0320020085
:1001200083204200032182008321C20003220201B6
:1001300083224201032382018323C201032402029A
:1001400083244202032582028325C202032602037E
@ -28,20 +28,20 @@
:1001A000678000007325000267800000732510023D
:1001B00067800000130101FE232E1100232C810013
:1001C00013040102232604FE6F0000030327C4FE6C
:1001D0009307404C3307F702B707008193874733F3
:1001E000B307F70013850700EF0040418327C4FEE3
:1001D0009307404C3307F702B707008193874736F0
:1001E000B307F70013850700EF0040408327C4FEE4
:1001F000938717002326F4FE0327C4FE930770009D
:10020000E3D6E7FC130000008320C1010324810131
:100210001301010267800000130101FD2326110272
:10022000232481022322A1031304010313070D00D9
:100230009307404C3307F702B70700819387473392
:10024000B307F70013850700EF00804C9307050004
:100230009307404C3307F702B7070081938747368F
:10024000B307F70013850700EF00804B9307050005
:10025000638A070213070D00B707008113172700F1
:1002600093874729B307F7001307100023A0E7007F
:100260009387472CB307F7001307100023A0E7007C
:1002700093070D0063960700EFF0DFE96F0080053C
:100280007300000013070D009307404C3307F7027B
:10029000B707008193874733B307F700130784FD3F
:1002A0009305070013850700EF00003E832704FE37
:10029000B707008193874736B307F700130784FD3C
:1002A0009305070013850700EF00003D832704FE38
:1002B000138107008327C4FD832584FD032644FEA4
:1002C000832684FE0327C4FE13850700EFF0DFD5E5
:1002D000730000008320C10203248102032D410228
@ -49,309 +49,390 @@
:1002F0002324810413040105EFF0DFEA2324A4FE84
:1003000093090100930710002326F4FE6F004008B4
:100310000327C4FE9307404C3307F702B707008159
:1003200093874733B307F70013850700EF00403E7C
:1003200093874736B307F70013850700EF00403D7A
:1003300093070500639807040327C4FE9307404C06
:100340003307F702B707008193874733B307F700F6
:10035000130704FD9305070013850700EF00C03263
:100340003307F702B707008193874736B307F700F3
:10035000130704FD9305070013850700EF00C03164
:10036000832784FD13810700832744FD832504FD33
:100370000326C4FD832604FE032744FE13850700DD
:10038000EFF05FCF8327C4FE938717002326F4FE88
:100390008327C4FE032784FEE3ECE7F613810900FC
:1003A000EFF05FCE9307020063880704B707008170
:1003B00013854733EF00C03593070500639E07029E
:1003C000930784FB93850700B707008113854733A4
:1003D000EF00802B832704FC138107008327C4FBD5
:1003B00013854736EF00C03493070500639E07029C
:1003C000930784FB93850700B707008113854736A1
:1003D000EF00802A832704FC138107008327C4FBD6
:1003E000832584FB032644FC832684FC0327C4FC6A
:1003F00013850700EFF05FC3130000008320C104E2
:10040000032481041301010567800000130101FB2F
:10041000232611042324810413040105232EA4FAA6
:10042000232CB4FA232AC4FA2328D4FAEFF09FD855
:10043000EFF05FD72322A4FE832544FEB707008197
:1004400013850704EF00C03F13090100232604FEB3
:10045000232404FE6F00C008B709FFFF33013101F8
:10046000832784FE2326F4FC832784FB2328F4FCC3
:1004700093070100232AF4FC832744FB232CF4FC7C
:10048000832704FB232EF4FC8327C4FE2320F4FEE1
:100490000327C4FE9307404C3307F702B7070081D8
:1004A00093874733B307F7001307C4FC930507008E
:1004B00013850700EF00C0168327C4FE938717003B
:1004C0002326F4FE8327C4FE032744FE63E4E700EB
:1004D000232604FE832784FE938717002324F4FE3B
:1004E000032784FE8327C4FBE368F7F613010900A2
:1004F000EFF09FDF130000008320C1040324810478
:100500001301010567800000130101FD232611027C
:100510002324810213040103232EA4FCEFF09FC8BF
:100520002320A4FE232604FE6F004005232604FE9C
:10053000232404FE6F00C003B7070081032784FE55
:100540001317270093874729B307F70003A707006E
:10055000930710006318F7008327C4FE93871700E2
:100560002326F4FE832784FE938717002324F4FEBA
:10057000832784FE032704FEE3E0E7FC0327C4FE91
:100580008327C4FDE314F7FA232204FE6F008002E0
:10059000B7070081032744FE1317270093874729D5
:1005A000B307F70023A00700832744FE93871700B3
:1005B0002322F4FE832744FE032704FEE3EAE7FC3C
:1005C000130000008320C1020324810213010103F0
:1005D00067800000130101FF23268100232471019D
:1005E0001304010193870B00138507000324C10046
:1005F000832B810013010101678000009302050035
:10060000130300009303700023A0620023A2620082
:1006100023A4620023A6720023A862006780000062
:100620009302050003A382001303130023A46200B6
:100630001383420183AE420093935E003303730041
:1006400003AE05002320C30103AE45002322C301EE
:1006500003AE85002324C30103AEC5002326C301D6
:1006600003AE05012328C30103AE4501232AC301BC
:10067000938E1E00130F20036394EE01930E00006F
:1006800023A2D201678000009302050003A3820029
:100690001303F3FF23A462001383420183AE02001D
:1006A000930F2003138F0E00130F1F006314FF011D
:1006B000130F000023A0E20193935E003303730045
:1006C000032E030023A0C501032E430023A2C5016E
:1006D000032E830023A4C501032EC30023A6C50156
:1006E000032E030123A8C501032E430123AAC5013C
:1006F000678000009302050003A382001305000039
:10070000130E200363146E001305150067800000AC
:100710009302050003A3820013050000130E0000DE
:1007200063146E0013051500678000009302050036
:1007300003A3C20083A3020133B5630067800000F6
:10074000130141FF232011002322B100834505003E
:1007500063880500EF00C001130515006FF01FFF4F
:1007600083200100832541001301C1006780000040
:10077000B708010023A0B80067800000130101FD45
:10078000232611022324810213040103232EA4FC37
:100790000327C4FD9307F00063E4E702B707008175
:1007A0000327C4FD131727009387471DB307F700DE
:1007B00083A7070013850700EFF09FF86F0040073D
:1007C000930700022326F4FEA30504FE8327C4FE3C
:1007D0009387C7FF0327C4FDB357F70093F7F700CC
:1007E0002322F4FE832744FE63860700930710004C
:1007F000A305F4FE8347B4FE63820702B7070081B6
:10080000032744FE131727009387471DB307F700FC
:1008100083A7070013850700EFF09FF28327C4FE2C
:100820009387C7FF2326F4FE8327C4FEE340F0FA34
:100830008320C102032481021301010367800000A9
:10084000130101FE232E1100232C81001304010249
:100850002326A4FE2324B4FE0325C4FEEFF05FEE9E
:10086000032584FEEFF09FF1B70700811385870908
:10087000EFF01FED130000008320C101032481016C
:100880001301010267800000130101FD23261102FC
:100890002324810213040103232EA4FC232CB4FC83
:1008A000232AC4FC2328D4FCB73700810327C4FDC6
:1008B00023AAE796B737008193874797032784FDDC
:1008C00023A2E700B737008193874797032744FDAA
:1008D00023A4E700B737008193874797032704FDD8
:1008E00023A6E700EFF09F8C2324A4FE032704FD3A
:1008F000832784FEB357F7022326F4FE032704FD63
:10090000832784FEB377F702638807008327C4FE3A
:10091000938717002326F4FE8325C4FEB7070081C2
:100920001385C70DEFF0DFF1B73700819387479745
:100930000327C4FE23A8E700032704FD832784FEC2
:100940006362F702B737008193864797B717008035
:100950001386C79B832584FE032504FDEFF01FABA0
:100960006F000002B737008193864797B717008062
:100970001386C79B832504FD032504FDEFF01FA903
:10098000EFF05F822322A4FE032704FD832744FEA9
:1009900063F8E700032544FEEFF01FB76F00C000C7
:1009A000032504FDEFF05FB6130000008320C102B1
:1009B000032481021301010367800000130101FA7F
:1009C000232E1104232C8104130401062326A4FAE8
:1009D0002324B4FAEFF01FC0232CA4FC832784FD4A
:1009E00083A70700232AF4FC832784FD83A74700FD
:1009F0002328F4FC832784FD83A787002326F4FCA7
:100A0000832784FD83A707012326F4FE0327C4FE62
:100A10008327C4FAB307F7022324F4FE8327C4FE16
:100A2000639A0700930710002326F4FE8327C4FA75
:100A30002324F4FE832784FD83A7C7002324F4FC2A
:100A4000232204FE6F004012232004FE232E04FC08
:100A50006F008007032784FA832784FCB307F7021B
:100A60000327C4FDB307F7002322F4FC032784FC0B
:100A70008327C4FDB307F702032784FEB307F700FB
:100A80002320F4FC832744FC93972700032744FD8D
:100A9000B307F70003A70700832704FC93972700F9
:100AA000832604FDB387F60083A70700B307F70288
:100AB000032704FEB307F7002320F4FE8327C4FDB9
:100AC00093871700232EF4FC0327C4FD832784FC9F
:100AD000E362F7F8032784FA832784FC3307F702DD
:100AE000832784FEB307F700232EF4FA032784FE3E
:100AF000832784FCB337F70093F7F70F232CF4FA1E
:100B0000832784FB93B71700A30BF4FA834774FB86
:100B1000138F0700B7170080938F47B56B200F0026
:100B20007B70FF018327C4FB939727000327C4FC36
:100B3000B307F700032704FE23A0E700832784FE02
:100B4000938717002324F4FEB7170080138E87B510
:100B500067000E00130000006B300000832744FE86
:100B6000938717002322F4FE832744FE0327C4FE45
:100B7000E3ECE7EC130000008320C10503248105AA
:100B80001301010667800000130101FC232E1102EE
:100B9000232C810213040104232EA4FC232CB4FC77
:100BA000232AC4FC2328D4FC2326E4FCB737008185
:100BB0000327C4FD23A4E798B7370081938787985C
:100BC000032784FD23A2E700B73700819387879826
:100BD000032744FD23A4E700B73700819387879854
:100BE0000327C4FC23A6E700B737008193878798C3
:100BF000032704FD23A8E700EFF04FDB2324A4FE26
:100C00000327C4FC832784FEB357F7022326F4FE90
:100C10000327C4FC832784FEB377F70263880700A9
:100C20008327C4FE938717002326F4FEB73700817D
:100C3000938787980327C4FE23AAE7000327C4FCF1
:100C4000832784FE6362F702B73700819386879813
:100C5000B7170080138607CC832584FE032504FD87
:100C6000EFF0CFFA6F000002B737008193868798C4
:100C7000B7170080138607CC8325C4FC032504FD29
:100C8000EFF0CFF8EFF00FD22322A4FE032704FDEC
:100C9000832744FE63F8E700032544FEEFF0DF8678
:100CA0006F00C000032504FDEFF01F861300000055
:100CB0008320C10303248103130101046780000022
:100CC000130101FB232611042324810413040105CD
:100CD000232EA4FA232CB4FAEFF0DF8F2320A4FEF6
:100CE000832704FE83A70700232EF4FC832704FE3A
:100CF00083A74700232CF4FC832704FE83A78700E7
:100D0000232AF4FC832704FE83A747012326F4FE4D
:100D10000327C4FE8327C4FBB307F7022324F4FE92
:100D20008327C4FE639A0700930710002326F4FE6E
:100D30008327C4FB2324F4FE832704FE83A7C70074
:100D40002328F4FC232204FE6F00000C032784FBFD
:100D5000832704FD3307F702832784FEB307F700D8
:100D60002326F4FC032784FE832704FDB337F70012
:100D700093F7F70F2324F4FC832784FC93B7170021
:100D8000A303F4FC834774FC138F0700B71700809C
:100D9000938F47DF6B200F007B70FF018327C4FC1C
:100DA000939727000327C4FDB307F70083A6070026
:100DB0008327C4FC93972700032784FDB307F7001C
:100DC00003A707008327C4FC93972700032644FD4D
:100DD000B307F6003387E60023A0E700832784FEED
:100DE000938717002324F4FEB7170080138E87DF44
:100DF00067000E00130000006B300000832744FEE4
:100E0000938717002322F4FE832744FE0327C4FEA2
:100E1000E3EEE7F2130000008320C1040324810401
:100E20001301010567800000130101FC232E11024C
:100E3000232C810213040104232EA4FC232CB4FCD4
:100E4000232AC4FC2328D4FC2326E4FCB7370081E2
:100E50000327C4FD23A4E798B737008193878798B9
:100E6000032784FD23A2E700B73700819387879883
:100E7000032744FD23A4E700B737008193878798B1
:100E80000327C4FC23A6E700B73700819387879820
:100E9000032704FD23A8E700EFF04FB12324A4FEAD
:100EA0000327C4FC832784FEB357F7022326F4FEEE
:100EB0000327C4FC832784FEB377F7026388070007
:100EC0008327C4FE938717002326F4FEB7370081DB
:100ED000938787980327C4FE23AAE7000327C4FC4F
:100EE000832784FE6362F702B73700819386879871
:100EF000B7170080138607F6832584FE032504FDBB
:100F0000EFF0CFD06F000002B7370081938687984B
:100F1000B7170080138607F68325C4FC032504FD5C
:100F2000EFF0CFCEEFF00FA82322A4FE032704FD9D
:100F3000832744FE63F8E700032544FEEFF0CFDC8F
:100F40006F00C000032504FDEFF00FDC130000006C
:100F50008320C1030324810313010104678000007F
:100F6000130101FB2326110423248104130401052A
:100F7000232EA4FA232CB4FAEFF0CFE52320A4FE0D
:100F8000832704FE83A70700232EF4FC832704FE97
:100F900083A74700232CF4FC832704FE83A7870044
:100FA000232AF4FC832704FE83A747012326F4FEAB
:100FB0000327C4FE8327C4FBB307F7022324F4FEF0
:100FC0008327C4FE639A0700930710002326F4FECC
:100FD0008327C4FB2324F4FE832704FE83A7C700D2
:100FE0002328F4FC232204FE6F00000C032784FB5B
:100FF000832704FD3307F702832784FEB307F70036
:101000002326F4FC032784FE832704FDB337F7006F
:1010100093F7F70F2324F4FC832784FC93B717007E
:10102000A303F4FC834774FC138F0700B7170080F9
:10103000938F47096B200F007B70FF018327C4FC4F
:10104000939727000327C4FDB307F70083A6070083
:101050008327C4FC93972700032784FDB307F70079
:1010600003A707008327C4FC93972700032644FDAA
:10107000B307F6003387E64023A0E700832784FE0A
:10108000938717002324F4FEB7170080138E870977
:1010900067000E00130000006B300000832744FE41
:1010A000938717002322F4FE832744FE0327C4FE00
:1010B000E3EEE7F2130000008320C104032481045F
:1010C0001301010567800000130101FE232E81003A
:1010D00013040102232604FE6F008004B737008149
:1010E0000327C4FE131727009387079AB307F70057
:1010F0001307300023A0E700B74700810327C4FE91
:10110000131727009387079AB307F70013072000E8
:1011100023A0E7008327C4FE938717002326F4FE4D
:101120000327C4FE9307F00FE3DAE7FA1300000089
:101130000324C1011301010267800000130101FEB5
:10114000232E1100232C810013040102EFF0DFF79E
:1011500093060001B75700811386079AB7470081AD
:101160009385079AB73700811385079AEFF0CFF17F
:10117000B707008113858712EFF08FDCB707008176
:1011800013854714EFF0CFDB232604FE6F004005E4
:101190008327C4FE93F7F70063980700B707008121
:1011A00013850715EFF0CFD9B75700810327C4FE89
:1011B000131727009387079AB307F70083A7070041
:1011C00013850700EFF08FDBB70700811385471504
:1011D000EFF00FD78327C4FE938717002326F4FE72
:1011E0000327C4FE9307F00FE3D4E7FAB7070081A3
:1011F00013858715EFF0CFD4130700019306000184
:10120000B75700811386079AB74700819385079ADD
:10121000B73700811385079AEFF01F97B707008152
:1012200013858712EFF0CFD1B70700811385C71759
:10123000EFF00FD1232404FE6F004005832784FEC6
:1012400093F7F70063980700B70700811385071528
:10125000EFF00FCFB7570081032784FE1317270045
:101260009387079AB307F70083A707001385070042
:10127000EFF0CFD0B707008113854715EFF04FCCC3
:10128000832784FE938717002324F4FE032784FE1C
:101290009307F00FE3D4E7FAB707008113858715AA
:1012A000EFF00FCA1307000193060001B757008142
:1012B0001386079AB74700819385079AB73700814D
:1012C0001385079AEFF05FB6B70700811385871281
:1012D000EFF00FC7B707008113858718EFF04FC6EF
:1012E000232204FE6F004005832744FE93F7F70096
:1012F00063980700B707008113850715EFF04FC407
:10130000B7570081032744FE131727009387079AD6
:10131000B307F70083A7070013850700EFF00FC698
:10132000B707008113854715EFF08FC1832744FE6F
:10133000938717002322F4FE032744FE9307F00F40
:10134000E3D4E7FAB707008113858715EFF04FBFA5
:1013500093070000138507008320C1010324810146
:08136000130101026780000087
:10043000EFF05FD72322A4FE13090100232604FE58
:10044000232404FE6F00C008B709FFFF3301310108
:10045000832784FE2326F4FC832784FB2328F4FCD3
:1004600093070100232AF4FC832744FB232CF4FC8C
:10047000832704FB232EF4FC8327C4FE2320F4FEF1
:100480000327C4FE9307404C3307F702B7070081E8
:1004900093874736B307F7001307C4FC930507009B
:1004A00013850700EF00C0168327C4FE938717004B
:1004B0002326F4FE8327C4FE032744FE63E4E700FB
:1004C000232604FE832784FE938717002324F4FE4B
:1004D000032784FE8327C4FBE368F7F613010900B2
:1004E000EFF09FE0130000008320C1040324810487
:1004F0001301010567800000130101FD232611028D
:100500002324810213040103232EA4FCEFF09FC9CE
:100510002320A4FE232604FE6F004005232604FEAC
:10052000232404FE6F00C003B7070081032784FE65
:10053000131727009387472CB307F70003A707007B
:10054000930710006318F7008327C4FE93871700F2
:100550002326F4FE832784FE938717002324F4FECA
:10056000832784FE032704FEE3E0E7FC0327C4FEA1
:100570008327C4FDE314F7FA232204FE6F008002F0
:10058000B7070081032744FE131727009387472CE2
:10059000B307F70023A00700832744FE93871700C3
:1005A0002322F4FE832744FE032704FEE3EAE7FC4C
:1005B000130000008320C102032481021301010300
:1005C00067800000130101FF2326810023247101AD
:1005D0001304010193870B00138507000324C10056
:1005E000832B810013010101678000009302050045
:1005F000130300009303700023A0620023A2620093
:1006000023A4620023A6720023A862006780000072
:100610009302050003A382001303130023A46200C6
:100620001383420183AE420093935E003303730051
:1006300003AE05002320C30103AE45002322C301FE
:1006400003AE85002324C30103AEC5002326C301E6
:1006500003AE05012328C30103AE4501232AC301CC
:10066000938E1E00130F20036394EE01930E00007F
:1006700023A2D201678000009302050003A3820039
:100680001303F3FF23A462001383420183AE02002D
:10069000930F2003138F0E00130F1F006314FF012D
:1006A000130F000023A0E20193935E003303730055
:1006B000032E030023A0C501032E430023A2C5017E
:1006C000032E830023A4C501032EC30023A6C50166
:1006D000032E030123A8C501032E430123AAC5014C
:1006E000678000009302050003A382001305000049
:1006F000130E200363146E001305150067800000BD
:100700009302050003A3820013050000130E0000EE
:1007100063146E0013051500678000009302050046
:1007200003A3C20083A3020133B563006780000006
:10073000130141FF232011002322B100834505004E
:1007400063880500EF00C001130515006FF01FFF5F
:1007500083200100832541001301C1006780000050
:10076000B708010023A0B80067800000130101FD55
:10077000232611022324810213040103232EA4FC47
:100780000327C4FD9307F00063E4E702B707008185
:100790000327C4FD1317270093874720B307F700EB
:1007A00083A7070013850700EFF09FF86F0040074D
:1007B000930700022326F4FEA30504FE8327C4FE4C
:1007C0009387C7FF0327C4FDB357F70093F7F700DC
:1007D0002322F4FE832744FE63860700930710005C
:1007E000A305F4FE8347B4FE63820702B7070081C6
:1007F000032744FE1317270093874720B307F7000A
:1008000083A7070013850700EFF09FF28327C4FE3C
:100810009387C7FF2326F4FE8327C4FEE340F0FA44
:100820008320C102032481021301010367800000B9
:10083000130101FE232E1100232C81001304010259
:100840002326A4FE2324B4FE0325C4FEEFF05FEEAE
:10085000032584FEEFF09FF1B70700811385070899
:10086000EFF01FED130000008320C101032481017C
:100870001301010267800000130101FD232611020C
:100880002324810213040103232EA4FC232CB4FC93
:10089000232AC4FC2328D4FCB73700810327C4FDD6
:1008A00023A2E79AB73700819387479A032784FDED
:1008B00023A2E700B73700819387479A032744FDB7
:1008C00023A4E700B73700819387479A032704FDE5
:1008D00023A6E700EFF09F8D2324A4FE032704FD49
:1008E000832784FEB357F7022326F4FE032704FD73
:1008F000832784FEB377F702638807008327C4FE4B
:10090000938717002326F4FE8325C4FEB7070081D2
:100910001385470CEFF0DFF1B73700819387479AD3
:100920000327C4FE23A8E700032704FD832784FED2
:100930006362F702B73700819386479AB717008042
:100940001386C79A832584FE032504FDEFF01FACB0
:100950006F000002B73700819386479AB71700806F
:100960001386C79A832504FD032504FDEFF01FAA13
:10097000EFF05F832322A4FE032704FD832744FEB8
:1009800063F8E700032544FEEFF01FB76F00C000D7
:10099000032504FDEFF05FB6130000008320C102C1
:1009A000032481021301010367800000130101FA8F
:1009B000232E1104232C8104130401062326A4FAF8
:1009C0002324B4FAEFF01FC0232CA4FC832784FD5A
:1009D00083A70700232AF4FC832784FD83A747000D
:1009E0002328F4FC832784FD83A787002326F4FCB7
:1009F000832784FD83A707012326F4FE0327C4FE73
:100A00008327C4FAB307F7022324F4FE8327C4FE26
:100A1000639A0700930710002326F4FE8327C4FA85
:100A20002324F4FE832784FD83A7C7002324F4FC3A
:100A3000232204FE6F004012232004FE232E04FC18
:100A40006F008007032784FA832784FCB307F7022B
:100A50000327C4FDB307F7002322F4FC032784FC1B
:100A60008327C4FDB307F702032784FEB307F7000B
:100A70002320F4FC832744FC93972700032744FD9D
:100A8000B307F70003A70700832704FC9397270009
:100A9000832604FDB387F60083A70700B307F70298
:100AA000032704FEB307F7002320F4FE8327C4FDC9
:100AB00093871700232EF4FC0327C4FD832784FCAF
:100AC000E362F7F8032784FA832784FC3307F702ED
:100AD000832784FEB307F700232EF4FA032784FE4E
:100AE000832784FCB337F70093F7F70F232CF4FA2E
:100AF000832784FB93B71700A30BF4FA834774FB97
:100B0000138F0700B7170080938F47B46B200F0037
:100B10007B70FF018327C4FB939727000327C4FC46
:100B2000B307F700032704FE23A0E700832784FE12
:100B3000938717002324F4FEB7170080138E87B421
:100B400067000E00130000006B300000832744FE96
:100B5000938717002322F4FE832744FE0327C4FE55
:100B6000E3ECE7EC130000008320C10503248105BA
:100B70001301010667800000130101FC232E1102FE
:100B8000232C810213040104232EA4FC232CB4FC87
:100B9000232AC4FC2328D4FC2326E4FCB737008195
:100BA0000327C4FD23ACE79AB73700819387879B5F
:100BB000032784FD23A2E700B73700819387879B33
:100BC000032744FD23A4E700B73700819387879B61
:100BD0000327C4FC23A6E700B73700819387879BD0
:100BE000032704FD23A8E700EFF04FDC2324A4FE35
:100BF0000327C4FC832784FEB357F7022326F4FEA1
:100C00000327C4FC832784FEB377F70263880700B9
:100C10008327C4FE938717002326F4FEB73700818D
:100C20009387879B0327C4FE23AAE7000327C4FCFE
:100C3000832784FE6362F702B73700819386879B20
:100C4000B7170080138607CB832584FE032504FD98
:100C5000EFF0CFFB6F000002B73700819386879BD0
:100C6000B7170080138607CB8325C4FC032504FD3A
:100C7000EFF0CFF9EFF00FD32322A4FE032704FDFA
:100C8000832744FE63F8E700032544FEEFF0DF8688
:100C90006F00C000032504FDEFF01F861300000065
:100CA0008320C10303248103130101046780000032
:100CB000130101FB232611042324810413040105DD
:100CC000232EA4FA232CB4FAEFF0DF8F2320A4FE06
:100CD000832704FE83A70700232EF4FC832704FE4A
:100CE00083A74700232CF4FC832704FE83A78700F7
:100CF000232AF4FC832704FE83A747012326F4FE5E
:100D00000327C4FE8327C4FBB307F7022324F4FEA2
:100D10008327C4FE639A0700930710002326F4FE7E
:100D20008327C4FB2324F4FE832704FE83A7C70084
:100D30002328F4FC232204FE6F00000C032784FB0D
:100D4000832704FD3307F702832784FEB307F700E8
:100D50002326F4FC032784FE832704FDB337F70022
:100D600093F7F70F2324F4FC832784FC93B7170031
:100D7000A303F4FC834774FC138F0700B7170080AC
:100D8000938F47DE6B200F007B70FF018327C4FC2D
:100D9000939727000327C4FDB307F70083A6070036
:100DA0008327C4FC93972700032784FDB307F7002C
:100DB00003A707008327C4FC93972700032644FD5D
:100DC000B307F6003387E60023A0E700832784FEFD
:100DD000938717002324F4FEB7170080138E87DE55
:100DE00067000E00130000006B300000832744FEF4
:100DF000938717002322F4FE832744FE0327C4FEB3
:100E0000E3EEE7F2130000008320C1040324810411
:100E10001301010567800000130101FC232E11025C
:100E2000232C810213040104232EA4FC232CB4FCE4
:100E3000232AC4FC2328D4FC2326E4FCB7370081F2
:100E40000327C4FD23ACE79AB73700819387879BBC
:100E5000032784FD23A2E700B73700819387879B90
:100E6000032744FD23A4E700B73700819387879BBE
:100E70000327C4FC23A6E700B73700819387879B2D
:100E8000032704FD23A8E700EFF04FB22324A4FEBC
:100E90000327C4FC832784FEB357F7022326F4FEFE
:100EA0000327C4FC832784FEB377F7026388070017
:100EB0008327C4FE938717002326F4FEB7370081EB
:100EC0009387879B0327C4FE23AAE7000327C4FC5C
:100ED000832784FE6362F702B73700819386879B7E
:100EE000B7170080138607F5832584FE032504FDCC
:100EF000EFF0CFD16F000002B73700819386879B58
:100F0000B7170080138607F58325C4FC032504FD6D
:100F1000EFF0CFCFEFF00FA92322A4FE032704FDAB
:100F2000832744FE63F8E700032544FEEFF0CFDC9F
:100F30006F00C000032504FDEFF00FDC130000007C
:100F40008320C1030324810313010104678000008F
:100F5000130101FB2326110423248104130401053A
:100F6000232EA4FA232CB4FAEFF0CFE52320A4FE1D
:100F7000832704FE83A70700232EF4FC832704FEA7
:100F800083A74700232CF4FC832704FE83A7870054
:100F9000232AF4FC832704FE83A747012326F4FEBB
:100FA0000327C4FE8327C4FBB307F7022324F4FE00
:100FB0008327C4FE639A0700930710002326F4FEDC
:100FC0008327C4FB2324F4FE832704FE83A7C700E2
:100FD0002328F4FC232204FE6F00000C032784FB6B
:100FE000832704FD3307F702832784FEB307F70046
:100FF0002326F4FC032784FE832704FDB337F70080
:1010000093F7F70F2324F4FC832784FC93B717008E
:10101000A303F4FC834774FC138F0700B717008009
:10102000938F47086B200F007B70FF018327C4FC60
:10103000939727000327C4FDB307F70083A6070093
:101040008327C4FC93972700032784FDB307F70089
:1010500003A707008327C4FC93972700032644FDBA
:10106000B307F6003387E64023A0E700832784FE1A
:10107000938717002324F4FEB7170080138E870888
:1010800067000E00130000006B300000832744FE51
:10109000938717002322F4FE832744FE0327C4FE10
:1010A000E3EEE7F2130000008320C104032481046F
:1010B0001301010567800000130101FC232E1102BA
:1010C000232C810213040104232EA4FC232CB4FC42
:1010D000232AC4FC2328D4FC2326E4FCB737008150
:1010E0000327C4FD23A8E79CB73700819387079D9A
:1010F000032784FD23A2E700B73700819387079D6C
:10110000032744FD23A4E700B73700819387079D99
:101110000327C4FC23A6E700B73700819387079D08
:10112000032704FD23A8E700EFF04F882324A4FE43
:101130000327C4FC832784FEB357F7022326F4FE5B
:101140000327C4FC832784FEB377F7026388070074
:101150008327C4FE938717002326F4FEB737008148
:101160009387079D0327C4FE23AAE7000327C4FC37
:10117000832784FE6362F702B73700819386079D59
:10118000B71700801386071F832584FE032504FDFF
:10119000EFF0CFA76F000002B73700819386079D5D
:1011A000B71700801386071F8325C4FC032504FDA1
:1011B000EFF0CFA5EFE01FFF2322A4FE032704FDDD
:1011C000832744FE63F8E700032544FEEFF0CFB227
:1011D0006F00C000032504FDEFF00FB21300000004
:1011E0008320C103032481031301010467800000ED
:1011F000130101FB23261104232481041304010598
:10120000232EA4FA232CB4FAEFF0CFBB2320A4FEA4
:10121000832704FE83A70700232EF4FC832704FE04
:1012200083A7470083A70700232CF4FC832704FE31
:1012300083A78700232AF4FC832704FE83A74701A2
:101240002326F4FE0327C4FE8327C4FBB307F7025B
:101250002324F4FE8327C4FE639A0700930710003B
:101260002326F4FE8327C4FB2324F4FE832704FEF5
:1012700083A7C7002328F4FC232204FE6F00000B81
:10128000032784FB832704FD3307F702832784FEAB
:10129000B307F7002326F4FC032784FE832704FD0D
:1012A000B337F70093F7F70F2324F4FC832784FC6C
:1012B00093B71700A303F4FC834774FC138F070054
:1012C000B7170080938F87316B200F007B70FF0171
:1012D0008327C4FC939727000327C4FDB307F700B7
:1012E00083A607008327C4FC93972700032744FDA8
:1012F000B307F700032784FD3387E60023A0E70048
:10130000832784FE938717002324F4FEB7170080F9
:10131000138EC73167000E00130000006B30000011
:10132000832744FE938717002322F4FE832744FE7D
:101330000327C4FEE3E6E7F4130000008320C104A2
:10134000032481041301010567800000130101FCDF
:10135000232E1102232C810213040104232EA4FC4A
:10136000232CB4FC232AC4FC2328D4FC2326E4FC2D
:10137000B73700810327C4FD23A8E79CB737008156
:101380009387079D032784FD23A2E700B7370081D9
:101390009387079D032744FD23A4E700B737008107
:1013A0009387079D0327C4FC23A6E700B737008176
:1013B0009387079D032704FD23A8E700EFE01FDFC5
:1013C0002324A4FE0327C4FC832784FEB357F7021B
:1013D0002326F4FE0327C4FC832784FEB377F70299
:1013E000638807008327C4FE938717002326F4FE33
:1013F000B73700819387079D0327C4FE23AAE70020
:101400000327C4FC832784FE6362F702B737008199
:101410009386079DB717008013864748832584FE6F
:10142000032504FDEFE09FFE6F000002B737008147
:101430009386079DB7170080138647488325C4FC11
:10144000032504FDEFE09FFCEFE0DFD52322A4FE9F
:10145000032704FD832744FE63F8E700032544FEC9
:10146000EFF08F896F00C000032504FDEFF0CF88F7
:10147000130000008320C10303248103130101042E
:1014800067800000130101FB23261104232481043B
:1014900013040105232EA4FA232CB4FAEFF08F9243
:1014A0002320A4FE832704FE83A70700232EF4FC39
:1014B000832704FE83A7470083A70700232CF4FC9F
:1014C000832704FE83A78700232AF4FC832704FED6
:1014D00083A747012326F4FE0327C4FE8327C4FB0A
:1014E000B307F7022324F4FE8327C4FE639A0700A0
:1014F000930710002326F4FE8327C4FB2324F4FE65
:10150000832704FE83A7C7002328F4FC232204FEBC
:101510006F00000B032784FB832704FD3307F702CA
:10152000832784FEB307F7002326F4FC032784FEF9
:10153000832704FDB337F70093F7F70F2324F4FC58
:10154000832784FC93B71700A303F4FC834774FC40
:10155000138F0700B7170080938FC75A6B200F00B7
:101560007B70FF018327C4FC939727000327C4FDEA
:10157000B307F70083A607008327C4FC93972700CF
:10158000032744FDB307F700032784FD3387E602F2
:1015900023A0E700832784FE938717002324F4FE0B
:1015A000B7170080138E075B67000E001300000062
:1015B0006B300000832744FE938717002322F4FE3C
:1015C000832744FE0327C4FEE3E6E7F4130000008C
:1015D0008320C104032481041301010567800000F6
:1015E000130101FE232E810013040102232604FEB1
:1015F0006F008004B73700810327C4FE131727004C
:101600009387879EB307F7001307300023A0E700F6
:10161000B74700810327C4FE131727009387879ECF
:10162000B307F7001307200023A0E7008327C4FEB9
:10163000938717002326F4FE0327C4FE9307F00FB9
:10164000E3DAE7FA130000000324C10113010102E9
:1016500067800000130101FD23261102232481026B
:1016600013040103232EA4FCB7070081138507117F
:10167000EFF00F8C232604FE6F0080058327C4FE45
:10168000638E07008327C4FE93F7F7006398070073
:10169000B707008113854713EFF08F898327C4FEB6
:1016A000939727000327C4FDB307F70083A707001C
:1016B00013850700EFF08F8BB70700811385871321
:1016C000EFF00F878327C4FE938717002326F4FECD
:1016D0000327C4FE9307F00FE3D2E7FAB7070081B0
:1016E0001385C713EFF0CF84130000008320C102DD
:1016F000032481021301010367800000130101FE2E
:10170000232E1100232C810013040102EFF05FED62
:1017100093060001B75700811386879EB747008163
:101720009385879EB73700811385879EEFF0CF940E
:10173000B707008113850716EFE09FFFB7570081B9
:101740001385879EEFF01FF1130700019306000138
:10175000B75700811386879EB74700819385879E80
:10176000B73700811385879EEFF00FC1B70700815F
:101770001385C717EFE0DFFBB75700811385879EFE
:10178000EFF05FED1307000193060001B7570081EA
:101790001386879EB74700819385879EB737008160
:1017A0001385879EEFF04FE7B70700811385071970
:1017B000EFE01FF8B75700811385879EEFF09FE990
:1017C000930730002326F4FE9305C4FE130700019F
:1017D00093060001B75700811386879EB757008193
:1017E0001385879EEFF05F8DB70700811385871AF9
:1017F000EFE01FF4B75700811385879EEFF09FE558
:101800009305C4FE1307000193060001B75700813A
:101810001386879EB75700811385879EEFF01FB30D
:10182000B70700811385871AEFE09FF0B757008153
:101830001385879EEFF01FE29307000013850700D2
:101840008320C1010324810113010102678000008C
:02000004810079
:10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A
:10002000380000003900000061000000620000009C
:10003000630000006400000065000000660000002E
:100040004E756D20617661696C61626C65207761C7
:100050007270733A20000000300000003100000090
:1000600032000000330000003400000035000000C2
:1000700036000000370000003800000039000000A2
:1000800061000000620000006300000064000000E6
:1000900065000000660000000A000000300000005B
:1000A0003100000032000000330000003400000086
:1000B0003500000036000000370000003800000066
:1000C00039000000610000006200000063000000D1
:1000D0006400000065000000660000004F66667363
:1000E00065743A200000000030000000310000007C
:1000F0003200000033000000340000003500000032
:100100003600000037000000380000003900000011
:100110006100000062000000630000006400000055
:1001200065000000660000002D2D2D2D2D2D2D2D9C
:100130002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DEF
:100140002D0A000046494E414C204D41540A000002
:100150000A000000200000000A2D2D2D2D2D2D2D30
:100160002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DBF
:100170002D2D2D2D2D2D2D2D0A00000046494E41EF
:100180004C204144440A000046494E414C205375DE
:03019000620A0000
:100194000000008104000081080000810C0000813F
:1001A4001000008114000081180000811C000081EF
:1001B4002000008124000081280000812C0000819F
:1001C4003000008134000081380000813C0000814F
:1001D400580000815C00008160000081640000819F
:1001E400680000816C00008170000081740000814F
:1001F400780000817C0000818000008184000081FF
:10020400880000818C0000819000008194000081AE
:100214009C000081A0000081A4000081A80000814E
:10022400AC000081B0000081B4000081B8000081FE
:10023400BC000081C0000081C4000081C8000081AE
:10024400CC000081D0000081D4000081D80000815E
:10025400E8000081EC000081F0000081F4000081DE
:10026400F8000081FC00008100010081040100818C
:10027400080100810C01008110010081140100813A
:10028400180100811C0100812001008124010081EA
:1000400030000000310000003200000033000000EA
:1000500034000000350000003600000037000000CA
:10006000380000003900000061000000620000005C
:1000700063000000640000006500000066000000EE
:100080000A000000300000003100000032000000D3
:10009000330000003400000035000000360000008E
:1000A0003700000038000000390000006100000047
:1000B00062000000630000006400000065000000B2
:1000C000660000004F66667365743A200000000009
:1000D000300000003100000032000000330000005A
:1000E000340000003500000036000000370000003A
:1000F00038000000390000006100000062000000CC
:10010000630000006400000065000000660000005D
:100110002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0F
:100120002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D0A22
:10013000000000000A000000200000000A2D2D2D04
:100140002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DDF
:100150002D2D2D2D2D2D2D2D2D2D2D2D0A00000079
:100160000A0A4D6174726978206D756C7469706CDF
:1001700069636174696F6E0A000000000A0A4D61CC
:1001800074726978204164646974696F6E0A000052
:100190000A0A4D61747269782053756274726163E2
:1001A00074696F6E0A0000000A0A4D617472697802
:1001B00020456C656D656E74204164646974696F77
:0301C0006E0A00C4
:1001C4000000008104000081080000810C0000810F
:1001D4001000008114000081180000811C000081BF
:1001E4002000008124000081280000812C0000816F
:1001F4003000008134000081380000813C0000811F
:100204004000008144000081480000814C000081CE
:100214005000008154000081580000815C0000817E
:100224006000008164000081680000816C0000812E
:100234007000008174000081780000817C000081DE
:1002440084000081880000818C000081900000817E
:1002540094000081980000819C000081A00000812E
:10026400A4000081A8000081AC000081B0000081DE
:10027400B4000081B8000081BC000081C00000818E
:10028400D0000081D4000081D8000081DC0000810E
:10029400E0000081E4000081E8000081EC000081BE
:1002A400F0000081F4000081F8000081FC0000816E
:1002B4000001008104010081080100810C0100811A
:040000058000000077
:00000001FF

View file

@ -268,5 +268,172 @@ void _vx_mat_sub(unsigned tid, unsigned wid)
static mat_e_arg_t mat_e_args;
// --------------------------------------------------------------
void _vx_e_mat_add(unsigned, unsigned);
void vx_e_mat_add(void * x, void * scal, void * z, unsigned num_rows, unsigned num_cols)
{
mat_e_args.x = x;
mat_e_args.scal = scal;
mat_e_args.z = z;
mat_e_args.num_cols = num_cols;
mat_e_args.num_rows = num_rows;
unsigned num_avail_threads = vx_available_threads();
unsigned off = (num_cols/num_avail_threads);
if ((num_cols%num_avail_threads) != 0)
{
off += 1;
}
mat_e_args.offset = off;
if (num_cols >= num_avail_threads)
{
vx_spawnWarps(num_rows, num_avail_threads, _vx_e_mat_add, (void *) (&mat_e_args));
}
else
{
vx_spawnWarps(num_rows, num_cols, _vx_e_mat_add, (void *) (&mat_e_args));
}
unsigned num_avail_warps = vx_available_warps();
if (num_rows > num_avail_warps)
{
vx_wait_for_warps(num_avail_warps);
}
else
{
vx_wait_for_warps(num_rows);
}
}
void _vx_e_mat_add(unsigned tid, unsigned wid)
{
// vx_print_str("*");
// for (int z = 0; z < ((wid * 1000) + 1000); z++);
mat_e_arg_t * args = (mat_e_arg_t *) vx_get_arg_struct();
unsigned * x_ptr = args->x;
unsigned scal = *((unsigned *) args->scal);
unsigned * z_ptr = args->z;
unsigned off = args->offset;
unsigned i_index = off * tid;
if (off == 0)
{
off = 1;
i_index = tid;
}
unsigned num_cols = args->num_cols;
for (int iter = 0; iter < off; ++iter)
{
int final_i = (wid * num_cols) + i_index;
unsigned cond = i_index < num_cols;
__if(cond)
{
z_ptr[final_i] = x_ptr[final_i] + scal;
i_index++;
}
__else
__end_if
}
return;
}
void _vx_e_mat_mult(unsigned, unsigned);
void vx_e_mat_mult(void * x, void * scal, void * z, unsigned num_rows, unsigned num_cols)
{
mat_e_args.x = x;
mat_e_args.scal = scal;
mat_e_args.z = z;
mat_e_args.num_cols = num_cols;
mat_e_args.num_rows = num_rows;
unsigned num_avail_threads = vx_available_threads();
unsigned off = (num_cols/num_avail_threads);
if ((num_cols%num_avail_threads) != 0)
{
off += 1;
}
mat_e_args.offset = off;
if (num_cols >= num_avail_threads)
{
vx_spawnWarps(num_rows, num_avail_threads, _vx_e_mat_mult, (void *) (&mat_e_args));
}
else
{
vx_spawnWarps(num_rows, num_cols, _vx_e_mat_mult, (void *) (&mat_e_args));
}
unsigned num_avail_warps = vx_available_warps();
if (num_rows > num_avail_warps)
{
vx_wait_for_warps(num_avail_warps);
}
else
{
vx_wait_for_warps(num_rows);
}
}
void _vx_e_mat_mult(unsigned tid, unsigned wid)
{
// vx_print_str("*");
// for (int z = 0; z < ((wid * 1000) + 1000); z++);
mat_e_arg_t * args = (mat_e_arg_t *) vx_get_arg_struct();
unsigned * x_ptr = args->x;
unsigned scal = *((unsigned *) args->scal);
unsigned * z_ptr = args->z;
unsigned off = args->offset;
unsigned i_index = off * tid;
if (off == 0)
{
off = 1;
i_index = tid;
}
unsigned num_cols = args->num_cols;
for (int iter = 0; iter < off; ++iter)
{
int final_i = (wid * num_cols) + i_index;
unsigned cond = i_index < num_cols;
__if(cond)
{
z_ptr[final_i] = x_ptr[final_i] * scal;
i_index++;
}
__else
__end_if
}
return;
}

View file

@ -6,9 +6,9 @@
typedef struct
{
unsigned * x;
unsigned * y;
unsigned * z;
void * x;
void * y;
void * z;
unsigned mat_dim;
unsigned offset;
@ -16,20 +16,40 @@ typedef struct
void vx_sq_mat_mult(void *, void *, void *, unsigned);
// --------------------------------------------------------------------------
typedef struct
{
unsigned * x;
unsigned * y;
unsigned * z;
void * x;
void * y;
void * z;
unsigned num_cols;
unsigned num_rows;
unsigned offset;
} mat_r_arg_t;
// -------------------------- Matrix Addition --------------------------
// -------------------------- Matrix Addition -----------------------------
void vx_mat_add(void *, void *, void *, unsigned, unsigned);
// -------------------------- Matrix Subtraction --------------------------
void vx_mat_sub(void *, void *, void *, unsigned, unsigned);
void vx_mat_sub(void *, void *, void *, unsigned, unsigned);
// -----------------------------------------------------------------------
typedef struct
{
void * x;
void * scal;
void * z;
unsigned num_cols;
unsigned num_rows;
unsigned offset;
} mat_e_arg_t;
// -------------------------- Matrix element Addition ------------------
void vx_e_mat_add(void *, void *, void *, unsigned, unsigned);
// -------------------------- Matrix element Addition ------------------
void vx_e_mat_mult(void *, void *, void *, unsigned, unsigned);

View file

@ -19,6 +19,18 @@ void initialize_mats()
}
}
void print_matrix(unsigned * z)
{
vx_print_str("-------------------------------\n");
for (int j = 0; j < (MAT_DIM * MAT_DIM); j++)
{
if (j!=0) if ((j % MAT_DIM) == 0) vx_print_str("\n");
vx_print_hex(z[j]);
vx_print_str(" ");
}
vx_print_str("\n-------------------------------\n");
}
int main()
{
@ -26,44 +38,32 @@ int main()
// matrix multiplication
vx_sq_mat_mult(x, y, z, MAT_DIM);
vx_print_str("-------------------------\n");
vx_print_str("FINAL MAT\n");
for (int j = 0; j < (MAT_DIM * MAT_DIM); j++)
{
if ((j % MAT_DIM) == 0) vx_print_str("\n");
vx_print_hex(z[j]);
vx_print_str(" ");
}
vx_print_str("\n-------------------------------\n");
vx_print_str("\n\nMatrix multiplication\n");
print_matrix(z);
// matrix addition
vx_mat_add(x, y, z, NUM_ROWS, NUM_COLS);
vx_print_str("-------------------------\n");
vx_print_str("FINAL ADD\n");
for (int j = 0; j < (NUM_COLS * NUM_ROWS); j++)
{
if ((j % NUM_COLS) == 0) vx_print_str("\n");
vx_print_hex(z[j]);
vx_print_str(" ");
}
vx_print_str("\n-------------------------------\n");
vx_print_str("\n\nMatrix Addition\n");
print_matrix(z);
// matrix sub
vx_mat_sub(x, y, z, NUM_ROWS, NUM_COLS);
vx_print_str("-------------------------\n");
vx_print_str("FINAL Sub\n");
vx_print_str("\n\nMatrix Subtraction\n");
print_matrix(z);
for (int j = 0; j < (NUM_COLS * NUM_ROWS); j++)
{
if ((j % NUM_COLS) == 0) vx_print_str("\n");
vx_print_hex(z[j]);
vx_print_str(" ");
}
vx_print_str("\n-------------------------------\n");
unsigned scal = 3;
// matrix element add
vx_e_mat_add(z, &scal, z, NUM_ROWS, NUM_COLS);
vx_print_str("\n\nMatrix Element Addition\n");
print_matrix(z);
// matrix element add
vx_e_mat_mult(z, &scal, z, NUM_ROWS, NUM_COLS);
vx_print_str("\n\nMatrix Element Addition\n");
print_matrix(z);
return 0;

View file

@ -89,7 +89,7 @@ void vx_spawnWarps(unsigned num_Warps, unsigned num_threads, FUNC, void * args)
vx_before_main();
unsigned num_available_warps = vx_available_warps();
vx_printf("Num available warps: ", num_available_warps);
// vx_printf("Num available warps: ", num_available_warps);
asm __volatile__("addi s2, sp, 0");
int warp = 0;