Depending on the target (see figure below), we can provide different levels of optimization. However not all target are view as independent. For example, optimization done for supercomputers usually benefit to cluster target and, at a lower extent, to powerful computers. Similarly, application for internet of things (I.O.T.) are often prepared on embedded test-platform. Recently, unified solution have been successfully used for crossing targets. However, at OVHPA – High Performance Applications, we believe that there is always some benefit in optimizing each target individually.
Firstly, optimizing for performance on a given architecture depends, by definition, explicitly on the choice of a specific hardware. For supercomputers and clusters, this means not only CPUs, in addition to vector processing units (such as GPUs), but also the interconnection technology, and the resulting network topology, are critical. For regular computer and smaller targets, the network technology might not be so important. Using I.O.T. and microcontrollers, the trade-off from performance to application size becomes the leading factor, while for these architectures, the resulting codes is often hardly portable.
Another important aspect it the safety of an application. For supercomputers and clusters, security is most likely enforced system-wide. It means that, for the performance-only oriented application that run on these platform, the only security measure is going to be staying up to date with libraries and codes. On regular computers, the traditional target of attacks, the safety of an application must be in par with its access. Depending on the operating system, some general solutions exists (for example sandbox) but these solutions can’t replace a good auditing of the code of your applications. While printers and smartphone have also been subject to a lot of security issues, it seems that the focus of attack is likely to switch to embedded and I.O.T. systems. There are many reasons for that, but one point is that users generally won’t see these target as a thread at all. It is easy to view internet box as a potential problem, but who is going to suspect the smart-watch or connected toothbrush? But connected objects are really plausible means to let intruders steal credit card information and WiFi password. This is why it is always important to plan functionality of your applications base on needs: does your I.O.T. really need to receive information from another applications, and what kind? Should we store passwords on device, should it use signature, how do we keep encrypted keys on such a limited space? For these systems, all of these questions must be answered even before we start coding.
In all cases, we at OVHPA – High Performance Applications, believe that the most important step for a secure, optimized, application is heavily and constantly proofing of the code:
- by producing clear, unambiguous codes, if possible using declarative languages, C and Fortran for example, with a solid documentation;
- by using clear (and documented) optimization directives, separating as much as possible different platforms;
- by only linking necessary libraries, and using establish and well maintained one;
- by having many, many testing with different users, some of which having a little to no idea about how the application is actually working.
By trying to keep these simple guidelines, and having a reactive initial support, your application will not only be optimized and sure, it will be known for it.