Connect with us

Künstliche Intelligenz

Datenparallele Typen in C++26: SIMD-Algorithmen


Die SIMD-Bibliothek bietet in C++26 portable Typen zur expliziten Angabe von Datenparallelität und zur Strukturierung von Daten für einen effizienteren SIMD-Zugriff.


Rainer Grimm

Rainer Grimm

Rainer Grimm ist seit vielen Jahren als Softwarearchitekt, Team- und Schulungsleiter tätig. Er schreibt gerne Artikel zu den Programmiersprachen C++, Python und Haskell, spricht aber auch gerne und häufig auf Fachkonferenzen. Auf seinem Blog Modernes C++ beschäftigt er sich intensiv mit seiner Leidenschaft C++.

Die Kurzserie zu datenparallelen Typen hat bisher folgende Themen behandelt:

Mit dem aktuellen Beitrag schließe ich die Serie ab. Diesmal geht es um vier spezielle Algorithmen für SIMD-Vektoren: min, max, minmax und clamp.

Den zwei Algorithmen min und max ist gemein, dass sie jeweils zwei SIMD-Vektoren annehmen und einen SIMD-Vektor zurückgeben. Dieser enthält die elementweisen Minimum oder Maximum der Eingabevektoren. Der minmax-Algorithmus nimmt ebenfalls zwei SIMD-Vektoren an und gibt ein Paar von SIMD-Vektoren zurück. Der erste Vektor des Paares enthält die elementweisen Minimum, der zweite die elementweisen Maximum der Eingabevektoren.

Das folgende Beispiel zeigt die drei Algorithmen in Aktion:


// minmax.cpp

#include 
#include 
#include 

namespace stdx = std::experimental;
 
void println(auto rem, auto const v) {
    std::cout << rem << ": ";
    for (std::size_t i = 0; i != v.size(); ++i)
        std::cout << std::setw(2) << v[i] << ' ';
    std::cout << '\n';
}

void printPairs(auto rem, auto const v1) {
    std::cout << rem << ": ";
    for (std::size_t i = 0; i != v1.first.size(); ++i)
        std::cout << '(' << v1.first[i] << ", " << v1.second[i] << ')' << ' ';
    std::cout << '\n';
}

int main() {

    stdx::fixed_size_simd a{[](int i) {
        static constexpr auto c = {10, 9, 8, 7, 6, 5, 4, 3};
        return c.begin()[i];
    }};
    println("a", a);
    
    stdx::fixed_size_simd b{[](int i) {
        static constexpr auto c = {3, 4, 5, 6, 7, 8, 9, 10,};
        return c.begin()[i];
    }};
    println("b", b);

    std::cout << '\n';

   auto minimum = stdx::min(a, b);
   println("minimum", minimum);

   auto maximum = stdx::max(a, b);
   println("maximum", maximum);

   /*
   auto minmax = stdx::minmax(a, b);
   printPairs("minmax", minmax);
   */

}


Als Eingabevektoren verwende ich die SIMD-Vektoren a und b. Diese werden auf eine besondere Art initialisiert. Dazu lege ich eine Initialisierungsliste c in der Lambda-Funktion an, die einen Iterator auf sie zurückgibt.


Beispiel Minmax

Beispiel Minmax

Der Screenshot zeigt die Ausgabe des Programms mit min und max.

Die Anwendung des Algorithmus minmax habe ich auskommentiert, weil ich die Zeile stdx::minmax(a, b) weder mit dem GCC noch mit dem clang -Compiler übersetzen konnte.

std::datapar::clamp wendet elementweise die Funktion std::clamp auf den SIMD-Vektor an. Dabei wird jedes Element in einen minimalen und maximalen Grenzwert eingesperrt.

Das folgende Programm basiert auf einem Beispiel aus cppreference:


// clamp.cpp

#include 
#include 
#include 
#include 
#include 

namespace stdx = std::experimental;
 
void println(auto rem, auto const v) {
    std::cout << rem << ": ";
    for (std::size_t i = 0; i != v.size(); ++i)
        std::cout << std::setw(4) << v[i] << ' ';
    std::cout << '\n';
}
 
int main() {

    std::cout << "INT8_MIN: " << INT8_MIN << '\n';
    std::cout << "INT8_MAX: " << INT8_MAX << '\n';
    std::cout << "UINT8_MAX: " << UINT8_MAX << '\n';

    std::cout << '\n';

    stdx::fixed_size_simd a{[](int i) {
        static constexpr auto c = {-129, -128, -1, 0, 42, 127, 128, 255};
        return c.begin()[i];
    }};
    println("a", a);
 
    stdx::fixed_size_simd lo1{INT8_MIN};
    stdx::fixed_size_simd hi1{INT8_MAX};
    const auto b = stdx::clamp(a, lo1, hi1);
    println("b", b);
 
    stdx::fixed_size_simd lo2{0};
    stdx::fixed_size_simd hi2{UINT8_MAX};
    const auto c = stdx::clamp(a, lo2, hi2);
    println("c", c);

}



Beispiel clamp

Beispiel clamp

Der Screenshot zeigt die Ausgabe des Programms mit clamp

Schön ist in der Ausgabe des SIMD-Vektors b zu sehen, wie die Werte des SIMD-Vektors a in die Grenzwerte INT8_MIN und INT8_MAX eingepasst werden. Bei dem SIMD-Vektor c kommen hingegen die Grenzwerte 0 und UINT8_MAX zum Einsatz.

Nun ist es Zeit für meinen zweiten Durchlauf durch den neuen C++26-Standard. Dabei werde ich mich in erster Linie auf die Funktionen konzentrieren, die ich im ersten Durchgang nicht im Detail behandelt habe.

Beginnen werde ich mit Contracts.


(rme)



Source link

Künstliche Intelligenz

Zum 75. von Steve Wozniak: Kurzer Höhenflug, ein Absturz, aber immer obenauf


Vertraue niemals einem Computer, den du nicht aus dem Fenster werfen kannst. Dieses Zitat von Steve „Woz“ Wozniak besagt einiges über den Apple-Mitbegründer. Da ist zunächst sein nerdiger Sinn für Humor, der Woz bis heute auszeichnet und ihn zum gern gesehenen Gesprächspartner macht. Aber da schimmert eben auch seine Philosophie und sein Anspruch durch, Technik nicht einfach nur zu nutzen, sondern sie auch zu verstehen und zu kontrollieren. Heute wird der Kalifornier 75 Jahre alt.

Das Zitat mit dem Computer zeigt allerdings auch schön auf, welche Welten zwischen der legendären Garage liegen, in der Woz und Steve Jobs die ersten Apple-Computer zusammenbauten, und dem heutigen Apple, das Billionen von US-Dollar wert ist. Ein Teil des heutigen Erfolgsrezepts ist das geschlossene System, an dem sich Kritiker und Politiker weltweit die Zähne ausbeißen. Und das ein Stück weit auch im Widerspruch zu Woz‘ Anspruch steht, Technik komplett kontrollieren zu können.

Woz, der immer noch einen kleinen Gehaltsscheck aus Cupertino für gelegentliche Auftritte erhält, aber die meisten seiner Apple-Aktien in den 1980er-Jahren verkauft hat, sieht es gelassen: „Apple ist immer noch das Beste“, sagte er vor einiger Zeit in einem Interview. „Und wenn Apple Dinge macht, die mir nicht gefallen, und ich mir angesichts der Verschlossenheit mehr Offenheit wünsche, werde ich mich dazu äußern.“ Ob Apple auf ihn höre? „Oh, nein“, lacht er.

1976 gründete Stephen Gary Wozniak zusammen mit Ron Wayne und Steve Jobs Apple. Wayne stieg rasch wieder aus, die beiden Steves blieben. Bereits ein Jahr zuvor, im Homebrew Computer Club, der als prägend für die Entwicklung des PCs gilt, nahm das Projekt Computerbau seinen Anfang. Doch es war mehr als persönliche Passion: Computertechnologie, so wünschten es sich die Enthusiasten, sollte allen offenstehen. Also baute der am 11. August 1950 in Sunnyvale geborene Wozniak den Apple I. Schon als Teenager lötete Woz gern an Schaltkreisen und träumte davon, an diese für den normalen Menschen unzugänglichen Maschinen zu gelangen. Im fünf Jahre jüngeren Jobs, der 2011 starb, fand er einen Mitstreiter.

Auf dem Weg zum ersten Apple-Computer streiften die beiden auch Grauzonen. In einem ersten Projekt manipulierten sie das Telefonnetz des einstigen Monopolisten AT&T und fanden heraus, wie mittels Steuerfrequenzen kostenlose Telefonate möglich waren. Die Aufgabenteilung zwischen den beiden war klar: Woz war der Tüftler, Jobs der Geschäftsmann. Zwischenzeitlich trat Wozniak im Jahr 1973 eine Stelle bei Hewlett-Packard (HP) an, wo er am Design von Schaltkreisen mitwirkte.

Nach dem Apple I, der noch keine Tastatur und kein Gehäuse hatte, folgte 1977 der Apple II, der sich auch an Käufer außerhalb der Bastlerszene richtete. Der Computer, der mit wenigen Bauteilen auskam, galt als vielseitig und war ein großer kommerzieller Erfolg für Apple. Bereits beim Börsengang im Jahr 1980 wurden Wozniak und Jobs zu Millionären.

Ein Unfall mit einem Kleinflugzeug sorgte im Februar 1981 dafür, dass sich die Wege der beiden Steves später wieder trennten. Hobby-Pilot Wozniak verunglückte dabei schwer und litt infolge einer Kopfverletzung wochenlang unter Gedächtnisstörungen. Nach dem Vorfall nahm er sich eine Auszeit, kehrte 1983 noch einmal für zwei Jahre zurück und verabschiedete sich danach endgültig aus dem aktiven Dienst bei Apple. Bis heute engagiert er sich für Technikprojekte und bei Start-up-Unternehmen. Er hat drei Kinder und ist in vierter Ehe verheiratet.


(mki)



Source link

Weiterlesen

Künstliche Intelligenz

DDR4-Preise für Budget-PCs steigen weiter und explodieren bei Fernsehern


Arbeitsspeicher mit DDR4-Bausteinen steigt weiter im Preis. Mittlerweile kostet ein 32-GByte-Kit mit DDR4-3200-Geschwindigkeit mindestens 70 Euro. Anfang Juli waren solche Kits noch für knapp 60 Euro erhältlich, im Mai für unter 50 Euro. Das entspricht einer Preissteigerung von mehr als 50 Prozent in nur drei Monaten.

Damit holt der deutsche Markt die Prognose des auf Speicher spezialisierten Marktbeobachters Trendforce ein. Der beobachtete vom April bis Ende Juni Preissteigerungen von 13 bis 18 Prozent für DDR4-Bausteine und erwartet für das laufende Quartal weitere Steigerungen von bis zu 43 Prozent. Da die Bausteine den teuersten Teil von Speicherriegeln darstellen, spiegeln sich die Anpassungen klar im Handel wider.

Noch härter soll es Konsumentenelektronik treffen, etwa in Form von Fernsehern. Entsprechende Hersteller befinden sich am Ende der Nahrungskette und bekommen laut Trendforce DDR4-Preissteigerungen von bis zu 90 Prozent in diesem Quartal aufgedrückt. Allein im Juli sollen sich die Preise in neu ausgehandelten Lieferverträgen um 60 bis 85 Prozent erhöht haben.

Die Preise steigen, weil die drei DRAM-Weltmarktführer Samsung, SK Hynix und Micron ihre Produktion auf neuere Speichergenerationen umstellen. Neben DDR5 sind das etwa GDDR7-Bausteine für Grafikkarten und High-Bandwidth Memory (HBM) für KI-Beschleuniger. Gleichzeitig kaufen insbesondere Serverhersteller die Restbestände auf, um ihr Angebot abzusichern. Kurzfristig übersteigt die Nachfrage daher deutlich das Angebot.

DDR5-Kits sind derweil kurz davor, günstiger zu werden als DDR4-Kits. 32 GByte DDR5-4800 oder DDR5-5600 starten derzeit bei etwa 75 Euro. Die steigenden DDR4-Preise sind vor allem für PC-Selbstbauer schlecht, die sich einen Budget-Rechner zusammenstellen wollen. Insbesondere AMDs AM4-Plattform mit Ryzen-5000-Prozessoren ist aufgrund der niedrigen CPU-, Mainboard- und bisher RAM-Preise weiter beliebt. Ohne die Ersparnis beim Speicher verliert diese Plattform allerdings an Attraktivität.


(mma)



Source link

Weiterlesen

Künstliche Intelligenz

iX-Workshop: Unternehmensprozesse mit Multi-Agenten-Systemen automatisieren


Vorgefertigte Sprachmodelle und KI-Anwendungen wie ChatGPT, Mistral oder Gemini reichen für den Einsatz im Unternehmen oft nicht aus. Daher sind maßgeschneiderte Tools besonders geeignet, um eigene Daten zu integrieren, Betriebsabläufe mit Multi-Agenten-Systemen ausfallsicher zu automatisieren und das Potenzial von künstlicher Intelligenz voll auszuschöpfen.

Stellen Sie sich vor, Sie könnten ein Sprachmodell entwickeln, das Ihre Unternehmenssprache spricht – und zwar so sicher, dass es in Ihre eigenen Systeme passt. Genau das lernen Sie in unserem fünftägigen Workshop Generative KI nach Maß: eigene Daten integrieren, LLMs lokal betreiben, Multi-Agenten-Systeme entwickeln.

In dem praxisorientierten Workshop erhalten Sie einen detaillierten Einblick in die gezielte Personalisierung großer Sprachmodelle für die individuellen Anforderungen Ihres Unternehmens. Wir zeigen Ihnen, wie Sie Multi-Agenten-Systeme in Ihre Betriebsprozesse einbinden, um Prozesse zu automatisieren und die Effizienz langfristig zu steigern. Ebenfalls lernen Sie, wie Sie Anforderungen an Datenschutz und Compliance erfüllen und Sprachmodelle so auf eigener Hardware sicher betreiben.

In praktischen Übungen blicken Sie auf Ollama und LM Studio und lernen Schritt für Schritt, wie Sie Ollama auf Ihrer eigenen Hardware installieren, einrichten und KI-Modelle lokal verwenden. Weiterhin nutzen Sie Retrieval Augmented Generation (RAG), um mit KI kontextbezogene Antworten zu generieren. Abschließend wenden Sie die Inhalte an, um einen eigenen Anwendungsfall für Ihre berufliche Praxis zu entwickeln.

September
22.09. – 26.09.2025
Online-Workshop, 09:00 – 17:00 Uhr
10 % Frühbucher-Rabatt bis zum 24. Aug. 2025
November
17.11. – 21.11.2025
Online-Workshop, 09:00 – 17:00 Uhr
10 % Frühbucher-Rabatt bis zum 19. Okt. 2025

Der Workshop richtet sich an Data Scientists, die unternehmensinterne Daten mit KI-Unterstützung sicher analysieren und nutzen möchten. Ebenso eignet sich der Workshop für Machine-Learning-Engineers, die große Sprachmodelle durch Feintuning und Multi-Agenten-Systeme optimieren und für unternehmensspezifische Anforderungen konfigurieren möchten.

Ihr Trainer Dr. Franz-Josef Toelle ist Data Scientist und Experte für künstliche Intelligenz. In der Industrie und Forschung beschäftigt er sich seit mehr als 25 Jahren mit Deep Learning. In diesem Bereich ist er zudem Berater namhafter Unternehmen und Autor renommierter Publikationen.




(ilk)



Source link

Weiterlesen

Beliebt