Main Page

From NaplesPU Documentation
Revision as of 15:52, 31 May 2019 by Francesco (talk | contribs) (Further information on MediaWiki)
Jump to: navigation, search

nu+ is an open-source GPU-like compute core, developed by Alessandro Cilardo's research group at the University of Naples Federico II / CeRICT, now being integrated in the framework of the MANGO FETHPC project. The main objective of nu+ is to enable resource-efficient HPC based on special-purpose customized hardware. In MANGO, the GPU-like core is meant to be used to support architecture-level exploration for massively parallel manycore systems but, as one of its primary objectives, nu+ also targets FPGA-accelerated HPC systems. In that respect, nu+ will provide an FPGA overlay solution, used to readily build tailored processing elements preserving software support, guaranteeing improved resource efficiency, yet avoiding the development of a dedicated accelerator from scratch through the support for familiar programming models.

nu+ manycore architecture

The nu+ manycore is a parametrizable regular mesh Network on Chip (NoC) of configurable tile. Each nu+ tile has the same basic components, it provides a configrable GPU-like open-source softcore meant to be used as a configurable FPGA overlay. This HPC-oriented accelerator merges the SIMT paradigm with vector processor model. Futhermore, each tile has a Cache Controller and a Directory Controller, those components handle data coherence between different cores in different tiles. On top of the customized hardware core, we are also developing a nu+ compiler backend relying on the LLVM infrastructure.

nu+ microarchitecture

The core is based on a RISC in-order pipeline. Its control unit is intentionally kept lightweight. The architecture masks memory and operation latencies by heavily relying on hardware multithreading. By ensuring a light control logic, the core can devote most of its resources for accelerating computing in highly data-parallel kernels. In the hardware multithreading \nuplus architecture, each hardware thread has its own PC, register file, and control registers. The number of threads is user configurable. A \nuplus hardware thread is equivalent to a wavefront in the AMD terminology and a CUDA warp in the NVIDIA terminology. The processor uses a deep pipeline to improve clock speed.

Getting started

This section shows how to approach with nu+ project for simulating or implementing a kernel for nu+ architecture. Kernel means a complex application such as matrix multiplication, transpose of a matrix or similar that is written in a high-level programming language, for example, C/C++.

Required software

Simulation or implementation of any kernel relies on the following dependencies:

  • Git
  • Xilinx Vivado 2018.2 or ModelSim (e.g. Questa Sim-64 vsim 10.6c_1)
  • nu+ toolchain

Building process

The first step is to obtain the source code of nu+ architecture from the official repository by cloning a repository from [1]

In Ubuntu Linux environment, this step is fulfilled by starting following command:

$ git clone 'https://gitlab.com/vincenscotti/nuplus'

In the nu+ repository, toolchain consist of a sub-module of the repository so is needed to update. In Ubuntu Linux environment, just type the following command in a root folder of the repository:

$ git submodule update --init

Then, the third step is to install a toolchain. This process is described [here].

At this point, in a root folder of the repository, there are a few sub-folders. Two of these sub-folders are of particular interest for the purpose:

  • software, where are stored all kernels (in a sub-folder kernel);
  • tools, where are stored all scripts for simulating one or more kernel.

Simulate a kernel

For simulating a kernel there are three-way:

  • starting test.sh script
  • starting setup_project.sh from a root folder of the repository, if simulator software chosen is Vivado;
  • starting simulate.sh from a root folder of the repository, if simulator software chosen is ModelSim.

First of all, is needed to load Vivado or ModelSim function in the shell. This step is mandatory for all ways. In Ubuntu Linux environment, if the simulator software chosen is Vivado, it can be possible by launching the following command:

$ source Vivado/folder/location/settingXX.sh

where XX depends on the installed version of Vivado (32 o 64 bit).

If simulator software chosen is ModelSim, is needed to add environment variable of ModelSim to PATH variable and load a license in the shell. In Ubuntu Linux environment, the commands to launch is:

$ export PATH=$PATH:ModelSim/folder/location/bin/ $ export LM_LICENSE_FILE=1717@vlsi2:$LM_LICENSE_FILE

test.sh script

For start test.sh script, type following command with some options in a nuplus/tools folder:

$ ./test.sh [option]

Options that can be use are:

  • -h, --help show this help
  • -t, --tool=vsim or vivado specify the tool to use, default: vsim
  • -cn, --core-numb=VALUE specify the core number, default: 1
  • -tn, --thread-numb=VALUE specify the thread number, default: 8

This script allows starting one or more kernel defined in an array of the script. The test.sh script provides to compile kernels and run them on nu+ and x86 architecture. Once the simulation is terminated, for each kernel, results of both execution are compared by a Python script for verifying the correctness of result of nu+ architecture.

In folder tools, there is a log file, called cosim.log, where are stored some information about simulation.

setup_project.sh script

For start setup_project.sh script, type following command with some options in a nuplus folder:

$ tools/vivado/setup_project.sh [option]

Options that can be used are:

  • -h, --help show this help
  • -k, --kernel=KERNEL_NAME specify the kernel to use
  • -s, --single-core select the single core configuration, by default the manycore is selected
  • -c, --core-mask=VALUE specify the core activation mask, default: 1
  • -t, --thread-mask=VALUE specify the thread activation mask, default FF
  • -m, --mode=gui or batch specify the tool mode, it can run in either gui or batch mode, default: gui

This script allows starting a kernel specified in the command. The kernel will compile and run on nu+ architecture. Simulation is performed by Vivado:

tools/vivado/setup_project.sh -k mmsc -c 3 -t $(( 16#F )) -m gui

About the parameters:

3 is the one-hot mask that says which core should be active: 3 is (11)2, hence 2 cores; $(( 16#F )) is the one-hot mask that says which thread should be active for a core: F is (00001111)2 so 4 threads active; gui is the mode in which execute Vivado (you can run it as a batch if you prefer).

simulate.sh script

For start simulate.sh script, type following command with some options in a nuplus folder:

$ tools/modelsim/simulate.sh [option]

Options that can be used are:

  • -h, --help show this help
  • -k, --kernel=KERNEL_NAME specify the kernel to use
  • -s, --single-core select the single core configuration, by default the manycore is selected
  • -c, --core-mask=VALUE specify the core activation mask, default: 1
  • -t, --thread-mask=VALUE specify the thread activation mask, default FF
  • -m, --mode=gui or batch specify the tool mode, it can run in either gui or batch mode, default: gui

This script allows starting a kernel specified in the command. The kernel will compile and run on nu+ architecture. Simulation is performed by ModelSim.

Documentation

The nu+ Hardware Architecture

The nu+ Toolchain

The nu+ Instruction Set Architecture

Extending nu+

Heterogeneous Tile

Example of nu+ applications

Further information on MediaWiki

The nu+ project documentation will be based on MediaWiki. For information and guides on using MediaWiki, please see the links below: