Download and install the OPINCAA lib and go through the section below "Info on how to run programs on Connex-S".
Try to implement direct, fully-optimized multiply or add for i64 (64-bit int) - you can start getting inspired from the add of i32 already implemented.
This would allow to familiarize fairly well with the Connex computer architecture and its ISA.
Info on how to run programs on the Connex-S vector processor
Download the OPINCAA library and use the tests contained in the ZIP file.
To build OPINCAA and run tests - see opincaalib/README. You should build it in ~/Connex/opincaalib .
To learn to write OPINCAA programs read opincaalib/README_More.txt and opincaalib/ConnexiSA.pdf.
Tests I recommend are:
- opincaalib/examples/Emulate_i32/ADDi32_manual/output.cpp - 32-bit add (maybe also 16-bits floating point add - opincaalib/examples/Emulate_f16/ADD_SUB_f16_manual/output.cpp)
- test/35_MatMul/SIZE_128/output.cpp - see how is performed on Connex Matrix multiplication
- ...
More exactly give:
source ./setenv_OpincaaHome.sh # edit the script to change the path
Run test:
cd test/35_MatMul/SIZE_128/
make
./run_Opincaa_standalone_app.sh &> STD_run_001.txt # At the end look in STD_run_001.txt for string "Test passed OK" # NOTE: if you want you can run with ONLY 8 lanes (easier to read debug info, etc) - use script run_Opincaa_standalone_app_CVL8.sh)
This will employ the OPINCAA Connex simulator, which is very good for debugging. It has asm debugging instructions:
PrintDebugMessage(aStr)
PrintDebugReg(regNum)
Note the assembly language Connex (ISA) available at opincaalib/ConnexISA.pdf. We also have a larger paper explaining the Connex processor!!!!.
Note: if you write Connex vector assembler OPINCAA programs it might have besides wrong semantics also data hazards: in this case the OPINCAA simulator generates in the current director where the simulation runs a file: Error_ConnexSim_OPINCAA_DataHazards.txt. You should then study the debug output of the OPINCAA simulator to see where the data hazard occurs. Then normally you should add NOPs in your vector code inside the OPINCAA kernel. Note that OPINCAA program can automatically get rid at assembly time - see and change e.g. run_Opincaa_standalone_app.sh.