The implementation of TaijiGraph can be divided into two parts: front end and back end.
The backend of TaijiGraph is implemented in the firmware of Cosmos+ OpenSSD. Here we use the dual core as the controller and accelerator for graph computing at the same time.
To build the backend of TaijiGraph, firstly you need to replace the firmware code of Cosmos+ OpenSSD with the controller code in TaijiGraph. Then to invoke the other core in ARM A9, another core need to be programmed using the accelerator code in TaijiGraph.
Xilinx SDK can instruct the two core to run the corresponding code.
The frontend of TaijiGraph is implemented in NVMe-CLI open source project to add new NVMe command to communication with the computational storage. To build TaijiGraph front end, one needs to replace the Makefile and then put the TaijiGraph plugin to the plugins directory in NVMe-CLI file.
TaijiGraph has offline stage for graph data downloading from host file to SSD flah and the graph computing using host+CSD heterogeneous architecture. Command for downloading:
./nvme TaijiGraph download-graph /dev/nvme0n1 -f file_pos -r reorder_method -n partNum -c partChoice -p partDirection -a algorithm -m max_vertex -d directed? -z low_degree_compress?
Command for graph processing:
./nvme TaijiGraph process /dev/nvme0n1 -p parallel? -n if_ISP -a algorithm -i max_iter -v start_vertex -t thread_num -r alpha -d delta -m scheduling_metric?