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) * Start on the Verilog Pipeline (Research loading into mem)

View File

@@ -581,23 +581,27 @@ void Instruction::executeOn(Warp &c) {
switch (func3) switch (func3)
{ {
case 1: case 1:
// printf("Case 1\n");
if (rdest != 0) if (rdest != 0)
{ {
reg[rdest] = c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
} }
c.csr[immsrc & 0x00000FFF] = temp; c.csr[immsrc & 0x00000FFF] = temp;
break; break;
case 2: case 2:
// printf("Case 2\n");
if (rdest != 0) if (rdest != 0)
{ {
// printf("Reading from CSR: %d = %d\n", (immsrc & 0x00000FFF), c.csr[immsrc & 0x00000FFF]);
reg[rdest] = 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; break;
case 3: case 3:
// printf("Case 3\n");
if (rdest != 0) if (rdest != 0)
{ {
reg[rdest] = c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
@@ -606,6 +610,7 @@ void Instruction::executeOn(Warp &c) {
break; break;
case 5: case 5:
// printf("Case 5\n");
if (rdest != 0) if (rdest != 0)
{ {
reg[rdest] = c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
@@ -614,6 +619,7 @@ void Instruction::executeOn(Warp &c) {
break; break;
case 6: case 6:
// printf("Case 6\n");
if (rdest != 0) if (rdest != 0)
{ {
reg[rdest] = c.csr[immsrc & 0x00000FFF]; reg[rdest] = c.csr[immsrc & 0x00000FFF];
@@ -622,6 +628,7 @@ void Instruction::executeOn(Warp &c) {
break; break;
case 7: case 7:
// printf("Case 7\n");
if (rdest != 0) if (rdest != 0)
{ {
reg[rdest] = c.csr[immsrc & 0x00000FFF]; 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 :0200000480007A
:1000000037F1FF7FEF008018EF10400C7300000005 :1000000013054000731005021305800073101502DC
:10001000938B0600130D0700130F010093030500D7 :10001000731040F17310103037F1FF7FEF0080193B
:1000200013051000635C75001301018013030500C4 :10002000EF10C01173000000938B0600130D070042
:100030006B500300130515006FF0DFFE13010F0076 :10003000130F01009303050013051000635C7500A6
:1000400013050000930F0600938D0300EBE0BF0142 :1000400013010180130305006B5003001305150015
:10005000170500001305051A6B4005001703000083 :100050006FF0DFFE13010F0013050000930F060081
:10006000130343FB6B0003006780000017020001CD :10006000938D0300EBE0BF01170500001305051B8E
:1000700013028225232002002322120023242200BF :100070006B40050017030000130343FB6B000300F4
:100080002326320023284200232A5200232C620018 :1000800067800000170200011302022323200200F0
:10009000232E720023208202232292022324A20212 :100090002322120023242200232632002328420098
:1000A0002326B2022328C202232AD202232CE202F0 :1000A000232A5200232C6200232E72002320820276
:1000B000232EF202232002052322120523242205E7 :1000B000232292022324A2022326B2022328C20270
:1000C0002326320523284205232A5205232C6205C4 :1000C000232AD202232CE202232EF202232002054D
:1000D000232E720523208207232292072324A207BE :1000D0002322120523242205232632052328420544
:1000E0002326B2072328C207232AD207232CE2079C :1000E000232A5205232C6205232E72052320820722
:1000F000232EF20713021000678000001702000190 :1000F000232292072324A2072326B2072328C2071C
:100100001302821C0320020083204200032182008C :10010000232AD207232CE207232EF2071302100022
:100110008321C200032202018322420103238201C0 :1001100067800000170200011302021A0320020088
:100120008323C201032402028324420203258202A4 :1001200083204200032182008321C20003220201B6
:100130008325C20203260203832642030327820388 :1001300083224201032382018323C201032402029A
:100140008327C2030328020483284204032982046C :1001400083244202032582028325C202032602037E
:100150008329C204032A0205832A4205032B820550 :1001500083264203032782038327C2030328020462
:10016000832BC205032C0206832C4206032D820634 :1001600083284204032982048329C204032A020546
:10017000832DC206032E0207832E4207032F820718 :10017000832A4205032B8205832BC205032C02062A
:10018000832FC2071302000067800000130101FEE5 :10018000832C4206032D8206832DC206032E02070E
:10019000232E1100232C810013040102232604FEC8 :10019000832E4207032F8207832FC207130200001A
:1001A0006F0000030327C4FE9307404C3307F70298 :1001A000678000007325000267800000732510023D
:1001B000B707008193874734B307F700138507001B :1001B00067800000130101FE232E1100232C810013
:1001C000EF0040428327C4FE938717002326F4FEE6 :1001C00013040102232604FE6F0000030327C4FE6C
:1001D0000327C4FE93077000E3D6E7FC130000007A :1001D0009307404C3307F702B707008193874733F3
:1001E0008320C10103248101130101026780000003 :1001E000B307F70013850700EF0040418327C4FEE3
:1001F000130101FD23261102232481022322A103DE :1001F000938717002326F4FE0327C4FE930770009D
:100200001304010313070D009307404C3307F70253 :10020000E3D6E7FC130000008320C1010324810131
:10021000B707008193874734B307F70013850700BA :100210001301010267800000130101FD2326110272
:10022000EF00804D930705006384070493070D00DA :10022000232481022322A1031304010313070D00D9
:1002300093850700B707008113850704EF00C05EB0 :100230009307404C3307F702B70700819387473392
:1002400013070D00B7070081131727009387472A6C :10024000B307F70013850700EF00804C9307050004
:10025000B307F7001307100023A0E70093070D0072 :10025000638A070213070D00B707008113172700F1
:1002600063960700EFF09FE96F00800573000000C0 :1002600093874729B307F7001307100023A0E7007F
:1002700013070D009307404C3307F702B7070081BF :1002700093070D0063960700EFF0DFE96F0080053C
:1002800093874734B307F700130784FD93050700EE :100280007300000013070D009307404C3307F7027B
:1002900013850700EF00C03D832704FE138107008C :10029000B707008193874733B307F700130784FD3F
:1002A0008327C4FD832584FD032644FE832684FE24 :1002A0009305070013850700EF00003E832704FE37
:1002B0000327C4FE13850700EFF09FD573000000ED :1002B000138107008327C4FD832584FD032644FEA4
:1002C0008320C10203248102032D41021301010393 :1002C000832684FE0327C4FE13850700EFF0DFD5E5
:1002D00067800000130101FB2326110423248104FD :1002D000730000008320C10203248102032D410228
:1002E0001304010593090100930710002326F4FE6F :1002E0001301010367800000130101FB23261104A1
:1002F0006F0040080327C4FE9307404C3307F70202 :1002F0002324810413040105EFF0DFEA2324A4FE84
:10030000B707008193874734B307F70013850700C9 :1003000093090100930710002326F4FE6F004008B4
:10031000EF00803E93070500639807040327C4FE9F :100310000327C4FE9307404C3307F702B707008159
:100320009307404C3307F702B707008193874734A0 :1003200093874733B307F70013850700EF00403E7C
:10033000B307F700130744FD930507001385070073 :1003300093070500639807040327C4FE9307404C06
:10034000EF0000338327C4FD13810700832784FD5A :100340003307F702B707008193874733B307F700F6
:10035000832544FD032604FE832644FE032784FEF2 :10035000130704FD9305070013850700EF00C03263
:1003600013850700EFF09FCF8327C4FE9387170004 :10036000832784FD13810700832744FD832504FD33
:100370002326F4FE0327C4FE93077000E3DCE7F6B0 :100370000326C4FD832604FE032744FE13850700DD
:1003800013810900EFF09FCEB70700811385870422 :10038000EFF05FCF8327C4FE938717002326F4FE88
:10039000EF0080399307020063880706B7070081E2 :100390008327C4FE032784FEE3ECE7F613810900FC
:1003A00013854734EF00403593070500639E07042B :1003A000EFF05FCE9307020063880704B707008170
:1003B000B707008113858705EF0000379307C4FB5B :1003B00013854733EF00C03593070500639E07029E
:1003C00093850700B707008113854734EF00402A63 :1003C000930784FB93850700B707008113854733A4
:1003D000832704FC93850700B7070081138507076F :1003D000EF00802B832704FC138107008327C4FBD5
:1003E000EF008044832744FC13810700832704FC2B :1003E000832584FB032644FC832684FC0327C4FC6A
:1003F0008325C4FB032684FC8326C4FC032704FD59 :1003F00013850700EFF05FC3130000008320C104E2
:1004000013850700EFF0DFC0130000008320C10454 :10040000032481041301010567800000130101FB2F
:10041000032481041301010567800000130101FC1E :10041000232611042324810413040105232EA4FAA6
:10042000232E1102232C8102130401042326A4FC91 :10042000232CB4FA232AC4FA2328D4FAEFF09FD855
:100430002324B4FC2322C4FC2320D4FCEFF01FD5DA :10043000EFF05FD72322A4FE832544FEB707008197
:1004400013090100232604FE232404FE6F00C008C4 :1004400013850704EF00C03F13090100232604FEB3
:10045000B709FFFF33013101832784FE2328F4FC11 :10045000232404FE6F00C008B709FFFF33013101F8
:10046000832784FC232AF4FC93070100232CF4FC4B :10046000832784FE2326F4FC832784FB2328F4FCC3
:10047000832744FC232EF4FC832704FC2320F4FE72 :1004700093070100232AF4FC832744FB232CF4FC7C
:100480008327C4FE2322F4FE0327C4FE9307404CB7 :10048000832704FB232EF4FC8327C4FE2320F4FEE1
:100490003307F702B707008193874734B307F700A4 :100490000327C4FE9307404C3307F702B7070081D8
:1004A000130704FD9305070013850700EF00C0152F :1004A00093874733B307F7001307C4FC930507008E
:1004B0008327C4FE938717002326F4FE0327C4FE78 :1004B00013850700EF00C0168327C4FE938717003B
:1004C0009307700063D4E700232604FE832784FE8D :1004C0002326F4FE8327C4FE032744FE63E4E700EB
:1004D000938717002324F4FE032784FE8327C4FC9C :1004D000232604FE832784FE938717002324F4FE3B
:1004E000E368F7F613010900EFF0DFDE1300000008 :1004E000032784FE8327C4FBE368F7F613010900A2
:1004F0008320C103032481031301010467800000EA :1004F000EFF09FDF130000008320C1040324810478
:10050000130101FD2326810213040103232EA4FC01 :100500001301010567800000130101FD232611027C
:10051000232604FE6F004005232604FE232404FE48 :100510002324810213040103232EA4FCEFF09FC8BF
:100520006F00C003B7070081032784FE131727005D :100520002320A4FE232604FE6F004005232604FE9C
:100530009387472AB307F70003A707009307100024 :10053000232404FE6F00C003B7070081032784FE55
:100540006318F7008327C4FE938717002326F4FE61 :100540001317270093874729B307F70003A707006E
:10055000832784FE938717002324F4FE032784FE59 :10055000930710006318F7008327C4FE93871700E2
:1005600093077000E3D0E7FC0327C4FE8327C4FD94 :100560002326F4FE832784FE938717002324F4FEBA
:10057000E314F7FA232204FE6F008002B70700811C :10057000832784FE032704FEE3E0E7FC0327C4FE91
:10058000032744FE131727009387472AB307F70072 :100580008327C4FDE314F7FA232204FE6F008002E0
:1005900023A00700832744FE938717002322F4FE3D :10059000B7070081032744FE1317270093874729D5
:1005A000832744FE0327C4FDE3EAE7FC13000000B1 :1005A000B307F70023A00700832744FE93871700B3
:1005B0000324C1021301010367800000130101FF3E :1005B0002322F4FE832744FE032704FEE3EAE7FC3C
:1005C00023268100232471011304010193870B006A :1005C000130000008320C1020324810213010103F0
:1005D000138507000324C100832B8100130101014F :1005D00067800000130101FF23268100232471019D
:1005E000678000009302050013030000930370006E :1005E0001304010193870B00138507000324C10046
:1005F00023A0620023A2620023A4620023A672004B :1005F000832B810013010101678000009302050035
:1006000023A86200678000009302050003A3820014 :10060000130300009303700023A0620023A2620082
:100610001303130023A462001383420183AE42003C :1006100023A4620023A6720023A862006780000062
:1006200093935E003303730003AE05002320C301E0 :100620009302050003A382001303130023A46200B6
:1006300003AE45002322C30103AE85002324C3017A :100630001383420183AE420093935E003303730041
:1006400003AEC5002326C30103AE05012328C30161 :1006400003AE05002320C30103AE45002322C301EE
:1006500003AE4501232AC301938E1E00130F20030E :1006500003AE85002324C30103AEC5002326C301D6
:100660006394EE01930E000023A2D2016780000084 :1006600003AE05012328C30103AE4501232AC301BC
:100670009302050003A382001303F3FF23A4620087 :10067000938E1E00130F20036394EE01930E00006F
:100680001383420183AE0200930F2003138F0E00E9 :1006800023A2D201678000009302050003A3820029
:10069000130F1F006314FF01130F000023A0E201DA :100690001303F3FF23A462001383420183AE02001D
:1006A00093935E0033037300032E030023A0C50160 :1006A000930F2003138F0E00130F1F006314FF011D
:1006B000032E430023A2C501032E830023A4C501FA :1006B000130F000023A0E20193935E003303730045
:1006C000032EC30023A6C501032E030123A8C501E1 :1006C000032E030023A0C501032E430023A2C5016E
:1006D000032E430123AAC501678000009302050091 :1006D000032E830023A4C501032EC30023A6C50156
:1006E00003A3820013050000130E200363146E00A1 :1006E000032E030123A8C501032E430123AAC5013C
:1006F00013051500678000009302050003A3820024 :1006F000678000009302050003A382001305000039
:1007000013050000130E000063146E00130515009E :10070000130E200363146E001305150067800000AC
:10071000678000009302050003A3C20083A30201C7 :100710009302050003A3820013050000130E0000DE
:1007200033B5630067800000130141FF23201100EF :1007200063146E0013051500678000009302050036
:100730002322B1008345050063880500EF00C00156 :1007300003A3C20083A3020133B5630067800000F6
:10074000130515006FF01FFF832001008325410072 :10074000130141FF232011002322B100834505003E
:100750001301C10067800000B708010023A0B800A2 :1007500063880500EF00C001130515006FF01FFF4F
:1007600067800000130101FD23261102232481026A :1007600083200100832541001301C1006780000040
:1007700013040103232EA4FC0327C4FD9307F000F8 :10077000B708010023A0B80067800000130101FD45
:1007800063E4E702B70700810327C4FD13172700BE :10078000232611022324810213040103232EA4FC37
:100790009387471EB307F70083A707001385070059 :100790000327C4FD9307F00063E4E702B707008175
:1007A000EFF09FF86F004007930700022326F4FE46 :1007A0000327C4FD131727009387471DB307F700DE
:1007B000A30504FE8327C4FE9387C7FF0327C4FD58 :1007B00083A7070013850700EFF09FF86F0040073D
:1007C000B357F70093F7F7002322F4FE832744FE84 :1007C000930700022326F4FEA30504FE8327C4FE3C
:1007D0006386070093071000A305F4FE8347B4FE69 :1007D0009387C7FF0327C4FDB357F70093F7F700CC
:1007E00063820702B7070081032744FE131727001F :1007E0002322F4FE832744FE63860700930710004C
:1007F0009387471EB307F70083A7070013850700F9 :1007F000A305F4FE8347B4FE63820702B7070081B6
:10080000EFF09FF28327C4FE9387C7FF2326F4FEF1 :10080000032744FE131727009387471DB307F700FC
:100810008327C4FEE340F0FA8320C102032481024F :1008100083A7070013850700EFF09FF28327C4FE2C
:100820001301010367800000130101FE232E110054 :100820009387C7FF2326F4FE8327C4FEE340F0FA34
:10083000232C8100130401022326A4FE2324B4FEEA :100830008320C102032481021301010367800000A9
:100840000325C4FEEFF05FEE032584FEEFF09FF179 :10084000130101FE232E1100232C81001304010249
:10085000B70700811385070CEFF01FED13000000B0 :100850002326A4FE2324B4FE0325C4FEEFF05FEE9E
:100860008320C1010324810113010102678000007C :10086000032584FEEFF09FF1B70700811385870908
:10087000130101FD23261102232481021304010325 :10087000EFF01FED130000008320C101032481016C
:10088000232EA4FC232CB4FC232AC4FC2328D4FC50 :100880001301010267800000130101FD23261102FC
:10089000B73700810327C4FD23A2E798B73700814B :100890002324810213040103232EA4FC232CB4FC83
:1008A00093874798032784FD23A2E700B737008189 :1008A000232AC4FC2328D4FCB73700810327C4FDC6
:1008B00093874798032744FD23A4E700B7370081B7 :1008B00023AAE796B737008193874797032784FDDC
:1008C00093874798032704FD23A6E700832704FDA9 :1008C00023A2E700B737008193874797032744FDAA
:1008D00093D737002326F4FE832704FD93F7770090 :1008D00023A4E700B737008193874797032704FDD8
:1008E000638807008327C4FE938717002326F4FE3E :1008E00023A6E700EFF09F8C2324A4FE032704FD3A
:1008F000B7370081938747980327C4FE23A8E700F2 :1008F000832784FEB357F7022326F4FE032704FD63
:10090000032704FD9307700063F2E702B737008105 :10090000832784FEB377F702638807008327C4FE3A
:1009100093864798B71700801386C7979305800082 :10091000938717002326F4FE8325C4FEB7070081C2
:10092000032504FDEFF09FAF6F000002B737008191 :100920001385C70DEFF0DFF1B73700819387479745
:1009300093864798B71700801386C797832504FDD1 :100930000327C4FE23A8E700032704FD832784FEC2
:10094000032504FDEFF09FAD032704FD930780000E :100940006362F702B737008193864797B717008035
:1009500063F8E70013058000EFF09FBA6F00C00056 :100950001386C79B832584FE032504FDEFF01FABA0
:10096000032504FDEFF0DFB9130000008320C1026E :100960006F000002B737008193864797B717008062
:10097000032481021301010367800000130101FABF :100970001386C79B832504FD032504FDEFF01FA903
:10098000232E1104232C8104130401062326A4FA28 :10098000EFF05F822322A4FE032704FD832744FEA9
:100990002324B4FAEFF09FC2232CA4FC832784FD08 :1009900063F8E700032544FEEFF01FB76F00C000C7
:1009A00083A70700232AF4FC832784FD83A747003D :1009A000032504FDEFF05FB6130000008320C102B1
:1009B0002328F4FC832784FD83A787002326F4FCE7 :1009B000032481021301010367800000130101FA7F
:1009C000832784FD83A707012326F4FE0327C4FEA3 :1009C000232E1104232C8104130401062326A4FAE8
:1009D0008327C4FAB307F7022324F4FE8327C4FE57 :1009D0002324B4FAEFF01FC0232CA4FC832784FD4A
:1009E000639A0700930710002326F4FE8327C4FAB6 :1009E00083A70700232AF4FC832784FD83A74700FD
:1009F0002324F4FE832784FD83A7C7002324F4FC6B :1009F0002328F4FC832784FD83A787002326F4FCA7
:100A0000232204FE6F004012232004FE232E04FC48 :100A0000832784FD83A707012326F4FE0327C4FE62
:100A10006F008007032784FA832784FCB307F7025B :100A10008327C4FAB307F7022324F4FE8327C4FE16
:100A20000327C4FDB307F7002322F4FC032784FC4B :100A2000639A0700930710002326F4FE8327C4FA75
:100A30008327C4FDB307F702032784FEB307F7003B :100A30002324F4FE832784FD83A7C7002324F4FC2A
:100A40002320F4FC832744FC93972700032744FDCD :100A4000232204FE6F004012232004FE232E04FC08
:100A5000B307F70003A70700832704FC9397270039 :100A50006F008007032784FA832784FCB307F7021B
:100A6000832604FDB387F60083A70700B307F702C8 :100A60000327C4FDB307F7002322F4FC032784FC0B
:100A7000032704FEB307F7002320F4FE8327C4FDF9 :100A70008327C4FDB307F702032784FEB307F700FB
:100A800093871700232EF4FC0327C4FD832784FCDF :100A80002320F4FC832744FC93972700032744FD8D
:100A9000E362F7F8032784FA832784FC3307F7021D :100A9000B307F70003A70700832704FC93972700F9
:100AA000832784FEB307F700232EF4FA032784FE7E :100AA000832604FDB387F60083A70700B307F70288
:100AB000832784FCB337F70093F7F70F232CF4FA5E :100AB000032704FEB307F7002320F4FE8327C4FDB9
:100AC000832784FB93B71700A30BF4FA834774FBC7 :100AC00093871700232EF4FC0327C4FD832784FC9F
:100AD000138F0700B7170080938F47B16B200F006B :100AD000E362F7F8032784FA832784FC3307F702DD
:100AE0007B70FF018327C4FB939727000327C4FC77 :100AE000832784FEB307F700232EF4FA032784FE3E
:100AF000B307F700032704FE23A0E700832784FE43 :100AF000832784FCB337F70093F7F70F232CF4FA1E
:100B0000938717002324F4FEB7170080138E87B154 :100B0000832784FB93B71700A30BF4FA834774FB86
:100B100067000E00130000006B300000832744FEC6 :100B1000138F0700B7170080938F47B56B200F0026
:100B2000938717002322F4FE832744FE0327C4FE85 :100B20007B70FF018327C4FB939727000327C4FC36
:100B3000E3ECE7EC130000008320C10503248105EA :100B3000B307F700032704FE23A0E700832784FE02
:100B40001301010667800000130101FC232E11022E :100B4000938717002324F4FEB7170080138E87B510
:100B5000232C810213040104232EA4FC232CB4FCB7 :100B500067000E00130000006B300000832744FE86
:100B6000232AC4FC2328D4FC2326E4FCB7370081C5 :100B6000938717002322F4FE832744FE0327C4FE45
:100B70000327C4FD23ACE798B73700819387879993 :100B7000E3ECE7EC130000008320C10503248105AA
:100B8000032784FD23A2E700B73700819387879965 :100B80001301010667800000130101FC232E1102EE
:100B9000032744FD23A4E700B73700819387879993 :100B9000232C810213040104232EA4FC232CB4FC77
:100BA0000327C4FC23A6E700B73700819387879902 :100BA000232AC4FC2328D4FC2326E4FCB737008185
:100BB000032704FD23A8E7008327C4FC93D737004D :100BB0000327C4FD23A4E798B7370081938787985C
:100BC0002326F4FE8327C4FC93F77700638807008D :100BC000032784FD23A2E700B73700819387879826
:100BD0008327C4FE938717002326F4FEB7370081CE :100BD000032744FD23A4E700B73700819387879854
:100BE000938787990327C4FE23AAE7000327C4FC41 :100BE0000327C4FC23A6E700B737008193878798C3
:100BF0009307700063F2E702B73700819386879905 :100BF000032704FD23A8E700EFF04FDB2324A4FE26
:100C0000B7170080138687C693058000032504FD6F :100C00000327C4FC832784FEB357F7022326F4FE90
:100C1000EFF0DF806F000002B7370081938687997D :100C10000327C4FC832784FEB377F70263880700A9
:100C2000B7170080138687C68325C4FC032504FDFF :100C20008327C4FE938717002326F4FEB73700817D
:100C3000EFF0CFFE032704FD9307800063F8E70081 :100C3000938787980327C4FE23AAE7000327C4FCF1
:100C400013058000EFF0DF8B6F00C000032504FD6B :100C4000832784FE6362F702B73700819386879813
:100C5000EFF01F8B130000008320C10303248103E6 :100C5000B7170080138607CC832584FE032504FD87
:100C60001301010467800000130101FB2326110416 :100C6000EFF0CFFA6F000002B737008193868798C4
:100C70002324810413040105232EA4FA232CB4FA9F :100C7000B7170080138607CC8325C4FC032504FD29
:100C8000EFF0DF932320A4FE832704FE83A7070051 :100C8000EFF0CFF8EFF00FD22322A4FE032704FDEC
:100C9000232EF4FC832704FE83A74700232CF4FCB7 :100C9000832744FE63F8E700032544FEEFF0DF8678
:100CA000832704FE83A78700232AF4FC832704FEFE :100CA0006F00C000032504FDEFF01F861300000055
:100CB00083A747012326F4FE0327C4FE8327C4FB32 :100CB0008320C10303248103130101046780000022
:100CC000B307F7022324F4FE8327C4FE639A0700C8 :100CC000130101FB232611042324810413040105CD
:100CD000930710002326F4FE8327C4FB2324F4FE8D :100CD000232EA4FA232CB4FAEFF0DF8F2320A4FEF6
:100CE000832704FE83A7C7002328F4FC232204FEE5 :100CE000832704FE83A70700232EF4FC832704FE3A
:100CF0006F00000C032784FB832704FD3307F702F2 :100CF00083A74700232CF4FC832704FE83A78700E7
:100D0000832784FEB307F7002326F4FC032784FE21 :100D0000232AF4FC832704FE83A747012326F4FE4D
:100D1000832704FDB337F70093F7F70F2324F4FC80 :100D10000327C4FE8327C4FBB307F7022324F4FE92
:100D2000832784FC93B71700A303F4FC834774FC68 :100D20008327C4FE639A0700930710002326F4FE6E
:100D3000138F0700B7170080938FC7D96B200F0060 :100D30008327C4FB2324F4FE832704FE83A7C70074
:100D40007B70FF018327C4FC939727000327C4FD12 :100D40002328F4FC232204FE6F00000C032784FBFD
:100D5000B307F70083A607008327C4FC93972700F7 :100D5000832704FD3307F702832784FEB307F700D8
:100D6000032784FDB307F70003A707008327C4FC0C :100D60002326F4FC032784FE832704FDB337F70012
:100D700093972700032644FDB307F6003387E60068 :100D700093F7F70F2324F4FC832784FC93B7170021
:100D800023A0E700832784FE938717002324F4FE23 :100D8000A303F4FC834774FC138F0700B71700809C
:100D9000B7170080138E07DA67000E0013000000FB :100D9000938F47DF6B200F007B70FF018327C4FC1C
:100DA0006B300000832744FE938717002322F4FE54 :100DA000939727000327C4FDB307F70083A6070026
:100DB000832744FE0327C4FEE3EEE7F2130000009E :100DB0008327C4FC93972700032784FDB307F7001C
:100DC0008320C1040324810413010105678000000E :100DC00003A707008327C4FC93972700032644FD4D
:100DD000130101FC232E1102232C810213040104B0 :100DD000B307F6003387E60023A0E700832784FEED
:100DE000232EA4FC232CB4FC232AC4FC2328D4FCEB :100DE000938717002324F4FEB7170080138E87DF44
:100DF0002326E4FCB73700810327C4FD23ACE79822 :100DF00067000E00130000006B300000832744FEE4
:100E0000B737008193878799032784FD23A2E700E2 :100E0000938717002322F4FE832744FE0327C4FEA2
:100E1000B737008193878799032744FD23A4E70010 :100E1000E3EEE7F2130000008320C1040324810401
:100E2000B7370081938787990327C4FC23A6E7007F :100E20001301010567800000130101FC232E11024C
:100E3000B737008193878799032704FD23A8E7002C :100E3000232C810213040104232EA4FC232CB4FCD4
:100E40008327C4FC93D737002326F4FE8327C4FCF2 :100E4000232AC4FC2328D4FC2326E4FCB7370081E2
:100E500093F77700638807008327C4FE9387170002 :100E50000327C4FD23A4E798B737008193878798B9
:100E60002326F4FEB7370081938787990327C4FEB2 :100E6000032784FD23A2E700B73700819387879883
:100E700023AAE7000327C4FC9307700063F2E7028C :100E7000032744FD23A4E700B737008193878798B1
:100E8000B737008193868799B7170080138607EFDD :100E80000327C4FC23A6E700B73700819387879820
:100E900093058000032504FDEFF04FD86F0000029A :100E9000032704FD23A8E700EFF04FB12324A4FEAD
:100EA000B737008193868799B7170080138607EFBD :100EA0000327C4FC832784FEB357F7022326F4FEEE
:100EB0008325C4FC032504FDEFF04FD6032704FD72 :100EB0000327C4FC832784FEB377F7026388070007
:100EC0009307800063F8E70013058000EFF04FE31D :100EC0008327C4FE938717002326F4FEB7370081DB
:100ED0006F00C000032504FDEFF08FE21300000057 :100ED000938787980327C4FE23AAE7000327C4FC4F
:100EE0008320C103032481031301010467800000F0 :100EE000832784FE6362F702B73700819386879871
:100EF000130101FB2326110423248104130401059B :100EF000B7170080138607F6832584FE032504FDBB
:100F0000232EA4FA232CB4FAEFF04FEB2320A4FEF7 :100F0000EFF0CFD06F000002B7370081938687984B
:100F1000832704FE83A70700232EF4FC832704FE07 :100F1000B7170080138607F68325C4FC032504FD5C
:100F200083A74700232CF4FC832704FE83A78700B4 :100F2000EFF0CFCEEFF00FA82322A4FE032704FD9D
:100F3000232AF4FC832704FE83A747012326F4FE1B :100F3000832744FE63F8E700032544FEEFF0CFDC8F
:100F40000327C4FE8327C4FBB307F7022324F4FE60 :100F40006F00C000032504FDEFF00FDC130000006C
:100F50008327C4FE639A0700930710002326F4FE3C :100F50008320C1030324810313010104678000007F
:100F60008327C4FB2324F4FE832704FE83A7C70042 :100F6000130101FB2326110423248104130401052A
:100F70002328F4FC232204FE6F00000C032784FBCB :100F7000232EA4FA232CB4FAEFF0CFE52320A4FE0D
:100F8000832704FD3307F702832784FEB307F700A6 :100F8000832704FE83A70700232EF4FC832704FE97
:100F90002326F4FC032784FE832704FDB337F700E0 :100F900083A74700232CF4FC832704FE83A7870044
:100FA00093F7F70F2324F4FC832784FC93B71700EF :100FA000232AF4FC832704FE83A747012326F4FEAB
:100FB000A303F4FC834774FC138F0700B71700806A :100FB0000327C4FE8327C4FBB307F7022324F4FEF0
:100FC000938F47026B200F007B70FF018327C4FCC7 :100FC0008327C4FE639A0700930710002326F4FECC
:100FD000939727000327C4FDB307F70083A60700F4 :100FD0008327C4FB2324F4FE832704FE83A7C700D2
:100FE0008327C4FC93972700032784FDB307F700EA :100FE0002328F4FC232204FE6F00000C032784FB5B
:100FF00003A707008327C4FC93972700032644FD1B :100FF000832704FD3307F702832784FEB307F70036
:10100000B307F6003387E64023A0E700832784FE7A :101000002326F4FC032784FE832704FDB337F7006F
:10101000938717002324F4FEB7170080138E8702EE :1010100093F7F70F2324F4FC832784FC93B717007E
:1010200067000E00130000006B300000832744FEB1 :10102000A303F4FC834774FC138F0700B7170080F9
:10103000938717002322F4FE832744FE0327C4FE70 :10103000938F47096B200F007B70FF018327C4FC4F
:10104000E3EEE7F2130000008320C10403248104CF :10104000939727000327C4FDB307F70083A6070083
:101050001301010567800000130101FE232E8100AA :101050008327C4FC93972700032784FDB307F70079
:1010600013040102232604FE6F008004B7370081B9 :1010600003A707008327C4FC93972700032644FDAA
:101070000327C4FE131727009387079BB307F700C6 :10107000B307F6003387E64023A0E700832784FE0A
:101080001307300023A0E700B74700810327C4FE01 :10108000938717002324F4FEB7170080138E870977
:10109000131727009387079BB307F7001307200058 :1010900067000E00130000006B300000832744FE41
:1010A00023A0E7008327C4FE938717002326F4FEBE :1010A000938717002322F4FE832744FE0327C4FE00
:1010B0000327C4FE9307F003E3DAE7FA1300000006 :1010B000E3EEE7F2130000008320C104032481045F
:1010C0000324C1011301010267800000130101FE26 :1010C0001301010567800000130101FE232E81003A
:1010D000232E1100232C810013040102EFF0DFF70F :1010D00013040102232604FE6F008004B737008149
:1010E0001307800093061000B75700811386079BF3 :1010E0000327C4FE131727009387079AB307F70057
:1010F000B74700819385079BB73700811385079B0E :1010F0001307300023A0E700B74700810327C4FE91
:10110000EFF09FA4B707008113854714EFF0CFE1FC :10110000131727009387079AB307F70013072000E8
:10111000B707008113850716EFF00FE1232604FEC1 :1011100023A0E7008327C4FE938717002326F4FE4D
:101120006F0040058327C4FE93F77700639807009C :101120000327C4FE9307F00FE3DAE7FA1300000089
:10113000B70700811385C716EFF00FDFB75700819F :101130000324C1011301010267800000130101FEB5
:101140000327C4FE131727009387079BB307F700F5 :10114000232E1100232C810013040102EFF0DFF79E
:1011500083A7070013850700EFF0CFE0B7070081F2 :1011500093060001B75700811386079AB7470081AD
:1011600013850717EFF04FDC8327C4FE9387170022 :101160009385079AB73700811385079AEFF0CFF17F
:101170002326F4FE0327C4FE93077000E3D4E7FAA6 :10117000B707008113858712EFF08FDCB707008176
:10118000B707008113854717EFF00FDA13078000C8 :1011800013854714EFF0CFDB232604FE6F004005E4
:1011900093061000B75700811386079BB74700815D :101190008327C4FE93F7F70063980700B707008121
:1011A0009385079BB73700811385079BEFF05FC2DC :1011A00013850715EFF0CFD9B75700810327C4FE89
:1011B000B707008113854714EFF00FD7B7070081F9 :1011B000131727009387079AB307F70083A7070041
:1011C00013858719EFF04FD6232404FE6F004005E6 :1011C00013850700EFF08FDBB70700811385471504
:1011D000832784FE93F7770063980700B7070081A1 :1011D000EFF00FD78327C4FE938717002326F4FE72
:1011E0001385C716EFF04FD4B7570081032784FE4D :1011E0000327C4FE9307F00FE3D4E7FAB7070081A3
:1011F000131727009387079BB307F70083A7070000 :1011F00013858715EFF0CFD4130700019306000184
:1012000013850700EFF00FD6B70700811385071786 :10120000B75700811386079AB74700819385079ADD
:10121000EFF08FD1832784FE938717002324F4FEF9 :10121000B73700811385079AEFF01F97B707008152
:10122000032784FE93077000E3D4E7FAB707008131 :1012200013858712EFF0CFD1B70700811385C71759
:1012300013854717EFF04FCF930700001385070082 :10123000EFF00FD1232404FE6F004005832784FEC6
:101240008320C10103248101130101026780000092 :1012400093F7F70063980700B70700811385071528
:10125000EFF00FCFB7570081032784FE1317270045
:101260009387079AB307F70083A707001385070042
:10127000EFF0CFD0B707008113854715EFF04FCCC3
:10128000832784FE938717002324F4FE032784FE1C
:101290009307F00FE3D4E7FAB707008113858715AA
:1012A000EFF00FCA1307000193060001B757008142
:1012B0001386079AB74700819385079AB73700814D
:1012C0001385079AEFF05FB6B70700811385871281
:1012D000EFF00FC7B707008113858718EFF04FC6EF
:1012E000232204FE6F004005832744FE93F7F70096
:1012F00063980700B707008113850715EFF04FC407
:10130000B7570081032744FE131727009387079AD6
:10131000B307F70083A7070013850700EFF00FC698
:10132000B707008113854715EFF08FC1832744FE6F
:10133000938717002322F4FE032744FE9307F00F40
:10134000E3D4E7FAB707008113858715EFF04FBFA5
:1013500093070000138507008320C1010324810146
:08136000130101026780000087
:02000004810079 :02000004810079
:10000000300000003100000032000000330000002A :10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A :10001000340000003500000036000000370000000A
:10002000380000003900000061000000620000009C :10002000380000003900000061000000620000009C
:10003000630000006400000065000000660000002E :10003000630000006400000065000000660000002E
:10004000446F6E653A200000736176656420636FCB :100040004E756D20617661696C61626C65207761C7
:100050006E746578740A0000666F756E6420736F45 :100050007270733A20000000300000003100000090
:100060006D657468696E6720666F722077300A006C :1000600032000000330000003400000035000000C2
:100070006E756D5F746872656164733A200000008C :1000700036000000370000003800000039000000A2
:1000800030000000310000003200000033000000AA :1000800061000000620000006300000064000000E6
:10009000340000003500000036000000370000008A :1000900065000000660000000A000000300000005B
:1000A000380000003900000061000000620000001C :1000A0003100000032000000330000003400000086
:1000B00063000000640000006500000066000000AE :1000B0003500000036000000370000003800000066
:1000C0000A00000030000000310000003200000093 :1000C00039000000610000006200000063000000D1
:1000D000330000003400000035000000360000004E :1000D0006400000065000000660000004F66667363
:1000E0003700000038000000390000006100000007 :1000E00065743A200000000030000000310000007C
:1000F0006200000063000000640000006500000072 :1000F0003200000033000000340000003500000032
:1001000066000000300000003100000032000000F6 :100100003600000037000000380000003900000011
:10011000330000003400000035000000360000000D :100110006100000062000000630000006400000055
:1001200037000000380000003900000061000000C6 :1001200065000000660000002D2D2D2D2D2D2D2D9C
:100130006200000063000000640000006500000031 :100130002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DEF
:10014000660000002D2D2D2D2D2D2D2D2D2D2D2D2D :100140002D0A000046494E414C204D41540A000002
:100150002D2D2D2D2D2D2D2D2D2D2D2D2D0A00004C :100150000A000000200000000A2D2D2D2D2D2D2D30
:1001600046494E414C204144440A00000A00000028 :100160002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2DBF
:10017000200000000A2D2D2D2D2D2D2D2D2D2D2D66 :100170002D2D2D2D2D2D2D2D0A00000046494E41EF
:100180002D2D2D2D2D2D2D2D2D2D2D2D2D2D2D2D9F :100180004C204144440A000046494E414C205375DE
:100190002D2D2D2D0A00000046494E414C2053754F :03019000620A0000
:0301A000620A00F0 :100194000000008104000081080000810C0000813F
:1001A4000000008104000081080000810C0000812F :1001A4001000008114000081180000811C000081EF
:1001B4001000008114000081180000811C000081DF :1001B4002000008124000081280000812C0000819F
:1001C4002000008124000081280000812C0000818F :1001C4003000008134000081380000813C0000814F
:1001D4003000008134000081380000813C0000813F :1001D400580000815C00008160000081640000819F
:1001E4008000008184000081880000818C000081EF :1001E400680000816C00008170000081740000814F
:1001F4009000008194000081980000819C0000819F :1001F400780000817C0000818000008184000081FF
:10020400A0000081A4000081A8000081AC0000814E :10020400880000818C0000819000008194000081AE
:10021400B0000081B4000081B8000081BC000081FE :100214009C000081A0000081A4000081A80000814E
:10022400C4000081C8000081CC000081D00000819E :10022400AC000081B0000081B4000081B8000081FE
:10023400D4000081D8000081DC000081E00000814E :10023400BC000081C0000081C4000081C8000081AE
:10024400E4000081E8000081EC000081F0000081FE :10024400CC000081D0000081D4000081D80000815E
:10025400F4000081F8000081FC00008100010081AD :10025400E8000081EC000081F0000081F4000081DE
:1002640004010081080100810C010081100100815A :10026400F8000081FC00008100010081040100818C
:1002740014010081180100811C010081200100810A :10027400080100810C01008110010081140100813A
:1002840024010081280100812C01008130010081BA :10028400180100811C0100812001008124010081EA
:1002940034010081380100813C010081400100816A
:040000058000000077 :040000058000000077
:00000001FF :00000001FF

View File

@@ -1,5 +1,6 @@
#include "vx_front.h" #include "vx_front.h"
#include "../vx_os/vx_back/vx_back.h"
// -------------------------- Matrix Multiplication -------------------------- // -------------------------- 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.z = z;
mat_mult_args.mat_dim = mat_dim; 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; off += 1;
} }
vx_printf("Offset: ", off);
mat_mult_args.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 else
{ {
vx_spawnWarps(mat_dim, mat_dim, _vx_mat_mult, (void *) (&mat_mult_args)); 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 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_cols = num_cols;
mat_r_args.num_rows = num_rows; 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; 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; 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 else
{ {
vx_spawnWarps(num_rows, num_cols, _vx_mat_add, (void *) (&mat_r_args)); 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 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_cols = num_cols;
mat_r_args.num_rows = num_rows; 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; 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; 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 else
{ {
vx_spawnWarps(num_rows, num_cols, _vx_mat_sub, (void *) (&mat_r_args)); 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 else
{ {

View File

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

View File

@@ -5,10 +5,10 @@ unsigned x[1024] = {0};
unsigned y[1024] = {0}; unsigned y[1024] = {0};
unsigned z[1024] = {0}; unsigned z[1024] = {0};
#define MAT_DIM 8 #define MAT_DIM 16
#define NUM_COLS 8 #define NUM_COLS 16
#define NUM_ROWS 1 #define NUM_ROWS 16
void initialize_mats() void initialize_mats()
{ {
@@ -24,18 +24,18 @@ int main()
initialize_mats(); initialize_mats();
// // matrix multiplication // matrix multiplication
// vx_sq_mat_mult(x, y, z, MAT_DIM); vx_sq_mat_mult(x, y, z, MAT_DIM);
// vx_print_str("-------------------------\n"); vx_print_str("-------------------------\n");
// vx_print_str("FINAL MAT\n"); vx_print_str("FINAL MAT\n");
// for (int j = 0; j < (MAT_DIM * MAT_DIM); j++) for (int j = 0; j < (MAT_DIM * MAT_DIM); j++)
// { {
// if ((j % MAT_DIM) == 0) vx_print_str("\n"); if ((j % MAT_DIM) == 0) vx_print_str("\n");
// vx_print_hex(z[j]); vx_print_hex(z[j]);
// vx_print_str(" "); vx_print_str(" ");
// } }
// vx_print_str("\n-------------------------------\n"); vx_print_str("\n-------------------------------\n");
// matrix addition // matrix addition

View File

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

View File

@@ -6,6 +6,12 @@
.type _start, @function .type _start, @function
.global _start .global _start
_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 lui sp, 0x7ffff
jal vx_before_main jal vx_before_main
jal main jal main
@@ -127,3 +133,19 @@ lw x31, 124(tp)
li tp, 0 li tp, 0
ret 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