CUDA Threads

Eine Funktion kann N-mal aufgerufen werden. Daraus entstehen N parallele Blocks im Kernel, die man über ihre Block-Id ansprechen kann.

Innerhalb eines Blocks können mehrere Prozesse (Threads) gestartet werden. Dies ist notwendig, wenn ein Vektor, auf mehrere Blöcke eingeteilt wird.
Jeder Block hat seinen Vektor. Doch innerhalb eines Vektors entstehen mehrere Prozesse.

__global__ void add( int *a, int *b, int *c ) {
.   c[ threadIdx.x blockIdx.x ] = 
.              a[ threadIdx.x  blockIdx.x ] + 
.              b[ threadIdx.x  blockIdx.x ];
}

Jedes Element des Vektors hat seinen Thread.

 

CUDA Threads and Blocks

Einfaches Handling in Cuda
Cuda ist spezialisert auf das parallele Verarbeiten vieler Elemente (Vektoren).

Bsp:
8 Blocks (Funktion wird 8 mal ausgeführt) mit
Vektoren in der Funktion.
Jedes Element des Vektors kann per Thread-Index angesprochen werden.

threads_block

Zugriff auf ein Element
Der Index des Elements ist einfach gebildet

int index = (blockIdx.x * Blocktiefe) + threadIdx.x
int index = (blockId2.2 * 8) + threadId5.5
int index = ( 2 * 8 ) + 5 = 21

index_cuda
Elemente aus verschiedenen Threads und Blocks
Sofern man genau weiss, wie weit die Daten in den einzelnen Threads generiert sind, können Indizes unterschiedlicher Nummern verarbeitet werden

__global__ void add( int *a, int *b, int *c ) {

.      c[index12] = a[index63] + b[index20];
}

Dazu braucht es jedoch die Synchronisation der Prozesse, die über synctrheads() organisiert werden kann.

 

 

Swift Introduction

– modernere Version von C-objektive
– keine Strichpunkte
– wenig Sonderzeichen (vgl. import)

// datei.swift
// inhalt (schlagwort)
//
// created by Katrin Bächli 19.10.15
// Linzenz
import Metal
var lenght:Int    
var doubleMatrix:[Double]   
var matrix:[Int16]
for n in 0...3 {
.               var1 = (matrix[n]);
.            }
if  var1 < 12 {
.            return 0
.        }
while value2 > value1 * 1.5 {
.            volume = value2 * 2
.        }
class ProjectComponentSubject {   
        
.     init(<variables>){

.       // Klasseneigenschaften setzen
.       self.var1 = var1

.       // Instanzeigenschaften setzen
        var2 = var3 * var4
.    }

.   // Funktionen
.   func inverse() -> a_Buffer {
.       // Code
.    }

Vererbte Klasse

class ProjectComponentSubject : Parent, Interface { 
}  
class SwisscomRTSTCPConnect : NSObject, ADTCPSocketDelegate {
. 
}

Nach dem Doppelpunkt kommen die Eltern und deren Schnittstelle.

TI Wireless Sensor Board: SensorTag

TI stellte ein Board mit 10 Sensoren und App zur Verfügung, das CC26050STK  Starter Kit.

Sensoren
Umgebungs- und Objekttemperatur, Feuchtigkeit, Druck, Höhe, Bewegung (neun Achsen), Geschwindigkeit, Drehzahl, Magnet und Licht.

Sensordaten auf Cloud
Mit der App können die Daten über die Cloud ausgelesen und weitergeleitet werden.

Entwickler Erweiterung
Zum Sensor Board gibt es eine Erweiterung für Entwickller: das SimpleLink SensorTag DevPack. Die Erweiterung beinhaltet ein JTAG Schnittstelle  und eine IDE zum Debuggen und Programmieren.

Komponenten des Sensor Board
CC26xx_Block_Diagram– zwei Prozessoren:
M3 als CPU und
M0 für RF (BLE )
– JTAG zum Programmieren/Debuggen
– Schnittstellen UART, I2S, SPI
– Sensor Controller
Datenblatt und Beschreibung

 

 


Der RF Chip DA14580

RF_Prozessor_Blockdiagramm– Braucht zum Senden 4.9 mA.
– Braucht im Sleep Mode nur 600nA.
– Betriebsspannung von 0.9 V.
– Hat JTAG Schnittstelle (SWD)
– Hat einen BLE Core mit AES-128
für Single Mode

 

 

 

 

Je nach dem, welches Protokoll man benutzen will, wird ein anderer protocol stack heruntergeladen.

 

Peripherie Gerät: das „BLE Herz“ (CH 14)

Bei der Konfiguration des Peripherie-Gerätes zeigen sich die Spezialfunktionen des BLE-Standards.

Die Funktionalität wird um die Batterie-Versorgung herum aufgebaut. Es gibt drei Arten, mit dem zentralen Gerät zu Kommunizieren:

  • broadcast senden (14.2)
  • vom zentral Gerät selbst detektiert werden (14.3): Being Discoverable
  • abgeschalten und bei Bedarf Vergbindung aufbauen (14.4): Being Connectable

    Nur bei der letzten Kommunikationsart besteht eine Geräte-Paarung. Im Voraus wird beim letzten Fall eine White List erstellt, damit nur zu den registrierten zentralen Geräten Daten gesendet werden.

    Optimizing for Low Power (14.8)
    Beste Advertizing Channel Intervall definieren
    – Beste Verbindungszeit definieren
    – Schnellste Attribut (=Daten)-Aufnahme einrichten

    Zur Analyse der Übergänge kann ein State Diagramm genommen werden. Gestartet wird im ausgeschaltenen Modus. (In diesem Zustand sollte sehr wenig Leistung verbraucht werden.)
    Wird das Peripherie-Geräte für BLE angestellt, geht es in den discoverable (14.3)-Zustand über. Das zentrale Gerät verbindet sich.

BLE Geräte Verbindung Introduction (Ch 13, 14)

Wie baut der RF Chip 18xx eine Verbindung zu einem BLE-Gerät auf ?
Informationen aus der iOS Developper Library

Glossar
– Der RF Chip (angebunden an einen Processor und an einen Sensor) gilt als Peripheral Device.  Die Daten werden von hier gesendet. Das Peripheral Device hat Serverfunktion.
– Das Tablet, das die Daten empfängt wird Central Device genannt. Es befindet sich im Client Modus.

BLE_Peripheral_CentralDevice

Kommunikation Peripheral Device (CH 14)
Hat das Periphier-Gerät Daten, sendet es broadcast advertizing packets. Meldet, dass es Daten gibt. Diese Kommunikation geschieht auf den 3 advertizing channels.
AdvertisingAndDiscovery_2x

Kommunikation des Central Device (Ch 13)
Das Tablet scanned auf allen advertizing channels und schaut, ob irgendwo interessante Daten liegen. Wenn ja, wird eine Verbindung aufgebaut. Es gibt 2 Scan-Zustände: passives oder aktives Scannen.  Im passiven hört das zentrale Gerät, ob irgend ein Peripherie-Gerät Daten zur Verfügung stellt. Im aktiven Modus ist das zentrale Gerät, nachdem es ein Gerät detektiert hat. Im aktiven Modus werden mehr Informationen angefordert.

Das periphere Gerät teilt der Zentrale den Namen des Geräts und eine Geräte-ID mit.

Datenstruktur Peripheral
Ein Peripheriegerät stellt eine Anzahl an Services zur Verfügung. Sobald eine Verbindung zum zentralen Gerät besteht, können Daten aus diesen Services übernommen werden.
Service: Daten (inkl. Verhaltensinformationen) zum Ausführen eines Befehls, eines Dienstes. Ein Service beinhaltet mehrere Characteristics (und teilweise auch andere Services).

Characteristics: Detailangaben vom Peripheriegerät.

ble_hierarchy_Service_Characteristics

Zentrales Gerät erhält Daten
Besteht eine Verbindung, kann das zentrale Gerät sowohl Daten lesen wie auch selbst Werte schreiben. Die Daten (Services) werden im Core Blootooth framework abgelegt und verarbeitet. Fast alle BLE Aktionen geschiehen in diesem Gerät.

 

..

Bluetooth Low Energy: Introduction (Ch. 1, 2, 3)

Robin Heydon, Bluetooth Low Energy, The Developer’s HandBook (2013)

Kapitel 1: Was ist BLE?
Das Ziel von BLE ist, die energiearmste wireless Verbindung zu ermöglichen. BLE hat nur wenig mit Bluetooth classic zu tun. Anstelle immer höherer Datenraten, ist hier die kleinst notwendige Datenrate gefragt (R = 0.3 Mbps). f = 2.4 GHz
Bluetooth ab Version 4  kennt den Dual-Mode, in dem sowohl BLE wie auch Bluetooth benutz werden können.
Glossar: FrequenzHopping

Kapitel 2: Basic Concepts
– Gespiesen wird mit der kleinstmöglichen Battterie (Knopfbatterie), die 3 V /230 mAh. Spitzenstrom von 15 mA. Die Batterie hält länger, wenn keine Leistungen an ihrem Limit bezogen werden.

– Zeit = Energieverlust: Jede Abfrage ist auf das Minimum beschränkt. Sich wiederholende Abfragen (ID senden) sind zu minimieren. Jede Abfrage muss dafür so sicher wie möglich sein, denn für Wiederholung wäre eine Energieverschwendung. Aus diesem Grund sind nur 3 der 16 Frequenzen bei der Datenübermittlung parallel aktiv (1 oder 2 sind zu wenig sicher).

– Speichern der Daten = Energieverlust: Speicher sind Stromfresser.

Asynchrones Kommunikationskonzept: Es wird klar unterschieden zwischen der Energiefähigkeit unter den Geräten. Das energiearme Gerät behandelt auf allen OSI-Layern nur das Minimum. Die Arbeit übernimmt das Energiestärkere Gerät.
Physical Layer: Theoretisch kann ein Gerät Senden und Empfangen. Doch um zu Sparen, tätigen im asynchronen Konzept die energiearmen Geräte nur 1 Sache und nur 1 Gerät erledigt alle energiefordernden Prozesse.
Link Layer: Die Aufgaben advertize (Packete senden), scannen (Packete erhalten) in den Rollen master, slave (nur Instruktionen erhalten) werden strikt zugewiesen. Der master übernimmt das timing, wählt die Frequenzen, entschlüsselt die Daten und weitere komplexe Aufgaben.
Protocol Layer: Aufgeteilt in Server – Client. Der Client generiert die Daten und teilt dies per Request dem Server mit. Der Server macht,  ähnlich wie der Slave auf dem Link Layer, macht nur, was man ihm sagt. Der Client macht die Arbeit.

Zustandsgesteuert:  Jede Inhalt setzt einen Zustand im Attribut Protocol. Die aktuelle Temperatur, der Ladungszustand der Batterie,  der Name des Geräts oder die Beschreibung, wo die Temperatur erfasst wurde: alles wird einem Zustand zugewiesen. Der Vorteil davon ist, dass Slave sich zu jedem gewünschten Zeitpunkt ausklicken können.

Kapitel 3: Aufbau
Der Kontroller, der Host, der Applikations Layer und der Stack werden im Überblick vorgestellt und jedes dieser Komponten erhält nachher ein eigenes Kapitel.

BLE_architecture
– Der Kontroller:
Physical Layer: f = 2.4 GHz, Modulation: GFSK (Gaussian Frequenz Shift Keying = die Frequenzen werden gewechselt. Gauss wird als Filter gebraucht, da der Frequenzwechsel Störpulse generiert). Direct Test Mode: Direkter Paketversand zum Testen des Physical Layers. Link Layer: Tätigt fast alle Aufgaben: advertizing (Packete anbieten), scanning (Packete abholen), Auf- und Abbau sowie die Unterhaltung einer Verbingung. Packete richtig aufbauen.
Kommuniziert wird auf 3 advertizig channels: Wer ist da? Wer hat Daten? Eine Verbindung wird aufgebaut. Neben den 3 advertizing channels gibt es 37 data channels.  Auf einem davon werden die Daten gesendet (mit einem ACK).
Ein Standard-Packet ist minimum10 Bytes lang, das längste 47 Bytes.BLE_packet_structure

The Host/ControllerInterface (HCI): Stellt sicher, dass das BLE Gerät mit einem Host kommunizieren kann. Der Host sendet Befehlte, das BLE sendet vorwiegend Daten. Der HCI hat zwei getrennte Bereiche: einer beinhaltet die Anbindung zum Physical Layer und der andere die Anbindung zum Logica Link.
In der Andbingung zum Physical Layer ist die Kommunikationsart definiert. Erlaubt ist USB, SDIO und UART.

..

Per LAN auf anderes Gerät zugreifen

Login auf ein anderes Gerät
Auf ein anderes Geräte im selben LAN (WLAN oder mit Kabel verbunden) kann man sich per IP in das Gerät einloggen. Es ist identisch wie wenn man sich als User vor Ort angemeldet hätte.

Für diese Verbindung braucht es ein sicheres Programm. SSH ist ein solches.

Bedingung
Man braucht den Username und das Passwort des Users.

Befehl

ssh   userName@<ip>
ssh   root@192.168.9.12
pw:   Passwort des Users eingeben

Navigation auf dem PC
Ist man im Gerät, kann man sich mit den Shell-Befehlen von Ordner zu Ordner bewegen und Dateien ausführen.