Windows CE è morto? Lunga vita a Linux e Wine

(lo stile di scrittura di questo post è volutamente leggero, ma l’argomento è dannatamente serio!)

Ormai sono 18 anni che lavoro come firmwarista in ambito industriale e mi è capitato di vedere di tutto sugli schermi delle povere HMI: sistemi operativi proprietari, Windows 95, 98, XP e anche lo SCOMODISSIMO Windows CE!

Purtroppo, ma che dico, PER FORTUNA, Windows CE è stato finalmente decretato morto dalla Microsoft.

Questo decesso programmato ha portato molte aziende sull’orlo di crisi tecniche.

E ora come sostituiamo Windows CE?

La scelta banale potrebbe essere quella di portare tutto il software sulle moderne versioni di Windows. Peccato però che ci si dimentica spesso di una parolina, o forse di due: REAL-TIME.

Infatti, Windows CE, aveva tanti difetti ma una cosa su tutte faceva abbastanza bene: eseguire codice in tempo reale!

Purtroppo Windows 10 & Co. non gradiscono molto la parte realtime. Si, so quello che state per dire: ma ci sono le estensioni realtime per windows!

Ok, ma le avete provate? Queste estensioni sono dannatamente pesanti e si portano dietro un ulteriore zavorra: UN COSTO DI LICENZA SUPERIORE A QUELLO DI WINDOWS STESSO!

Quindi, vi starete chiedendo, che cosa suggerisce il fenomenale Roberto Viola?

Semplice: LINUX!

O meglio, Linux + Wine + Xenomai!

Nel dettaglio, Xenomai si occuperà della gestione realtime, mentre Wine si occuperà della parte grafica della HMI che sicuramente non vorrete riscrivere!

Signori, in pochi giorni, se non ore, avrete migrato il vostro applicativo da Windows CE a Linux senza più costi di licenza e sopratutto su un kernel al passo con i tempi!

Avete avuto anche voi situazioni simili?

Dai che forse il 2020 sarà l’anno di linux…almeno per quello che riguarda l’ambito industriale!

SYCL: diamo un boost ai nostri algoritmi con la GPU

Da qualche giorno (in realtà fine settembre 2019) Intel ha rilasciato LLVM 9.0.0 che porta con se una grandissima novità: un supporto a SYCL perfettamente funzionante.

Per chi non conoscesse SYCL, riporto qui la descrizione di wikipedia:

SYCL (pronuncia “sickle”) è un layer di astrazione gratuito e multipiattaforma progettato sui concetti di portabilità e di efficienza di OpenCL, che permette al codice di piattaforme eterogenee di essere scritto in uno stile “a sorgente singola”, utilizzando completamente lo standard C++. SYCL consente lo sviluppo di una sola sorgente in cui le funzioni di modello C ++ possono contenere sia il codice host (cpu) che quello per il dispositivo (gpu/fpga/arm) al fine di costruire algoritmi complessi che utilizzano l’accelerazione OpenCL e quindi poter riutilizzare tutto il loro codice sorgente su diversi tipi di hardware e di dati. La possibilità, per gli sviluppatori, di non essere costretti a tener conto del dispositivo su cui il programma girerà (necessario in OpenCL), rende molto più semplice e lineare la programmazione.

In breve: potete accelerare i vostri algoritmi usando la GPU!
Quante volte avete raggiunto il limite di un sistema e siete stati costretti a dover upgradare la CPU o addirittura rivoluzionare un algoritmo perfettamente funzionante per cercare di limitare qualche millisecondo ad ogni iterazione?

Beh LLVM + SYCL potrebbero essere una manna dal cielo in queste situazioni.
In particolare ho provato per voi alcuni esempi (trovate tutto qui https://github.com/cagnulein/sycl-benchmarks):
Un semplice FOR da 500.000.000 di iterazioni, comprensivo di una moltiplicazione di una tan per un atan richiede circa 107 secondi per essere eseguito su una CPU intel di settima generazione. Bene, se questo stesso algoritmo lo fate girare su GPU (la stessa GPU integrata della stessa CPU presa in considerazione prima) passerete da 107 secondi a soli 4.8 secondi! Si avete letto bene, 4.8 secondi!

Non vi resta che sporcarvi le mani voi stessi seguendo questo bell’articolo http://pramodkumbhar.com/2019/07/intels-one-api-what-we-know-and-how-to-get-ready/

Se avete dubbi chiedete pure.