# GPU@SAT DevKit: Empowering Edge Computing Development Onboard Satellites in the Space-IoT Era
## 3 GPU@SAT DevKit
### Client Application and XML Files  
The second component of the GPU@SAT DevKit is the client application, a Python-based software designed to run on the host PC and facilitate communication with the GPU@SAT DevBoard via an Ethernet connection. Python was chosen for its portability, as it requires only an interpreter, making the selection of the host PC more flexible and less restrictive. This ensures that the client application can be easily deployed across various systems without the need for specialized hardware or software environments.  
The client application was developed using a modular architecture, with a Python API specifically created by IngeniArs S.r.l. This API grants users comprehensive access to all the functionalities of the GPU@SAT DevBoard, allowing them to develop custom client applications tailored to their specific requirements while maintaining compatibility with the DevBoard. The modular design empowers users to adapt the client software to different use cases, enhancing the versatility of the DevKit in various development environments.  
One of the primary functions of the client application is to parse xtensible Markup Language (XML) files, which are used to extract configuration details for the DevBoard and to generate the necessary commands for TCP communication between the client and the DevBoard. To facilitate this process, the user is required to provide two specific XML files:  
1. The _configuration file_: This file contains detailed information about the configuration of the DevBoard, including the setup of its components. It serves as a blueprint that guides the initialization and management of the hardware during the execution of tasks.
2. The _scheduler file_: This file defines the order in which the kernels will be executed and includes various execution-related parameters. It plays a crucial role in managing the workflow, ensuring that the kernels are run in the correct sequence and according to the specified settings.  
The configuration file is divided into three sections, each defined by a specific tag. The _dataMemory_ section describes all data memory buffers shared among the kernels and is structured as an array of _memRegion_ objects. The _instructionMemory_ section contains the code for the various kernels to be loaded, organized as an array of _codeRegion_ objects. Lastly, the _descriptors_ section lists the kernel descriptors to be loaded onto the GPU@SAT IP core, arranged as an array of _kernel_ objects. Each element in the configuration file is assigned a unique identifier, known as _id_. These identifiers enhance code readability and allow the client to provide useful debugging information before the data are transferred to the DevBoard.  
The scheduler file, on the other hand, contains the list of kernels to be executed, identified by their _id_ as specified in the configuration file. Additionally, it includes tags that can enable various benchmarking features. Currently, only the _EnableTimeRecording_ tag, which must be set to _true_ to activate time recording for applications, is supported within the DevKit. However, the flexible structure of the client application allows for the seamless integration of additional metrics, which may offer valuable insights from the user's perspective. These metrics will be introduced in future updates.