{"id":10611,"date":"2014-11-28T00:18:30","date_gmt":"2014-11-27T23:18:30","guid":{"rendered":"http:\/\/www.bernd-leitenberger.de\/blog\/?p=10611"},"modified":"2014-11-28T00:18:30","modified_gmt":"2014-11-27T23:18:30","slug":"funktionelle-einheiten-vektorinstruktionen-und-mehrkernprozessoren","status":"publish","type":"post","link":"https:\/\/www.bernd-leitenberger.de\/blog\/2014\/11\/28\/funktionelle-einheiten-vektorinstruktionen-und-mehrkernprozessoren\/","title":{"rendered":"Funktionelle Einheiten, Vektorinstruktionen und Mehrkernprozessoren"},"content":{"rendered":"<p>Da wir alle drei Konzepte heute in den Intelprozessoren und auch einigen AMD-Typen finden, mal eine historische Betrachtung was die Unterschiede sind und was wo n&uuml;tzt. Das &auml;lteste sind mehrere funktionelle Einheiten. Dazu hole ich erst mal aus und erkl&auml;re wie eine CPU allgemein aufgebaut ist. Man kann sie selbst bei einfachen Exemplaren, also z.B. einem 8-Bit Mikroprozessor in mehrere Untereinheiten zerlegen die jeweils eine Aufgabe haben. Da ist zum einen der Befehlsdekoder. Er stellt fest welcher Befehl hinter dem Bitmuster steckt, das gerade geladen wird und welche Register er nutzt. Die Daten selbst bekommt er von einer Einheit die mit dem Speicher kommuniziert, je nach Architektur Load\/Store Einheit, Bus-Interface etc. genannt. Dann gibt es noch mindestens eine Ausf&uuml;hrungseinheit welche die Befehle auch durchf&uuml;hrt, bei einfachen Prozessoren meistens als Arithmetisch-logische Einheit (ALU) bezeichnet. Das ist nur die Grundmenge. Es k&ouml;nnen durchaus mehrere dieser Einheiten sein.<\/p>\n<p>Schon bald kam man drauf diese Einheiten zumindest zeitweise parallel arbeiten zu lassen. Ein Befehl wird z.B. erst von der Load\/Store Einheit aus dem Speicher geholt, durchl&auml;uft dann den Befehlsdekoder und dann die Ausf&uuml;hrungseinheit. Schon bei der <a href=\"\/8086.shtml\">8086 CPU<\/a> war die Bus-Interface Unit schon f&auml;hig w&auml;hrend Decoder und ALU arbeiteten die n&auml;chsten Bytes vorrausschauend aus dem Speicher zu laden, das nennt man &uuml;brigens Prefetch. Der rapide Geschwindigkeitseinbruch der 8088 CPU kam dadurch zustande, dass neben den Befehlen auch noch Daten von dieser Einheit geholt und geschrieben wurden und durch die halbierte Busbreite kam sie kaum noch dazu den Prefetch durchzuf&uuml;hren, da jeder Transfer nun doppelt so lange dauerte. Auch bei der IBM 7030 Stretch gab es schon Parallelit&auml;t von Laden\/Speichern und ausf&uuml;hren\/Dekodieren.<!--more--><\/p>\n<p>Allerdings brauchen viele Befehle die meisten Taktzyklen beim Ausf&uuml;hren. Das brachte Seymour Cray auf die Idee die Ausf&uuml;hrungseinheiten mehrmals vorzusehen. Die <a href=\"\/cdc-6600.shtml\">CDC 6600<\/a> hatte nicht weniger als zehn davon. Sie waren allerdings relativ spezialisiert so gab es eigene Einheiten f&uuml;r Flie&szlig;kommaoperationen und Ganzzahloperationen und eine Flie&szlig;kommaeinheit f&uuml;r Addition\/Subtraktion, eine f&uuml;r Multiplikation und eine f&uuml;r Division. Der Lohn die theoretische Spitzenleistung war etwa um den Faktor 3 h&ouml;her als ohne diese mehrfach vorhandenen Einheiten.<\/p>\n<p>Intel f&uuml;hrte das beim <a href=\"\/pentium-prozessor.shtml\">Pentium<\/a> ein, der zwei Integerrecheneinheiten hatte (die Flei&szlig;kommaeinheit war nur einmal vorhanden). Bei der Ausf&uuml;hrung gibt es nun ein Problem, das schon bei der CDC 6600 zuschlug: der Code enth&auml;lt Instruktionen, die sind unabh&auml;ngig voneinander und andere bauen aufeinander auf. Also in einer Operation wird ein Ergebnis errechnet und in der n&auml;chsten wird mit diesem weiter gerechnet. Das ergibt sich schon daraus das nur eine Rechenoperation pro Befehl m&ouml;glich ist. Eine einfache quadratische Gleichung wie<\/p>\n<p>Y = x * x + 2 * x + 4<\/p>\n<p>enth&auml;lt so also vier Operationen von denen immerhin x * x und 2 * x gleichzeitig ablaufen k&ouml;nnen. Das Addieren aller drei Therme geht aber nicht parallel. Beim Pentium war dies sp&uuml;rbar. Mit bestehendem Code f&uuml;r das Vorg&auml;ngermodell war er 1,6 mal schneller als dieses. Achtete ein Compiler darauf, Befehle m&ouml;glichst so anzuordnen das es keine Abh&auml;ngigkeiten gab, so erreichte er die 2,3-fache Geschwindigkeit. Sp&auml;ter integrierte man dies im Prozessor und nannte das Umsortieren der Befehle &#8222;Out-of-Order Execution&#8220;. Ein Haswell-EP Prozessor hat heute vier Integerrecheneinheiten und drei Flie&szlig;kommarecheneinheiten. Die Zahl ist &uuml;ber 20 Jahre kaum angestiegen, das liegt daran, dass es in Code schwer f&auml;llt so viele nicht voneinander abh&auml;ngige Rechnungen kurz hintereinander zu finden. Mehr Einheiten w&uuml;rden dann nicht ausgelastet werden. Auch Seymour Crays Rechner hatten maximal zwei Einheiten desselben Typs bzw. f&uuml;r dieselben Operanden (er trennte die Register f&uuml;r Ganzzahlen, Flie&szlig;kommazahlen und Adressen in drei Registers&auml;tze).<\/p>\n<p>Historisch als zweites kam dann das Konzept mehrere CPU einzusetzen. Der Unterschied zu mehreren funktionellen Einheiten ist das eine CPU komplett ist, also auch Befehlsdekoder und Anbindung an den Speicher umfasst. Der wesentliche Vorteil einer Mehrkern CPU liegt vor allem bei Multitasking Systemen, die schon in den Sechzigern entwickelt wurden. Dabei liefen mehrere Programme gleichzeitig. oder ein Rechner bediente mehrere Benutzer. Doch auch bei nur einem Programm bringen mehrere CPUs einen Vorteile, wenn gro&szlig;e Teile unabh&auml;ngig von anderen sind. Bei vielen naturwissenschaftlichen Problemstellungen ist dies gegeben. Da wird eine Rechenvorschrift (Programm) mit unterschiedlichen Daten durchgerechnet, die dann ein zwei oder mehrdimensionales Modell ergeben. Dann l&auml;uft ein Teil dieser Berechnungen auf einer CPU, der andere auf der anderen. Sie m&uuml;ssen aber miteinander kommunizieren, weil es nat&uuml;rlich am Rand beider Mengen Daten gibt die zwischen den beiden Teilen ausgetauscht werden m&uuml;ssen.<\/p>\n<p>Ein weiteres Problem, das wohl dazu f&uuml;hrte das Seymour Cray relativ sp&auml;t auf diese Karte setzte, ist das der Speicher meist gemeinsam genutzt wird. Dann k&ouml;nnen sich mehrere CPU gegenseitig blockieren oder zumindest ausbremsen und auch die Bandbreite, also Transferrate wird meist aufgeteilt. Dabei ist ein Grund&uuml;bel von Speicher, seit er eingef&uuml;hrt wurde das, das er immer langsamer als die CPUs ist.<\/p>\n<p>Der letzte Schritt bei Intel sind Vektorinstruktionen. Bei Crays Rechner waren sie der zweite und das liegt daran dass diese die oben beschriebenen naturwissenschaftlichen Probleme durchrechneten. Wie erw&auml;hnt ist die Rechenvorschrift immer dieselbe aber die Daten sind immer andere. Was liegt n&auml;her einen Befehl zu entwerfen, der dann nicht zwei Zahlen verarbeitet sondern viel mehr. Bei jedem Takt wird ein Paar verarbeitet bis bei einer <a href=\"\/cray-1.shtml\">Cray 1<\/a> maximal 64 Ergebnisse (andere Vektorrechner bis zu 1024!) vorliegen. Der Vorteil ist das die Dekodierung aber auch das Holen der Daten und Scheiben nur einmal erfolgte. Auch die Rechenwerke waren so ausgelegt das sie jeden Takt eine neue Rechnung anstie&szlig;en, auch wenn diese einige Takte brauchte bis sie das Rechenwerk durchlaufen hatte. Es konnte sogar parallelisiert werden, man musste also nicht warten, bis 64 Werte in den Registern waren sondern konnte nach zwei Werten anfangen w&auml;hrend gleichzeitig das Holen der Daten in die anderen Register weiterging.<\/p>\n<p>Bei Intel ist die Konzeption eine andere. In der Form wie Cray sie implementierte bringt sie keinen Performancevorteil, da mittlerweile auch komplexe Rechnungen in einem Takt durchgef&uuml;hrt werden. Stattdessen hat bei AVX, bzw. SSE ein Befehl mehrere Datenworte (<a href=\"\/simd-vliw.shtml\">Single Instruction, Multiple Data<\/a>) die in &uuml;berlangen Registern (bis zu 256 Bit obwohl Flie&szlig;kommazahlen nur 64 oder 32 Bit breit sind) parallel verarbeitet werden. Anstatt zwei Flie&szlig;kommazahlen werden so zweimal vier oder zweimal acht auf einaml verarbeitet.<\/p>\n<p>Doch das geht meist nur wenn der Code stimmt. Selbst heute sind Compiler sehr dumm. Das ist ein Ausschnitt aus der Berechnung der Gravitationswirkung von K&ouml;rpern gegeneinander:<\/p>\n<pre><code><span class=\"pas1-reservedword\">for<\/span><span class=\"pas1-space\"> I:=low(SSystem) <\/span><span class=\"pas1-reservedword\">to<\/span><span class=\"pas1-space\"> high(SSystem) <\/span><span class=\"pas1-reservedword\">do\r\nbegin\r\n<\/span><span class=\"pas1-space\">  SSystem[I].Ax:=<\/span><span class=\"pas1-number\">0<\/span><span class=\"pas1-symbol\">;\r\n  SSystem[I].Ay:=<\/span><span class=\"pas1-number\">0<\/span><span class=\"pas1-symbol\">;\r\n  SSystem[I].Az:=<\/span><span class=\"pas1-number\">0<\/span><span class=\"pas1-symbol\">;\r\n  J:=<\/span><span class=\"pas1-number\">0<\/span><span class=\"pas1-symbol\">;\r\n  <\/span><span class=\"pas1-reservedword\">while<\/span><span class=\"pas1-space\"> J&lt;=high(SSystem) <\/span><span class=\"pas1-reservedword\">do\r\n<\/span>  <span class=\"pas1-reservedword\">begin\r\n<\/span>    <span class=\"pas1-reservedword\">if<\/span><span class=\"pas1-space\"> I&lt;&gt;J <\/span><span class=\"pas1-reservedword\">then\r\n<\/span>    <span class=\"pas1-reservedword\">begin\r\n<\/span><span class=\"pas1-space\">      Dx:=SSystem[I].Pos.Px-SSystem[J].Pos.Px;\r\n      Dy:=SSystem[I].Pos.Py-SSystem[J].Pos.Py;\r\n      Dz:=SSystem[I].Pos.Pz-SSystem[J].Pos.Pz;\r\n      D2:=Sqr(Dx)+Sqr(Dy)+Sqr(Dz);\r\n      D:=Sqrt(D2);\r\n      G:=(SSystem[J].Masse*Grav)\/D2;\r\n      SSystem[I].Ax:=SSystem[I].Ax+(G*Dx\/D);\r\n      SSystem[I].Ay:=SSystem[I].Ay+(G*Dy\/D);\r\n      SSystem[I].Az:=SSystem[I].Az+(G*Dz\/D);\r\n    <\/span><span class=\"pas1-reservedword\">end<\/span><span class=\"pas1-symbol\">;\r\n  <\/span><span class=\"pas1-reservedword\">end<\/span><span class=\"pas1-symbol\">;\r\n<\/span><span class=\"pas1-reservedword\">end<\/span><span class=\"pas1-symbol\">;\r\n\r\n<\/span><\/code><\/pre>\n<p>Dieser Code ist eigentlich super geeignet sowohl f&uuml;r mehrere Funktionseinheiten (unabh&auml;ngige Berechnung von DX,DY,DZ und AX,AY,AZ). Wie auch mehrere Kerne (so kann man einen Lauf von 1 bis n\/2 und einen von n\/2+1 bis n aufteilen). Auch Vektoroperationen sind m&ouml;glich, denn es sind in allen Durchg&auml;ngen die selben 9 Berechnungen. Compiler sind aber noch heute so d&auml;mlich, dass man, damit sie die Instruktionen nutzen, dann jede Berechnung in eine Schleife packen muss also so umschreiben:<\/p>\n<pre class=\"auto-style1\"><code>      <span class=\"pas1-reservedword\">while<\/span><span class=\"pas1-space\"> J&lt;=high(SSystem) <\/span><span class=\"pas1-reservedword\">do\r\n<\/span><span class=\"pas1-space\">      Dx[j]:=SSystem[I].Pos.Px-SSystem[J].Pos.Px;\r\n      J:=<\/span><span class=\"pas1-number\">0<\/span><span class=\"pas1-symbol\">;\r\n      <\/span><span class=\"pas1-reservedword\">while<\/span><span class=\"pas1-space\"> J&lt;=high(SSystem) <\/span><span class=\"pas1-reservedword\">do\r\n<\/span><span class=\"pas1-space\">      Dy[j]:=SSystem[I].Pos.Py-SSystem[J].Pos.Py;\r\n      J:=<\/span><span class=\"pas1-number\">0<\/span><span class=\"pas1-symbol\">;\r\n      <\/span><span class=\"pas1-reservedword\">while<\/span><span class=\"pas1-space\"> J&lt;=high(SSystem) <\/span><span class=\"pas1-reservedword\">do\r\n<\/span><span class=\"pas1-space\">      Dz[j]:=SSystem[I].Pos.Pz-SSystem[J].Pos.Pz;\r\n\r\n<\/span><\/code><\/pre>\n<p>Das bedeutet man muss auch die eigentlich nur kurzzeitig als Zwischenwerte ben&ouml;tigten Variablen DX, DY und DZ in einem Array speichern. Es verwundert nicht, dass von dem Performanceboost von AVX, der bei dem achtfachen der normalen Geschwindigkeit liegen sollte wenig in realen Anwendungen &uuml;brig bleibt. Vor allem aber dominieren diese Anwendungen nicht bei den PC-Usern, sie profitieren eher von mehr Kernen, noch mehr aber von mehr Takt da typisch ein Thread sehr viel Performance braucht und andere im Hintergrund mit weniger Leistung auskommen. Daher f&uuml;hrte Intel noch vor AVX den Turbo-boost ein. Das ist das &#8222;&Uuml;bertakten&#8220; eines Kerns w&auml;hrend die anderen wenig zu tun haben. Er nutzt damit das Thermalbudget aller Kerne aus. Wird ein Kern h&ouml;her getaktet so steigt die W&auml;rmeabgabe meist stark an. Bei Supercomputern finden diese Erweiterungen dagegen ihren Einsatz. Allerdings haben sie dort Konkurrenz von GPUs bekommen die das Problem anders l&ouml;sen: sie setzen einige Hunder bis 1000 einfache Recheneinheiten auf genauso viele Zahlenpaare an. \u00a0Ihre Leistung ist daher erheblich h&ouml;her, auch wenn sie schwerer zu programmieren sind und der Speicher noch mehr zum Flaschenhlas wird.<img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg01.met.vgwort.de\/na\/31ee2ff8136447b5a6d04ccc18bf6948\" width=\"1\" height=\"1\" alt=\"\"\/><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Da wir alle drei Konzepte heute in den Intelprozessoren und auch einigen AMD-Typen finden, mal eine historische Betrachtung was die Unterschiede sind und was wo n&uuml;tzt. Das &auml;lteste sind mehrere funktionelle Einheiten. Dazu hole ich erst mal aus und erkl&auml;re wie eine CPU allgemein aufgebaut ist. Man kann sie selbst bei einfachen Exemplaren, also z.B. [&hellip;]<\/p>\n","protected":false},"author":169,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[4],"tags":[],"class_list":["post-10611","post","type-post","status-publish","format-standard","hentry","category-computer","entry"],"a3_pvc":{"activated":false,"total_views":498,"today_views":0},"jetpack-related-posts":[{"id":18610,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/27\/galileos-cds-teil-1\/","url_meta":{"origin":10611,"position":0},"title":"Galileos CDS &#8211; Teil 1","author":"Bernd Leitenberger","date":"27.03.2026","format":false,"excerpt":"Hall\u00f6chen, es wird Zeit das ich mich mal wieder melde. Es gab zwei Gr\u00fcnde, warum ich mich so rar gemacht habe. Das eine ist das es gerade nicht so viel aktuelles gibt, au\u00dfer einem Update zu Artemis, zu dem ich vielleicht noch etwas schreibe. W\u00e4hrend Trump das ganze Programm nach\u2026","rel":"","context":"In &quot;Raumfahrt&quot;","block_context":{"text":"Raumfahrt","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/raumfahrt\/"},"img":{"alt_text":"","src":"https:\/\/vg07.met.vgwort.de\/na\/4fb81c7bafbd4d9d88b5695abdb33d29","width":350,"height":200},"classes":[]},{"id":18612,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/28\/galileos-cds-teil-2\/","url_meta":{"origin":10611,"position":1},"title":"Galileos CDS \u2013 Teil 2","author":"Bernd Leitenberger","date":"28.03.2026","format":false,"excerpt":"So, heute geht es weiter mit Teil 2 \u00fcber Galileos CDS, dieser Beitrag schlie\u00dft nahtlos an den ersten Beitrag von gestern an, wie man schon an der ersten Textzeile sieht. Nach der Einleitung im ersten Teil geht es heute weiter damit warum der RCA 1802 genutzt wurde und was seine\u2026","rel":"","context":"In &quot;Raumfahrt&quot;","block_context":{"text":"Raumfahrt","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/raumfahrt\/"},"img":{"alt_text":"","src":"https:\/\/vg07.met.vgwort.de\/na\/191e4b0728de42829cf656027b84dc82","width":350,"height":200},"classes":[]},{"id":18676,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/05\/31\/die-glorreichen-10-programmiersprachen\/","url_meta":{"origin":10611,"position":2},"title":"Die glorreichen 10 \u2013 Programmiersprachen","author":"Bernd Leitenberger","date":"31.05.2026","format":false,"excerpt":"Ich wollte mal eine Reihe in dieser Rubrik \u00fcber Programmiersprachen machen. Zuerst dachte ich daran eine Liste nach meinen pers\u00f6nlichen Favoriten zu erstellen. Anfangs bef\u00fcrchtete ich, dass ich gar nicht auf 10 komme, aber es sind tats\u00e4chlich mehr, wenngleich ich in vielen Sprachen nur kleine Programme verfasst habe oder mich\u2026","rel":"","context":"In &quot;Die Glorreichen 10&quot;","block_context":{"text":"Die Glorreichen 10","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/allgemein\/die-glorreichen-10\/"},"img":{"alt_text":"","src":"https:\/\/vg09.met.vgwort.de\/na\/4073c4f9dc6943a08702cdde13605d43","width":350,"height":200},"classes":[]},{"id":18614,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/03\/29\/galileos-cds-teil-3\/","url_meta":{"origin":10611,"position":3},"title":"Galileos CDS &#8211; Teil 3","author":"Bernd Leitenberger","date":"29.03.2026","format":false,"excerpt":"So nun zum dritten Teil \u00fcber das prim\u00e4re Computersystem von Galileo, das CDS. Nachdem sich die ersten beiden Teile nur mit dem RCA 1802, warum er gew\u00e4hlt wurde und seiner Architektur befassten geht es heute um das Computersystem selbst. Der Artikel schlie\u00dft so an seine beiden Vorg\u00e4nger gestern und vorgestern\u2026","rel":"","context":"In &quot;Raumfahrt&quot;","block_context":{"text":"Raumfahrt","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/raumfahrt\/"},"img":{"alt_text":"","src":"https:\/\/vg07.met.vgwort.de\/na\/6e7f572a246b4ac395de9c260733b707","width":350,"height":200},"classes":[]},{"id":18683,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/06\/01\/die-glorreichen-10-programmiersprachen-2\/","url_meta":{"origin":10611,"position":4},"title":"Die glorreichen 10 \u2013 Programmiersprachen (2)","author":"Bernd Leitenberger","date":"01.06.2026","format":false,"excerpt":"Der heutige Teil schlie\u00dft nahtlos an den ersten Teil an, der gestern erschien. Es geht um 10 Kriterien anhand derer man Programmiersprachen kategorisieren kann. Maschinennah oder universell, aber komplex Als eine maschinennahe Sprache bezeichnet man eine Sprache, die nahe den M\u00f6glichkeiten von Prozessoren ist. Das Paradebeispiel ist C. Alle Prozessoren\u2026","rel":"","context":"In &quot;Die Glorreichen 10&quot;","block_context":{"text":"Die Glorreichen 10","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/allgemein\/die-glorreichen-10\/"},"img":{"alt_text":"","src":"https:\/\/vg09.met.vgwort.de\/na\/7f5d9cf5265047179df05b778bf455b5","width":350,"height":200},"classes":[]},{"id":18752,"url":"https:\/\/www.bernd-leitenberger.de\/blog\/2026\/07\/10\/tritiumbatterien\/","url_meta":{"origin":10611,"position":5},"title":"&#8222;Tritiumbatterien&#8220;","author":"Bernd Leitenberger","date":"10.07.2026","format":false,"excerpt":"Als ich nach dem n\u00e4chsten Starship-Start suchte \u2013 der letzte ist ja schon sieben Wochen her und nach Musk sollten sie ja einmal pro Monat starten fand ich das heutige Thema. Vor allem weil es der erste Start nach dem IPO ist, da ist interessant ob sie da genauso weitermachen\u2026","rel":"","context":"In &quot;Raumfahrt&quot;","block_context":{"text":"Raumfahrt","link":"https:\/\/www.bernd-leitenberger.de\/blog\/category\/raumfahrt\/"},"img":{"alt_text":"","src":"https:\/\/vg08.met.vgwort.de\/na\/6eacf18a864045b598040349a542f226","width":350,"height":200},"classes":[]}],"jetpack_sharing_enabled":true,"amp_enabled":true,"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts\/10611","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/users\/169"}],"replies":[{"embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/comments?post=10611"}],"version-history":[{"count":0,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/posts\/10611\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/media?parent=10611"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/categories?post=10611"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.bernd-leitenberger.de\/blog\/wp-json\/wp\/v2\/tags?post=10611"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}