Automatic Available Warp/Thread Detection

This commit is contained in:
felsabbagh3 2019-03-19 14:19:00 -04:00
parent f61a013c8e
commit cae4247343
11 changed files with 1952 additions and 1815 deletions

2
TODO
View file

@ -1,5 +1,5 @@
* Automatic warp detection?
* csri bug?
* Start on the Verilog Pipeline (Research loading into mem)

View file

@ -581,23 +581,27 @@ void Instruction::executeOn(Warp &c) {
switch (func3)
{
case 1:
// printf("Case 1\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];
}
c.csr[immsrc & 0x00000FFF] = temp;
break;
case 2:
// printf("Case 2\n");
if (rdest != 0)
{
// printf("Reading from CSR: %d = %d\n", (immsrc & 0x00000FFF), c.csr[immsrc & 0x00000FFF]);
reg[rdest] = c.csr[immsrc & 0x00000FFF];
}
c.csr[immsrc & 0x00000FFF] = temp | c.csr[immsrc & 0x00000FFF];
// printf("Writing to CSR --> %d = %d\n", immsrc, (temp | c.csr[immsrc & 0x00000FFF]));
c.csr[immsrc & 0x00000FFF] = temp | c.csr[immsrc & 0x00000FFF];
break;
case 3:
// printf("Case 3\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];
@ -606,6 +610,7 @@ void Instruction::executeOn(Warp &c) {
break;
case 5:
// printf("Case 5\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];
@ -614,6 +619,7 @@ void Instruction::executeOn(Warp &c) {
break;
case 6:
// printf("Case 6\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];
@ -622,6 +628,7 @@ void Instruction::executeOn(Warp &c) {
break;
case 7:
// printf("Case 7\n");
if (rdest != 0)
{
reg[rdest] = c.csr[immsrc & 0x00000FFF];

File diff suppressed because it is too large Load diff

Binary file not shown.

View file

@ -1,340 +1,357 @@
:0200000480007A
:1000000037F1FF7FEF008018EF10400C7300000005
:10001000938B0600130D0700130F010093030500D7
:1000200013051000635C75001301018013030500C4
:100030006B500300130515006FF0DFFE13010F0076
:1000400013050000930F0600938D0300EBE0BF0142
:10005000170500001305051A6B4005001703000083
:10006000130343FB6B0003006780000017020001CD
:1000700013028225232002002322120023242200BF
:100080002326320023284200232A5200232C620018
:10009000232E720023208202232292022324A20212
:1000A0002326B2022328C202232AD202232CE202F0
:1000B000232EF202232002052322120523242205E7
:1000C0002326320523284205232A5205232C6205C4
:1000D000232E720523208207232292072324A207BE
:1000E0002326B2072328C207232AD207232CE2079C
:1000F000232EF20713021000678000001702000190
:100100001302821C0320020083204200032182008C
:100110008321C200032202018322420103238201C0
:100120008323C201032402028324420203258202A4
:100130008325C20203260203832642030327820388
:100140008327C2030328020483284204032982046C
:100150008329C204032A0205832A4205032B820550
:10016000832BC205032C0206832C4206032D820634
:10017000832DC206032E0207832E4207032F820718
:10018000832FC2071302000067800000130101FEE5
:10019000232E1100232C810013040102232604FEC8
:1001A0006F0000030327C4FE9307404C3307F70298
:1001B000B707008193874734B307F700138507001B
:1001C000EF0040428327C4FE938717002326F4FEE6
:1001D0000327C4FE93077000E3D6E7FC130000007A
:1001E0008320C10103248101130101026780000003
:1001F000130101FD23261102232481022322A103DE
:100200001304010313070D009307404C3307F70253
:10021000B707008193874734B307F70013850700BA
:10022000EF00804D930705006384070493070D00DA
:1002300093850700B707008113850704EF00C05EB0
:1002400013070D00B7070081131727009387472A6C
:10025000B307F7001307100023A0E70093070D0072
:1002600063960700EFF09FE96F00800573000000C0
:1002700013070D009307404C3307F702B7070081BF
:1002800093874734B307F700130784FD93050700EE
:1002900013850700EF00C03D832704FE138107008C
:1002A0008327C4FD832584FD032644FE832684FE24
:1002B0000327C4FE13850700EFF09FD573000000ED
:1002C0008320C10203248102032D41021301010393
:1002D00067800000130101FB2326110423248104FD
:1002E0001304010593090100930710002326F4FE6F
:1002F0006F0040080327C4FE9307404C3307F70202
:10030000B707008193874734B307F70013850700C9
:10031000EF00803E93070500639807040327C4FE9F
:100320009307404C3307F702B707008193874734A0
:10033000B307F700130744FD930507001385070073
:10034000EF0000338327C4FD13810700832784FD5A
:10035000832544FD032604FE832644FE032784FEF2
:1003600013850700EFF09FCF8327C4FE9387170004
:100370002326F4FE0327C4FE93077000E3DCE7F6B0
:1003800013810900EFF09FCEB70700811385870422
:10039000EF0080399307020063880706B7070081E2
:1003A00013854734EF00403593070500639E07042B
:1003B000B707008113858705EF0000379307C4FB5B
:1003C00093850700B707008113854734EF00402A63
:1003D000832704FC93850700B7070081138507076F
:1003E000EF008044832744FC13810700832704FC2B
:1003F0008325C4FB032684FC8326C4FC032704FD59
:1004000013850700EFF0DFC0130000008320C10454
:10041000032481041301010567800000130101FC1E
:10042000232E1102232C8102130401042326A4FC91
:100430002324B4FC2322C4FC2320D4FCEFF01FD5DA
:1004400013090100232604FE232404FE6F00C008C4
:10045000B709FFFF33013101832784FE2328F4FC11
:10046000832784FC232AF4FC93070100232CF4FC4B
:10047000832744FC232EF4FC832704FC2320F4FE72
:100480008327C4FE2322F4FE0327C4FE9307404CB7
:100490003307F702B707008193874734B307F700A4
:1004A000130704FD9305070013850700EF00C0152F
:1004B0008327C4FE938717002326F4FE0327C4FE78
:1004C0009307700063D4E700232604FE832784FE8D
:1004D000938717002324F4FE032784FE8327C4FC9C
:1004E000E368F7F613010900EFF0DFDE1300000008
:1004F0008320C103032481031301010467800000EA
:10050000130101FD2326810213040103232EA4FC01
:10051000232604FE6F004005232604FE232404FE48
:100520006F00C003B7070081032784FE131727005D
:100530009387472AB307F70003A707009307100024
:100540006318F7008327C4FE938717002326F4FE61
:10055000832784FE938717002324F4FE032784FE59
:1005600093077000E3D0E7FC0327C4FE8327C4FD94
:10057000E314F7FA232204FE6F008002B70700811C
:10058000032744FE131727009387472AB307F70072
:1005900023A00700832744FE938717002322F4FE3D
:1005A000832744FE0327C4FDE3EAE7FC13000000B1
:1005B0000324C1021301010367800000130101FF3E
:1005C00023268100232471011304010193870B006A
:1005D000138507000324C100832B8100130101014F
:1005E000678000009302050013030000930370006E
:1005F00023A0620023A2620023A4620023A672004B
:1006000023A86200678000009302050003A3820014
:100610001303130023A462001383420183AE42003C
:1006200093935E003303730003AE05002320C301E0
:1006300003AE45002322C30103AE85002324C3017A
:1006400003AEC5002326C30103AE05012328C30161
:1006500003AE4501232AC301938E1E00130F20030E
:100660006394EE01930E000023A2D2016780000084
:100670009302050003A382001303F3FF23A4620087
:100680001383420183AE0200930F2003138F0E00E9
:10069000130F1F006314FF01130F000023A0E201DA
:1006A00093935E0033037300032E030023A0C50160
:1006B000032E430023A2C501032E830023A4C501FA
:1006C000032EC30023A6C501032E030123A8C501E1
:1006D000032E430123AAC501678000009302050091
:1006E00003A3820013050000130E200363146E00A1
:1006F00013051500678000009302050003A3820024
:1007000013050000130E000063146E00130515009E
:10071000678000009302050003A3C20083A30201C7
:1007200033B5630067800000130141FF23201100EF
:100730002322B1008345050063880500EF00C00156
:10074000130515006FF01FFF832001008325410072
:100750001301C10067800000B708010023A0B800A2
:1007600067800000130101FD23261102232481026A
:1007700013040103232EA4FC0327C4FD9307F000F8
:1007800063E4E702B70700810327C4FD13172700BE
:100790009387471EB307F70083A707001385070059
:1007A000EFF09FF86F004007930700022326F4FE46
:1007B000A30504FE8327C4FE9387C7FF0327C4FD58
:1007C000B357F70093F7F7002322F4FE832744FE84
:1007D0006386070093071000A305F4FE8347B4FE69
:1007E00063820702B7070081032744FE131727001F
:1007F0009387471EB307F70083A7070013850700F9
:10080000EFF09FF28327C4FE9387C7FF2326F4FEF1
:100810008327C4FEE340F0FA8320C102032481024F
:100820001301010367800000130101FE232E110054
:10083000232C8100130401022326A4FE2324B4FEEA
:100840000325C4FEEFF05FEE032584FEEFF09FF179
:10085000B70700811385070CEFF01FED13000000B0
:100860008320C1010324810113010102678000007C
:10087000130101FD23261102232481021304010325
:10088000232EA4FC232CB4FC232AC4FC2328D4FC50
:10089000B73700810327C4FD23A2E798B73700814B
:1008A00093874798032784FD23A2E700B737008189
:1008B00093874798032744FD23A4E700B7370081B7
:1008C00093874798032704FD23A6E700832704FDA9
:1008D00093D737002326F4FE832704FD93F7770090
:1008E000638807008327C4FE938717002326F4FE3E
:1008F000B7370081938747980327C4FE23A8E700F2
:10090000032704FD9307700063F2E702B737008105
:1009100093864798B71700801386C7979305800082
:10092000032504FDEFF09FAF6F000002B737008191
:1009300093864798B71700801386C797832504FDD1
:10094000032504FDEFF09FAD032704FD930780000E
:1009500063F8E70013058000EFF09FBA6F00C00056
:10096000032504FDEFF0DFB9130000008320C1026E
:10097000032481021301010367800000130101FABF
:10098000232E1104232C8104130401062326A4FA28
:100990002324B4FAEFF09FC2232CA4FC832784FD08
:1009A00083A70700232AF4FC832784FD83A747003D
:1009B0002328F4FC832784FD83A787002326F4FCE7
:1009C000832784FD83A707012326F4FE0327C4FEA3
:1009D0008327C4FAB307F7022324F4FE8327C4FE57
:1009E000639A0700930710002326F4FE8327C4FAB6
:1009F0002324F4FE832784FD83A7C7002324F4FC6B
:100A0000232204FE6F004012232004FE232E04FC48
:100A10006F008007032784FA832784FCB307F7025B
:100A20000327C4FDB307F7002322F4FC032784FC4B
:100A30008327C4FDB307F702032784FEB307F7003B
:100A40002320F4FC832744FC93972700032744FDCD
:100A5000B307F70003A70700832704FC9397270039
:100A6000832604FDB387F60083A70700B307F702C8
:100A7000032704FEB307F7002320F4FE8327C4FDF9
:100A800093871700232EF4FC0327C4FD832784FCDF
:100A9000E362F7F8032784FA832784FC3307F7021D
:100AA000832784FEB307F700232EF4FA032784FE7E
:100AB000832784FCB337F70093F7F70F232CF4FA5E
:100AC000832784FB93B71700A30BF4FA834774FBC7
:100AD000138F0700B7170080938F47B16B200F006B
:100AE0007B70FF018327C4FB939727000327C4FC77
:100AF000B307F700032704FE23A0E700832784FE43
:100B0000938717002324F4FEB7170080138E87B154
:100B100067000E00130000006B300000832744FEC6
:100B2000938717002322F4FE832744FE0327C4FE85
:100B3000E3ECE7EC130000008320C10503248105EA
:100B40001301010667800000130101FC232E11022E
:100B5000232C810213040104232EA4FC232CB4FCB7
:100B6000232AC4FC2328D4FC2326E4FCB7370081C5
:100B70000327C4FD23ACE798B73700819387879993
:100B8000032784FD23A2E700B73700819387879965
:100B9000032744FD23A4E700B73700819387879993
:100BA0000327C4FC23A6E700B73700819387879902
:100BB000032704FD23A8E7008327C4FC93D737004D
:100BC0002326F4FE8327C4FC93F77700638807008D
:100BD0008327C4FE938717002326F4FEB7370081CE
:100BE000938787990327C4FE23AAE7000327C4FC41
:100BF0009307700063F2E702B73700819386879905
:100C0000B7170080138687C693058000032504FD6F
:100C1000EFF0DF806F000002B7370081938687997D
:100C2000B7170080138687C68325C4FC032504FDFF
:100C3000EFF0CFFE032704FD9307800063F8E70081
:100C400013058000EFF0DF8B6F00C000032504FD6B
:100C5000EFF01F8B130000008320C10303248103E6
:100C60001301010467800000130101FB2326110416
:100C70002324810413040105232EA4FA232CB4FA9F
:100C8000EFF0DF932320A4FE832704FE83A7070051
:100C9000232EF4FC832704FE83A74700232CF4FCB7
:100CA000832704FE83A78700232AF4FC832704FEFE
:100CB00083A747012326F4FE0327C4FE8327C4FB32
:100CC000B307F7022324F4FE8327C4FE639A0700C8
:100CD000930710002326F4FE8327C4FB2324F4FE8D
:100CE000832704FE83A7C7002328F4FC232204FEE5
:100CF0006F00000C032784FB832704FD3307F702F2
:100D0000832784FEB307F7002326F4FC032784FE21
:100D1000832704FDB337F70093F7F70F2324F4FC80
:100D2000832784FC93B71700A303F4FC834774FC68
:100D3000138F0700B7170080938FC7D96B200F0060
:100D40007B70FF018327C4FC939727000327C4FD12
:100D5000B307F70083A607008327C4FC93972700F7
:100D6000032784FDB307F70003A707008327C4FC0C
:100D700093972700032644FDB307F6003387E60068
:100D800023A0E700832784FE938717002324F4FE23
:100D9000B7170080138E07DA67000E0013000000FB
:100DA0006B300000832744FE938717002322F4FE54
:100DB000832744FE0327C4FEE3EEE7F2130000009E
:100DC0008320C1040324810413010105678000000E
:100DD000130101FC232E1102232C810213040104B0
:100DE000232EA4FC232CB4FC232AC4FC2328D4FCEB
:100DF0002326E4FCB73700810327C4FD23ACE79822
:100E0000B737008193878799032784FD23A2E700E2
:100E1000B737008193878799032744FD23A4E70010
:100E2000B7370081938787990327C4FC23A6E7007F
:100E3000B737008193878799032704FD23A8E7002C
:100E40008327C4FC93D737002326F4FE8327C4FCF2
:100E500093F77700638807008327C4FE9387170002
:100E60002326F4FEB7370081938787990327C4FEB2
:100E700023AAE7000327C4FC9307700063F2E7028C
:100E8000B737008193868799B7170080138607EFDD
:100E900093058000032504FDEFF04FD86F0000029A
:100EA000B737008193868799B7170080138607EFBD
:100EB0008325C4FC032504FDEFF04FD6032704FD72
:100EC0009307800063F8E70013058000EFF04FE31D
:100ED0006F00C000032504FDEFF08FE21300000057
:100EE0008320C103032481031301010467800000F0
:100EF000130101FB2326110423248104130401059B
:100F0000232EA4FA232CB4FAEFF04FEB2320A4FEF7
:100F1000832704FE83A70700232EF4FC832704FE07
:100F200083A74700232CF4FC832704FE83A78700B4
:100F3000232AF4FC832704FE83A747012326F4FE1B
:100F40000327C4FE8327C4FBB307F7022324F4FE60
:100F50008327C4FE639A0700930710002326F4FE3C
:100F60008327C4FB2324F4FE832704FE83A7C70042
:100F70002328F4FC232204FE6F00000C032784FBCB
:100F8000832704FD3307F702832784FEB307F700A6
:100F90002326F4FC032784FE832704FDB337F700E0
:100FA00093F7F70F2324F4FC832784FC93B71700EF
:100FB000A303F4FC834774FC138F0700B71700806A
:100FC000938F47026B200F007B70FF018327C4FCC7
:100FD000939727000327C4FDB307F70083A60700F4
:100FE0008327C4FC93972700032784FDB307F700EA
:100FF00003A707008327C4FC93972700032644FD1B
:10100000B307F6003387E64023A0E700832784FE7A
:10101000938717002324F4FEB7170080138E8702EE
:1010200067000E00130000006B300000832744FEB1
:10103000938717002322F4FE832744FE0327C4FE70
:10104000E3EEE7F2130000008320C10403248104CF
:101050001301010567800000130101FE232E8100AA
:1010600013040102232604FE6F008004B7370081B9
:101070000327C4FE131727009387079BB307F700C6
:101080001307300023A0E700B74700810327C4FE01
:10109000131727009387079BB307F7001307200058
:1010A00023A0E7008327C4FE938717002326F4FEBE
:1010B0000327C4FE9307F003E3DAE7FA1300000006
:1010C0000324C1011301010267800000130101FE26
:1010D000232E1100232C810013040102EFF0DFF70F
:1010E0001307800093061000B75700811386079BF3
:1010F000B74700819385079BB73700811385079B0E
:10110000EFF09FA4B707008113854714EFF0CFE1FC
:10111000B707008113850716EFF00FE1232604FEC1
:101120006F0040058327C4FE93F77700639807009C
:10113000B70700811385C716EFF00FDFB75700819F
:101140000327C4FE131727009387079BB307F700F5
:1011500083A7070013850700EFF0CFE0B7070081F2
:1011600013850717EFF04FDC8327C4FE9387170022
:101170002326F4FE0327C4FE93077000E3D4E7FAA6
:10118000B707008113854717EFF00FDA13078000C8
:1011900093061000B75700811386079BB74700815D
:1011A0009385079BB73700811385079BEFF05FC2DC
:1011B000B707008113854714EFF00FD7B7070081F9
:1011C00013858719EFF04FD6232404FE6F004005E6
:1011D000832784FE93F7770063980700B7070081A1
:1011E0001385C716EFF04FD4B7570081032784FE4D
:1011F000131727009387079BB307F70083A7070000
:1012000013850700EFF00FD6B70700811385071786
:10121000EFF08FD1832784FE938717002324F4FEF9
:10122000032784FE93077000E3D4E7FAB707008131
:1012300013854717EFF04FCF930700001385070082
:101240008320C10103248101130101026780000092
:1000000013054000731005021305800073101502DC
:10001000731040F17310103037F1FF7FEF0080193B
:10002000EF10C01173000000938B0600130D070042
:10003000130F01009303050013051000635C7500A6
:1000400013010180130305006B5003001305150015
:100050006FF0DFFE13010F0013050000930F060081
:10006000938D0300EBE0BF01170500001305051B8E
:100070006B40050017030000130343FB6B000300F4
:1000800067800000170200011302022323200200F0
:100090002322120023242200232632002328420098
:1000A000232A5200232C6200232E72002320820276
:1000B000232292022324A2022326B2022328C20270
:1000C000232AD202232CE202232EF202232002054D
:1000D0002322120523242205232632052328420544
:1000E000232A5205232C6205232E72052320820722
:1000F000232292072324A2072326B2072328C2071C
:10010000232AD207232CE207232EF2071302100022
:1001100067800000170200011302021A0320020088
:1001200083204200032182008321C20003220201B6
:1001300083224201032382018323C201032402029A
:1001400083244202032582028325C202032602037E
:1001500083264203032782038327C2030328020462
:1001600083284204032982048329C204032A020546
:10017000832A4205032B8205832BC205032C02062A
:10018000832C4206032D8206832DC206032E02070E
:10019000832E4207032F8207832FC207130200001A
:1001A000678000007325000267800000732510023D
:1001B00067800000130101FE232E1100232C810013
:1001C00013040102232604FE6F0000030327C4FE6C
:1001D0009307404C3307F702B707008193874733F3
:1001E000B307F70013850700EF0040418327C4FEE3
:1001F000938717002326F4FE0327C4FE930770009D
:10020000E3D6E7FC130000008320C1010324810131
:100210001301010267800000130101FD2326110272
:10022000232481022322A1031304010313070D00D9
:100230009307404C3307F702B70700819387473392
:10024000B307F70013850700EF00804C9307050004
:10025000638A070213070D00B707008113172700F1
:1002600093874729B307F7001307100023A0E7007F
:1002700093070D0063960700EFF0DFE96F0080053C
:100280007300000013070D009307404C3307F7027B
:10029000B707008193874733B307F700130784FD3F
:1002A0009305070013850700EF00003E832704FE37
:1002B000138107008327C4FD832584FD032644FEA4
:1002C000832684FE0327C4FE13850700EFF0DFD5E5
:1002D000730000008320C10203248102032D410228
:1002E0001301010367800000130101FB23261104A1
:1002F0002324810413040105EFF0DFEA2324A4FE84
:1003000093090100930710002326F4FE6F004008B4
:100310000327C4FE9307404C3307F702B707008159
:1003200093874733B307F70013850700EF00403E7C
:1003300093070500639807040327C4FE9307404C06
:100340003307F702B707008193874733B307F700F6
:10035000130704FD9305070013850700EF00C03263
:10036000832784FD13810700832744FD832504FD33
:100370000326C4FD832604FE032744FE13850700DD
:10038000EFF05FCF8327C4FE938717002326F4FE88
:100390008327C4FE032784FEE3ECE7F613810900FC
:1003A000EFF05FCE9307020063880704B707008170
:1003B00013854733EF00C03593070500639E07029E
:1003C000930784FB93850700B707008113854733A4
:1003D000EF00802B832704FC138107008327C4FBD5
: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
:02000004810079
:10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A
:10002000380000003900000061000000620000009C
:10003000630000006400000065000000660000002E
:10004000446F6E653A200000736176656420636FCB
:100050006E746578740A0000666F756E6420736F45
:100060006D657468696E6720666F722077300A006C
:100070006E756D5F746872656164733A200000008C
:1000800030000000310000003200000033000000AA
:10009000340000003500000036000000370000008A
:1000A000380000003900000061000000620000001C
:1000B00063000000640000006500000066000000AE
:1000C0000A00000030000000310000003200000093
:1000D000330000003400000035000000360000004E
:1000E0003700000038000000390000006100000007
:1000F0006200000063000000640000006500000072
:1001000066000000300000003100000032000000F6
:10011000330000003400000035000000360000000D
:1001200037000000380000003900000061000000C6
:100130006200000063000000640000006500000031
:10014000660000002D2D2D2D2D2D2D2D2D2D2D2D2D
:100150002D2D2D2D2D2D2D2D2D2D2D2D2D0A00004C
:1001600046494E414C204144440A00000A00000028
:10017000200000000A2D2D2D2D2D2D2D2D2D2D2D66
:100180002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D9F
:100190002D2D2D2D0A00000046494E414C2053754F
:0301A000620A00F0
:1001A4000000008104000081080000810C0000812F
:1001B4001000008114000081180000811C000081DF
:1001C4002000008124000081280000812C0000818F
:1001D4003000008134000081380000813C0000813F
:1001E4008000008184000081880000818C000081EF
:1001F4009000008194000081980000819C0000819F
:10020400A0000081A4000081A8000081AC0000814E
:10021400B0000081B4000081B8000081BC000081FE
:10022400C4000081C8000081CC000081D00000819E
:10023400D4000081D8000081DC000081E00000814E
:10024400E4000081E8000081EC000081F0000081FE
:10025400F4000081F8000081FC00008100010081AD
:1002640004010081080100810C010081100100815A
:1002740014010081180100811C010081200100810A
:1002840024010081280100812C01008130010081BA
:1002940034010081380100813C010081400100816A
: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
:040000058000000077
:00000001FF

View file

@ -1,5 +1,6 @@
#include "vx_front.h"
#include "../vx_os/vx_back/vx_back.h"
// -------------------------- Matrix Multiplication --------------------------
@ -13,28 +14,34 @@ void vx_sq_mat_mult(void * x, void * y, void * z, unsigned mat_dim)
mat_mult_args.z = z;
mat_mult_args.mat_dim = mat_dim;
unsigned off = (mat_dim/MAX_THREADS);
unsigned num_avail_threads = vx_available_threads();
if ((mat_dim%MAX_THREADS) != 0)
unsigned off = (mat_dim/num_avail_threads);
if ((mat_dim%num_avail_threads) != 0)
{
off += 1;
}
vx_printf("Offset: ", off);
mat_mult_args.offset = off;
if (mat_dim >= MAX_THREADS)
if (mat_dim >= num_avail_threads)
{
vx_spawnWarps(mat_dim, MAX_THREADS, _vx_mat_mult, (void *) (&mat_mult_args));
vx_spawnWarps(mat_dim, num_avail_threads, _vx_mat_mult, (void *) (&mat_mult_args));
}
else
{
vx_spawnWarps(mat_dim, mat_dim, _vx_mat_mult, (void *) (&mat_mult_args));
}
if (mat_dim > MAX_WARPS)
unsigned num_avail_warps = vx_available_warps();
if (mat_dim > num_avail_warps)
{
vx_wait_for_warps(MAX_WARPS);
vx_wait_for_warps(num_avail_warps);
}
else
{
@ -102,9 +109,12 @@ void vx_mat_add(void * x, void * y, void * z, unsigned num_rows, unsigned num_co
mat_r_args.num_cols = num_cols;
mat_r_args.num_rows = num_rows;
unsigned off = (num_cols/MAX_THREADS);
if ((num_cols%MAX_THREADS) != 0)
unsigned num_avail_threads = vx_available_threads();
unsigned off = (num_cols/num_avail_threads);
if ((num_cols%num_avail_threads) != 0)
{
off += 1;
}
@ -112,18 +122,20 @@ void vx_mat_add(void * x, void * y, void * z, unsigned num_rows, unsigned num_co
mat_r_args.offset = off;
if (num_cols >= MAX_THREADS)
if (num_cols >= num_avail_threads)
{
vx_spawnWarps(num_rows, MAX_THREADS, _vx_mat_add, (void *) (&mat_r_args));
vx_spawnWarps(num_rows, num_avail_threads, _vx_mat_add, (void *) (&mat_r_args));
}
else
{
vx_spawnWarps(num_rows, num_cols, _vx_mat_add, (void *) (&mat_r_args));
}
if (num_rows > (MAX_WARPS))
unsigned num_avail_warps = vx_available_warps();
if (num_rows > num_avail_warps)
{
vx_wait_for_warps(MAX_WARPS);
vx_wait_for_warps(num_avail_warps);
}
else
{
@ -182,9 +194,11 @@ void vx_mat_sub(void * x, void * y, void * z, unsigned num_rows, unsigned num_co
mat_r_args.num_cols = num_cols;
mat_r_args.num_rows = num_rows;
unsigned off = (num_cols/MAX_THREADS);
unsigned num_avail_threads = vx_available_threads();
if ((num_cols%MAX_THREADS) != 0)
unsigned off = (num_cols/num_avail_threads);
if ((num_cols%num_avail_threads) != 0)
{
off += 1;
}
@ -192,18 +206,20 @@ void vx_mat_sub(void * x, void * y, void * z, unsigned num_rows, unsigned num_co
mat_r_args.offset = off;
if (num_cols >= MAX_THREADS)
if (num_cols >= num_avail_threads)
{
vx_spawnWarps(num_rows, MAX_THREADS, _vx_mat_sub, (void *) (&mat_r_args));
vx_spawnWarps(num_rows, num_avail_threads, _vx_mat_sub, (void *) (&mat_r_args));
}
else
{
vx_spawnWarps(num_rows, num_cols, _vx_mat_sub, (void *) (&mat_r_args));
}
if (num_rows > (MAX_WARPS))
unsigned num_avail_warps = vx_available_warps();
if (num_rows > num_avail_warps)
{
vx_wait_for_warps(MAX_WARPS);
vx_wait_for_warps(num_avail_warps);
}
else
{

View file

@ -1,9 +1,6 @@
#include "../vx_os/vx_back/vx_back.h"
#include "../vx_os/vx_io/vx_io.h"
#define MAX_WARPS 8
#define MAX_THREADS 8
// -------------------------- Matrix Multiplication --------------------------

View file

@ -5,10 +5,10 @@ unsigned x[1024] = {0};
unsigned y[1024] = {0};
unsigned z[1024] = {0};
#define MAT_DIM 8
#define MAT_DIM 16
#define NUM_COLS 8
#define NUM_ROWS 1
#define NUM_COLS 16
#define NUM_ROWS 16
void initialize_mats()
{
@ -24,18 +24,18 @@ int main()
initialize_mats();
// // matrix multiplication
// vx_sq_mat_mult(x, y, z, MAT_DIM);
// vx_print_str("-------------------------\n");
// vx_print_str("FINAL MAT\n");
// 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");
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");
// matrix addition

View file

@ -5,6 +5,7 @@
void vx_before_main()
{
// unsigned num_available_warps = vx_available_warps();
for (int i = 0; i < 8; i++)
{
queue_initialize(q + i);
@ -20,7 +21,7 @@ void vx_reschedule_warps()
if (queue_isEmpty(q+curr_warp))
{
vx_printf("Done: ", curr_warp);
// vx_printf("Done: ", curr_warp);
done[curr_warp] = 1;
if (curr_warp == 0)
{
@ -44,11 +45,11 @@ void vx_reschedule_warps()
void vx_schedule_warps()
{
unsigned num_available_warps = vx_available_warps();
asm __volatile__("mv s3, sp");
for (int curr_warp = 1; curr_warp < 8; ++curr_warp)
for (int curr_warp = 1; curr_warp < num_available_warps; ++curr_warp)
{
if (!queue_isEmpty(q+curr_warp))
{
@ -64,17 +65,17 @@ void vx_schedule_warps()
vx_save_context();
vx_print_str("saved context\n");
// vx_print_str("saved context\n");
register unsigned val asm("tp");
if (val)
{
if (!queue_isEmpty(q))
{
vx_print_str("found something for w0\n");
// vx_print_str("found something for w0\n");
Job j;
queue_dequeue(q,&j);
vx_printf("num_threads: ", j.n_threads);
// vx_printf("num_threads: ", j.n_threads);
asm __volatile__("mv sp,%0"::"r" (j.base_sp):);
vx_createThreads(j.n_threads, j.wid, j.func_ptr, j.args, j.assigned_warp);
}
@ -83,10 +84,13 @@ void vx_schedule_warps()
}
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);
asm __volatile__("addi s2, sp, 0");
int warp = 0;
for (unsigned i = 0; i < num_Warps; i++)
@ -105,7 +109,7 @@ void vx_spawnWarps(unsigned num_Warps, unsigned num_threads, FUNC, void * args)
queue_enqueue(q + warp,&j);
++warp;
if (warp >= 8) warp = 0;
if (warp >= num_available_warps) warp = 0;
}
asm __volatile__("addi sp, s2, 0");
@ -117,11 +121,12 @@ void vx_spawnWarps(unsigned num_Warps, unsigned num_threads, FUNC, void * args)
void vx_wait_for_warps(unsigned num_wait)
{
// vx_printf("wait for: ", num_wait);
unsigned num_available_warps = vx_available_warps();
unsigned num = 0;
while (num != num_wait)
{
num = 0;
for (int i = 0; i < 8; i++)
for (int i = 0; i < num_available_warps; i++)
{
if (done[i] == 1)
{
@ -131,7 +136,7 @@ void vx_wait_for_warps(unsigned num_wait)
}
// vx_printf("num found: ", num);
for (int i = 0; i < num_wait; i++) done[i] = 0;
for (int i = 0; i < num_available_warps; i++) done[i] = 0;
}

View file

@ -40,6 +40,10 @@ void vx_load_context(void);
#define FUNC void (func)(unsigned, unsigned)
unsigned vx_available_warps(void);
unsigned vx_available_threads(void);
void vx_createThreads(unsigned, unsigned, unsigned, void *, unsigned);
void vx_wspawn(unsigned, unsigned, unsigned, void *, unsigned);
void vx_spawnWarps(unsigned num_Warps, unsigned num_threads, FUNC, void *);

View file

@ -6,6 +6,12 @@
.type _start, @function
.global _start
_start:
li a0, 4 # Num Warps
csrw 0x20, a0 # Setting the number of available warps
li a0, 8 # Num Threads
csrw 0x21, a0 # Setting the number of available threads
csrw mhartid,zero
csrw misa,zero
lui sp, 0x7ffff
jal vx_before_main
jal main
@ -127,3 +133,19 @@ lw x31, 124(tp)
li tp, 0
ret
.type vx_available_warps, @function
.global vx_available_warps
vx_available_warps:
csrr a0, 0x20
ret
.type vx_available_threads, @function
.global vx_available_threads
vx_available_threads:
csrr a0, 0x21
ret