Embedded, Cloud, and HPC
Established in 1992, Gray Technologies specializes in the practice of software engineering principles to develop and deploy complex production-quality software for embedded, cloud, and high performance computing (HPC) systems. Today's desktop, web, and mobile applications comprising the user interfaces that we use daily in all aspects of our lives, require the data and services of a complex network of embedded and cloud technologies forming highly feature rich systems. We specialize in the design and development of the software deployed within the embedded and cloud systems that provide the data and services for those applications and the HPC infrastructure required for computationally intensive processing of the data. Gray Technologies is uniquely positioned to serve the exploding market of embedded and mobile devices within the Internet of Things (IoT) and the cloud platforms and HPC infrastructure required to service them. We provide truly professional software engineering services delivered with the greatest attention to detail and the discipline required to produce well-engineered products.
Embedded systems interact with the physical world. They often contain sensors that measure physical properties, for example a temperature or radiation sensor, and actuators that take a physical action, for example sounding an alarm. Sensor data may be processed and stored within the embedded system and/or transmitted to other systems for storage, sensor integration, and higher-level processing. Embedded systems are often highly constrained by power, size, weight, and environmental requirements which greatly limits their ability to process, store, and transmit data. The software in these systems is typically written in C and assembly language for strict optimization purposes and interfaces to the hardware through an operating system kernel or directly without an OS. The knowledge, experience, and tools required to design and develop this type of software is vastly different from desktop, web, or mobile applications that are highly abstracted from the hardware and rich in resources available to the developer.
Cloud systems interact within a virtual world. Cloud technologies provide the services to create and manage on-demand virtual machines on internet-hosted platforms using web service application program interfaces (APIs). Application programs (desktop, web, or mobile) use these APIs to create and manage the resources they need, when they need them. All aspects of a physical network including the servers, software, database, storage, networking, access management, and security are virtualized and programmable. Additionally, services include auto-scaling of the resources based on demand with load-balancing across the servers. The software in cloud systems is typically written in Java, PHP, Python, Ruby, and other web programming languages and utilize web application frameworks constructed from these languages. The knowledge, experience, and tools required to design and develop this type of software is vastly different from embedded systems and desktop applications and draws heavily on the open source community in highly collaborative projects.
High Performance Computing (HPC) systems can be physical or virtual. The traditional approach to HPC is a physical cluster of multicore compute nodes and storage nodes interconnected with low-latency high-throughput networks, for example InfiniBand or 1Gb/10Gb Ethernet. From their desktop or laptop computers, users use tools such as Secure Shell (SSH) to login to a login node on the cluster to access their stored data, upload and download their working files using Secure FTP (SFTP), and submit batch jobs on one or more compute nodes by issuing a set of Linux commands to a job queueing and scheduling service such as the Portable Batch System (PBS). Complex setups are often required for graphical remote viewing of models and simulation results using graphical processing unit (GPU) nodes.
The traditional HPC system can be complex creating barriers to adoption and use. There is a growing trend to build web service interfaces to HPC centers to "cloudify" and virtualize the HPC services that they offer to make the systems easier to use and to increase adoption and usage of the services either within their organizations or for public commercial use. Web portals, accessed by common web browsers, can then be constructed that use the web services. Web apps that abstract the complexity of the HPC platform and applications can be hosted on these portals providing a much more user friendly HPC experience. The portal can serve up a remote desktop over a secure virtual network computer (VNC) session into a GPU node at the HPC center providing a user-friendly graphical user interface. There is no need for the user to install and maintain software on their local machine. Existing cloud computing service providers such as Amazon Web Services offer HPC virtual machine instances and clusters of those instances as well as GPU nodes for processing and visualization.