This commit is contained in:
felsabbagh3
2019-11-05 22:57:05 -05:00
parent b44505f1f4
commit fcd3bbc4a1
8 changed files with 915 additions and 809 deletions

View File

@@ -9,6 +9,7 @@ CPY = /opt/riscv/bin/riscv32-unknown-elf-objcopy
VX_STR = ./startup/vx_start.s
VX_INT = ./intrinsics/vx_intrinsics.s
VX_IO = ./io/vx_io.s ./io/vx_io.c
VX_API = ./vx_api/vx_api.c
VX_TEST = ./tests/tests.c
VX_MAIN = ./vx_main.c
@@ -22,4 +23,4 @@ HEX: ELF
$(CPY) -O ihex vortex_runtime.elf vortex_runtime.hex
ELF:
$(COMP) $(CC_FLAGS) $(VX_STR) $(VX_INT) $(VX_IO) $(VX_TEST) $(VX_MAIN) -o vortex_runtime.elf
$(COMP) $(CC_FLAGS) $(VX_STR) $(VX_INT) $(VX_IO) $(VX_API) $(VX_TEST) $(VX_MAIN) -o vortex_runtime.elf

View File

@@ -3,22 +3,13 @@
.type _start, @function
.global _start
_start:
la a1, vx_set_sp
li a0, 4
la a1, 0x40004326
sw a0, 0(a1)
nop
nop
nop
lw a2, 0(a1)
.word 0x00b5106b # wspawn a0(numWarps), a1(PC SPAWN)
jal vx_set_sp
jal main
li a0, 0
.word 0x0005006b # tmc a0
# la a1, vx_set_sp
# li a0, 4
# .word 0x00b5106b # wspawn a0(numWarps), a1(PC SPAWN)
# jal vx_set_sp
# jal main
# li a0, 0
# .word 0x0005006b # tmc a0
.type vx_set_sp, @function

File diff suppressed because it is too large Load Diff

Binary file not shown.

View File

@@ -1,132 +1,128 @@
:0200000480007A
:1000000013054000B74500409385053223A0A500A5
:1000100013000000130000001300000003A60500F9
:10002000130500006B000500130540006B00050080
:10003000F32610029396F600732600029315A6008D
:100040001316260037F1FF6F3301B1403301D14061
:100050003301C100F3261002638606001305000079
:100060006B000500678000006B10B5006780000022
:100070006B000500678000006B40B50067800000E2
:100080006B200500678000006B3000006780000077
:10009000732510026780000073250002678000004E
:1000A000130540006B000500F32610029396F6003E
:1000B000732600029315A6001316260037F1FF6F72
:1000C0003301B1403301D1403301C100F3261002A6
:1000D00063860600130500006B00050067800000C2
:1000E000130141FF232011002322B10083450500A5
:1000F00063880500EF00C001130515006FF01FFFB6
:1001000083200100832541001301C10067800000A6
:10011000B702010023A0B20067800000130101FEB6
:10012000232E1100232C8100130401022326A4FE98
:10013000B70700810327C4FE131727009387470FD3
:10014000B307F70083A7070013850700EFF05FF9F7
:10015000130000008320C101032481011301010267
:1001600067800000130101FE232E1100232C810063
:10017000130401022326A4FE2324B4FE0325C4FE97
:10018000EFF01FF6032584FEEFF05FF9B70700815B
:1001900013850704EFF0DFF4130000008320C10192
:1001A000032481011301010267800000130101FE95
:1001B000232E1100232C810013040102B7070081B4
:1001C00083A7C72313850700EFF09FEAB7070081D5
:1001D00003A78723B707008183A747231385070059
:1001E000E7000700EFF0DFEA2326A4FE8327C4FE22
:1001F0006388070013050000EFF09FE76F00C00061
:1002000013051000EFF0DFE6130000008320C101AA
:10021000032481011301010267800000130101FE24
:10022000232E1100232C8100130401022326A4FE97
:100230002324B4FE2322C4FE2320D4FEB70700816A
:10024000032744FE23ACE722B7070081032704FEFF
:1002500023AAE722B7070081032784FE23AEE72203
:10026000832744FE938507000325C4FEEFF0DFDFFC
:10027000EFF0DFF3130000008320C10103248101AC
:100280001301010267800000130101FE232E1100FB
:10029000232C810013040102B7070081138547084E
:1002A000EFF01FE413054000EFF09FDCEFF0DFDE1E
:1002B0002326A4FE0327C4FEB70700818326C4FEBD
:1002C0009396260093870724B387F60023A0E700C0
:1002D00013051000EFF0DFD9B707008183A70724CB
:1002E00013850700EFF09FE3B70700811385070927
:1002F000EFF01FDFB70700819387072483A747002C
:1003000013850700EFF09FE1B70700811385070908
:10031000EFF01FDDB70700819387072483A78700CD
:1003200013850700EFF09FDFB707008113850709EA
:10033000EFF01FDBB70700819387072483A7C7006F
:1003400013850700EFF09FDDB707008113850709CC
:10035000EFF01FD9130000008320C10103248101A5
:100360001301010267800000130101FE232E11001A
:10037000232C810013040102EFF01FD22326A4FED8
:100380008327C4FE93B72700A305F4FE8347B4FE7A
:1003900013850700EFF0DFCE8347B4FE63840706C2
:1003A0008327C4FE93B717002305F4FE8347A4FEFA
:1003B00013850700EFF0DFCC8347A4FE63820702BA
:1003C000B70700810327C4FE13172700938707246C
:1003D000B307F7001307A00023A0E7006F00000297
:1003E000B70700810327C4FE13172700938707244C
:1003F000B307F7001307B00023A0E700EFF0DFC852
:100400006F0040068327C4FE93B73700A304F4FEB1
:10041000834794FE13850700EFF09FC6834794FE41
:1004200063820702B70700810327C4FE1317270062
:1004300093870724B307F7001307C00023A0E70042
:100440006F000002B70700810327C4FE13172700BF
:1004500093870724B307F7001307D00023A0E70012
:10046000EFF09FC2EFF05FC2B707008183A70724B8
:1004700013850700EFF09FCAB707008113850709AE
:10048000EFF01FC6B70700819387072483A74700B3
:1004900013850700EFF09FC8B70700811385070990
:1004A000EFF01FC4B70700819387072483A7870055
:1004B00013850700EFF09FC6B70700811385070972
:1004C000EFF01FC2B70700819387072483A7C700F7
:1004D00013850700EFF09FC4B70700811385070954
:1004E000EFF01FC0130000008320C101032481012D
:1004F0001301010267800000130101FE232E110089
:10050000232C810013040102EFF09FB82326A4FEE0
:10051000B70700810327C4FE131727009387072519
:10052000B307F7000327C4FE23A0E7008327C4FE18
:100530006386070013050000EFF09FB3130000006F
:100540008320C1010324810113010102678000009F
:10055000130101FE232E1100232C8100130401023C
:10056000B70700809387874F2326F4FE8325C4FEB8
:1005700013054000EFF05FAFEFF01FF8B707008101
:1005800083A7072513850700EFF05FB9B707008140
:1005900013850709EFF0DFB4B707008193870725BC
:1005A00083A7470013850700EFF05FB7B707008107
:1005B00013850709EFF0DFB2B7070081938707259E
:1005C00083A7870013850700EFF05FB5B7070081A9
:1005D00013850709EFF0DFB0B70700819387072580
:1005E00083A7C70013850700EFF05FB3B70700814B
:1005F00013850709EFF0DFAE130000008320C1016F
:10060000032481011301010267800000130101FF2F
:10061000232611002324810013040101EFF0DFC61B
:10062000B707008113854709EFF09FAB1305400022
:10063000EFF01FA4EFF05FD313051000EFF05FA3FE
:10064000B70700811385870AEFF09FA9EFF05FF0ED
:10065000130000008320C100032481001301010165
:1006600067800000130101FC232E1102232C81025C
:10067000130401042326A4FC8327C4FC2326F4FED0
:10068000EFF01FA12324A4FEEFF01FA12322A4FE5C
:100690008327C4FE83A70701032784FE637EF70038
:1006A0008327C4FE83A7C700032744FE6376F700B1
:1006B000930710006F00800093070000A301F4FE71
:1006C000834734FE93F71700A301F4FE834734FEFB
:1006D00013850700EFF0DF9A834734FE6386070631
:1006E0008327C4FE03A7C700832784FEB307F7024E
:1006F000032744FEB307F700232EF4FC8327C4FE30
:1007000003A707008327C4FD93972700B307F700CB
:1007100083A607008327C4FE03A747008327C4FDE1
:1007200093972700B307F70003A707008327C4FEAA
:1007300003A687008327C4FD93972700B307F6001D
:100740003387E60023A0E700EFF01F9413000000BA
:100750008320C10303248103130101046780000087
:10076000130101FD23261102232481021304010336
:1007700013051000EFF0DF8FB70700819387471B49
:10078000232AF4FCB70700819387471F232CF4FC2E
:10079000B707008193870726232EF4FC93074000B8
:1007A0002320F4FE930740002322F4FE9307400029
:1007B0002326F4FE930740002324F4FE0327C4FEFF
:1007C000832584FE930744FD93860700B7070080C6
:1007D0001386476613050700EFF05FA49307000038
:1007E000138507008320C102032481021301010342
:0407F000678000001E
:100000009705000093850502130540006B10B500AD
:10001000EF000001EF004074130500006B000500C5
:10002000130540006B000500F32610029396F600BE
:10003000732600029315A6001316260037F1FF6FF2
:100040003301B1403301D1403301C100F326100226
:1000500063860600130500006B0005006780000042
:100060006B10B500678000006B0005006780000022
:100070006B40B500678000006B20050067800000C2
:100080006B3000006780000073251002678000005D
:100090007325000267800000130540006B00050017
:1000A000F32610029396F600732600029315A6001D
:1000B0001316260037F1FF6F3301B1403301D140F1
:1000C0003301C100F3261002638606001305000009
:1000D0006B00050067800000130141FF2320110021
:1000E0002322B1008345050063880500EF00C001AD
:1000F000130515006FF01FFF8320010083254100C9
:100100001301C10067800000B702010023A0B20004
:1001100067800000130101FE232E1100232C8100B3
:10012000130401022326A4FEB70700810327C4FE9F
:100130001317270093878711B307F70083A70700DA
:1001400013850700EFF05FF9130000008320C10161
:10015000032481011301010267800000130101FEE5
:10016000232E1100232C8100130401022326A4FE58
:100170002324B4FE0325C4FEEFF01FF6032584FEFE
:10018000EFF05FF9B707008113850704EFF0DFF4A4
:10019000130000008320C101032481011301010227
:1001A00067800000130101FE232E1100232C810023
:1001B00013040102B707008183A7072613850700F0
:1001C000EFF09FEAB707008103A7C725B7070081B3
:1001D00083A7872513850700E7000700EFF0DFEA14
:1001E0002326A4FE8327C4FE6388070013050000AE
:1001F000EFF09FE76F00C00013051000EFF0DFE69F
:10020000130000008320C1010324810113010102B6
:1002100067800000130101FE232E1100232C8100B2
:10022000130401022326A4FE2324B4FE2322C4FEC9
:100230002320D4FEB7070081032744FE23AEE72422
:10024000B7070081032704FE23ACE724B70700812A
:10025000032784FE23A0E726832744FE9385070017
:100260000325C4FEEFF0DFDFEFF0DFF31300000043
:100270008320C10103248101130101026780000072
:10028000130101FE232E1100232C8100130401020F
:10029000B707008113854708EFF01FE413054000FE
:1002A000EFF09FDCEFF0DFDE2326A4FE0327C4FE81
:1002B000B70700818326C4FE9396260093874726BE
:1002C000B387F60023A0E70013051000EFF0DFD995
:1002D000B707008183A7472613850700EFF09FE348
:1002E000B707008113850709EFF01FDFB70700810B
:1002F0009387472683A7470013850700EFF09FE108
:10030000B707008113850709EFF01FDDB7070081EC
:100310009387472683A7870013850700EFF09FDFA9
:10032000B707008113850709EFF01FDBB7070081CE
:100330009387472683A7C70013850700EFF09FDD4B
:10034000B707008113850709EFF01FD913000000DC
:100350008320C10103248101130101026780000091
:10036000130101FE232E1100232C8100130401022E
:10037000EFF01FD22326A4FE8327C4FE93B72700E5
:10038000A305F4FE8347B4FE13850700EFF0DFCE2C
:100390008347B4FE638407068327C4FE93B7170020
:1003A0002305F4FE8347A4FE13850700EFF0DFCC9E
:1003B0008347A4FE63820702B70700810327C4FEB8
:1003C0001317270093874726B307F7001307A000EA
:1003D00023A0E7006F000002B70700810327C4FED7
:1003E0001317270093874726B307F7001307B000BA
:1003F00023A0E700EFF0DFC86F0040068327C4FEAC
:1004000093B73700A304F4FE834794FE13850700D7
:10041000EFF09FC6834794FE63820702B70700810F
:100420000327C4FE1317270093874726B307F70057
:100430001307C00023A0E7006F000002B707008188
:100440000327C4FE1317270093874726B307F70037
:100450001307D00023A0E700EFF09FC2EFF05FC2C8
:10046000B707008183A7472613850700EFF09FCACF
:10047000B707008113850709EFF01FC6B707008192
:100480009387472683A7470013850700EFF09FC88F
:10049000B707008113850709EFF01FC4B707008174
:1004A0009387472683A7870013850700EFF09FC631
:1004B000B707008113850709EFF01FC2B707008156
:1004C0009387472683A7C70013850700EFF09FC4D3
:1004D000B707008113850709EFF01FC01300000064
:1004E0008320C10103248101130101026780000000
:1004F000130101FE232E1100232C8100130401029D
:10050000EFF09FB82326A4FEB70700810327C4FE9F
:100510001317270093874727B307F7000327C4FE65
:1005200023A0E7008327C4FE6386070013050000AD
:10053000EFF09FB3130000008320C1010324810169
:100540001301010267800000130101FE232E110038
:10055000232C810013040102B70700809387074F03
:100560002326F4FE8325C4FE13054000EFF05FAFA1
:10057000EFF01FF8B707008183A74727138507000F
:10058000EFF05FB9B707008113850709EFF0DFB41B
:10059000B70700819387472783A747001385070084
:1005A000EFF05FB7B707008113850709EFF0DFB2FF
:1005B000B70700819387472783A787001385070024
:1005C000EFF05FB5B707008113850709EFF0DFB0E3
:1005D000B70700819387472783A7C70013850700C4
:1005E000EFF05FB3B707008113850709EFF0DFAEC7
:1005F000130000008320C1010324810113010102C3
:1006000067800000130101FF2326110023248100CD
:1006100013040101EFF0DFC6B70700811385470916
:10062000EFF09FAB13054000EFF01FA4EFF05FD396
:1006300013051000EFF05FA3B70700811385870A49
:10064000EFF09FA9EFF05FF0130000008320C100DE
:10065000032481001301010167800000130101FCE4
:10066000232E1102232C8102130401042326A4FC4F
:100670008327C4FC2326F4FEEFF01FA12324A4FE4D
:10068000EFF01FA12322A4FE8327C4FE83A7070146
:10069000032784FE637EF7008327C4FE83A7C70079
:1006A000032744FE6376F700930710006F00800075
:1006B00093070000A301F4FE834734FE93F717006D
:1006C000A301F4FE834734FE13850700EFF0DF9AA1
:1006D000834734FE638607068327C4FE03A7C7004B
:1006E000832784FEB307F702032744FEB307F7000E
:1006F000232EF4FC8327C4FE03A707008327C4FD31
:1007000093972700B307F70083A607008327C4FE4B
:1007100003A747008327C4FD93972700B307F7007B
:1007200003A707008327C4FE03A687008327C4FD11
:1007300093972700B307F6003387E60023A0E7006E
:10074000EFF01F94130000008320C10303248103F2
:100750001301010467800000130101FF232611002B
:10076000232481001304010113051000EFF0DF8F33
:10077000EFF01FB1B70700811385470FEFF0DF954A
:1007800013054000EFF05F8EEFF09FBD13051000E2
:10079000EFF09F8DB707008113858710EFF0DF938F
:1007A000EFF09FDA93070000138507008320C10054
:0C07B00003248100130101016780000098
:02000004810079
:10000000300000003100000032000000330000002A
:10001000340000003500000036000000370000000A
@@ -143,26 +139,28 @@
:1000C000330000003400000035000000360000005E
:1000D0003700000038000000390000006100000017
:1000E0006200000063000000640000006500000082
:0200F0006600A8
:1000F4000000008104000081080000810C000081E0
:100104001000008114000081180000811C0000818F
:100114002000008124000081280000812C0000813F
:100124003000008134000081380000813C000081EF
:1001340044000081480000814C000081500000818F
:1001440054000081580000815C000081600000813F
:1001540064000081680000816C00008170000081EF
:1001640074000081780000817C000081800000819F
:10017400B4000081B8000081BC000081C00000818F
:10018400C4000081C8000081CC000081D00000813F
:10019400D4000081D8000081DC000081E0000081EF
:1001A400E4000081E8000081EC000081F00000819F
:1001B4000100000001000000010000000100000037
:1001C4000100000001000000010000000100000027
:1001D4000100000001000000010000000100000017
:1001E4000100000001000000010000000100000007
:1001F40006000000060000000600000006000000E3
:1002040006000000060000000600000006000000D2
:1002140006000000060000000600000006000000C2
:1002240006000000060000000600000006000000B2
:1000F00066000000746573745F6469766572676595
:100100006E63650A00000000746573745F77737036
:0501100061776E0A009A
:100118000000008104000081080000810C000081BB
:100128001000008114000081180000811C0000816B
:100138002000008124000081280000812C0000811B
:100148003000008134000081380000813C000081CB
:1001580044000081480000814C000081500000816B
:1001680054000081580000815C000081600000811B
:1001780064000081680000816C00008170000081CB
:1001880074000081780000817C000081800000817B
:10019800B4000081B8000081BC000081C00000816B
:1001A800C4000081C8000081CC000081D00000811B
:1001B800D4000081D8000081DC000081E0000081CB
:1001C800E4000081E8000081EC000081F00000817B
:1001D8000100000001000000010000000100000013
:1001E8000100000001000000010000000100000003
:1001F80001000000010000000100000001000000F3
:1002080001000000010000000100000001000000E2
:1002180006000000060000000600000006000000BE
:1002280006000000060000000600000006000000AE
:10023800060000000600000006000000060000009E
:10024800060000000600000006000000060000008E
:040000058000000077
:00000001FF

37
runtime/vx_api/vx_api.c Normal file
View File

@@ -0,0 +1,37 @@
#include "../intrinsics/vx_intrinsics.h"
#include "vx_api.h"
func_t global_function_pointer;
// void (func_t)(void *)
void * global_argument_struct;
unsigned global_num_threads;
void setup_call()
{
vx_tmc(global_num_threads);
global_function_pointer(global_argument_struct);
unsigned wid = vx_warpID();
if (wid != 0)
{
vx_tmc(0); // Halt Warp Execution
}
else
{
vx_tmc(1); // Only activate one thread
}
}
void vx_spawnWarps(unsigned numWarps, unsigned numThreads, func_t func_ptr, void * args)
{
global_function_pointer = func_ptr;
global_argument_struct = args;
global_num_threads = numThreads;
vx_wspawn(numWarps, (unsigned) func_ptr);
setup_call();
}

18
runtime/vx_api/vx_api.h Normal file
View File

@@ -0,0 +1,18 @@
#ifndef VX_API_
#define VX_API_
typedef void (*func_t)(void *);
void vx_spawnWarps(unsigned numWarps, unsigned numThreads, func_t func_ptr , void * args);
#endif

View File

@@ -2,11 +2,71 @@
#include "intrinsics/vx_intrinsics.h"
#include "io/vx_io.h"
#include "tests/tests.h"
#include "vx_api/vx_api.h"
typedef struct
{
unsigned * x;
unsigned * y;
unsigned * z;
unsigned numColums;
unsigned numRows;
} mat_add_args_t;
unsigned x[] = {1, 1, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1,
1, 1, 1, 1};
unsigned y[] = {6, 6, 6, 6,
6, 6, 6, 6,
6, 6, 6, 6,
6, 6, 6, 6};
unsigned z[] = {0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0,
0, 0, 0, 0};
void mat_add_kernel(void * void_arguments)
{
mat_add_args_t * arguments = (mat_add_args_t *) void_arguments;
unsigned wid = vx_warpID();
unsigned tid = vx_threadID();
bool valid = (wid < arguments->numRows) && (tid < arguments->numColums);
__if (valid)
{
unsigned index = (wid * arguments->numColums) + tid;
arguments->z[index] = arguments->x[index] + arguments->y[index];
}
__endif
}
int main()
{
// Main is called with all threads active of warp 0
vx_tmc(1);
///////////////////////////////////////////////////////////////////////
// mat_add_args_t arguments;
// arguments.x = x;
// arguments.y = y;
// arguments.z = z;
// arguments.numColums = 4;
// arguments.numRows = 4;
// int numWarps = 4;
// int numThreads = 4;
// vx_spawnWarps(numWarps, numThreads, mat_add_kernel, &arguments);
///////////////////////////////////////////////////////////////////////
/*
NOTE: * when test_wspawn is called from instrinsic_tests, RA 80000458 is stored at address 6fffefbc,
@@ -19,6 +79,7 @@ int main()
*/
// intrinsics_tests();
///////////////////////////////////////////////////////////////////////
test_tmc();