DE112018006540T5 - Dynamisches ersetzen eines aufrufs einer software-bibliothek durch einen aufruf eines beschleunigers - Google Patents

Dynamisches ersetzen eines aufrufs einer software-bibliothek durch einen aufruf eines beschleunigers Download PDF

Info

Publication number
DE112018006540T5
DE112018006540T5 DE112018006540.5T DE112018006540T DE112018006540T5 DE 112018006540 T5 DE112018006540 T5 DE 112018006540T5 DE 112018006540 T DE112018006540 T DE 112018006540T DE 112018006540 T5 DE112018006540 T5 DE 112018006540T5
Authority
DE
Germany
Prior art keywords
accelerator
software library
computer program
call
calls
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112018006540.5T
Other languages
English (en)
Inventor
Lance Gordon Thompson
Paul Schardt
Chun-ta Chen Jim
James Carey
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of DE112018006540T5 publication Critical patent/DE112018006540T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/51Source to source
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/54Link editing before load time
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/34Circuit design for reconfigurable circuits, e.g. field programmable gate arrays [FPGA] or programmable logic devices [PLD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • G06F8/61Installation
    • G06F8/63Image based installation; Cloning; Build to order

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)
  • Advance Control (AREA)

Abstract

Ein Computerprogramm enthält Aufrufe einer Software-Bibliothek. Es wird eine virtuelle Funktionstabelle aufgebaut, welche die Aufrufe der Software-Bibliothek in dem Computerprogramm enthält. Eine programmierbare Einheit enthält einen oder mehrere aktuell implementierte Beschleuniger. Es werden die verfügbaren Beschleuniger ermittelt, die aktuell implementiert sind. Die Aufrufe in der Software-Bibliothek, die einem aktuell implementierten Beschleuniger entsprechen, werden ermittelt. Ein oder mehrere Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle werden durch einen oder mehrere entsprechende Aufrufe eines entsprechenden aktuell implementierten Beschleunigers ersetzt. Wenn ein Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, wird dynamisch ein Beschleuniger-Abbild für den neuen Beschleuniger erzeugt. Das Beschleuniger-Abbild wird dann bereitgestellt, um den neuen Beschleuniger zu erstellen. Ein oder mehrere Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle werden durch einen oder mehrere entsprechende Aufrufe des neuen Beschleunigers ersetzt.

Description

  • HINTERGRUND
  • Technisches Gebiet
  • Diese Offenbarung betrifft allgemein Computersysteme und insbesondere Hardware-Beschleuniger in Computersystemen.
  • Allgemeiner Stand der Technik
  • Die Open Coherent Accelerator Processor Interface (OpenCAPI) ist eine Spezifikation, die von einem Konsortium aus Branchenführern entwickelt wurde. Die OpenCAPI-Spezifikation definiert eine Schnittstelle, die es einem beliebigen Prozessor ermöglicht, sich an kohärente Beschleuniger und E/A-Einheiten auf Nutzerebene anzuschließen. OpenCAPI stellt eine Spezifikation für offene Schnittstellenkonstruktion mit hoher Bandbreite und niedriger Latenz bereit, die darauf ausgelegt ist, die Komplexität der Konstruktion von Hochleistungsbeschleunigern zu minimieren. Mit der Fähigkeit zu einer Datenrate von 25 Gigabit (Gbit) pro Sekunde und Kanal übertrifft OpenCAPI die aktuelle „Peripheral Component Interconnect Express“- (PCIe-) Spezifikation, die eine maximale Datenübertragungsrate von 16 Gbit pro Sekunde und Kanal bietet. OpenCAPI stellt einen datenzentrierten Ansatz bereit, indem es die Rechenleistung näher an die Daten heranbringt und Unzulänglichkeiten in herkömmlichen Systemarchitekturen behebt, um dazu beizutragen, Engpässe bei der Systemleistung zu beseitigen und die Systemleistung zu verbessern. Ein wesentlicher Vorteil von OpenCAPI ist, dass virtuelle Adressen für einen Prozessor gemeinsam genutzt und in einer OpenCAPI-Einheit wie beispielsweise einem Beschleuniger in gleicher Weise wie vom Prozessor genutzt werden können. Mit der Entwicklung von OpenCAPI können nun Hardware-Beschleuniger entwickelt werden, die eine Schnittstelle mit OpenCAPI-Architektur enthalten.
  • KURZDARSTELLUNG
  • Aspekte der vorliegenden Erfindung sehen vor, dass ein Computerprogramm Aufrufe einer Software-Bibliothek enthält. Es wird eine virtuelle Funktionstabelle aufgebaut, welche die Aufrufe der Software-Bibliothek in dem Computerprogramm enthält. Eine programmierbare Einheit enthält einen oder mehrere aktuell implementierte Beschleuniger. Es werden die verfügbaren Beschleuniger ermittelt, die aktuell implementiert sind. Die Aufrufe in der Software-Bibliothek, die einem aktuell implementierten Beschleuniger entsprechen, werden ermittelt. Ein oder mehrere Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle werden durch einen oder mehrere entsprechende Aufrufe eines entsprechenden aktuell implementierten Beschleunigers ersetzt. Wenn ein Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, wird dynamisch ein Beschleuniger-Abbild für den neuen Beschleuniger erzeugt. Das Beschleuniger-Abbild wird dann bereitgestellt, um den neuen Beschleuniger zu erstellen. Ein oder mehrere Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle werden durch einen oder mehrere entsprechende Aufrufe des neuen Beschleunigers ersetzt.
  • Unter einem ersten Aspekt stellt die vorliegende Erfindung eine Vorrichtung bereit, die Folgendes aufweist: mindestens einen Prozessor; einen mit dem mindestens einen Prozessor verbundenen Speicher; eine mit dem mindestens einen Prozessor verbundene programmierbare Einheit, die einen aktuell implementierten Beschleuniger enthält; ein Computerprogramm, das sich in dem Speicher befindet und durch den mindestens einen Prozessor ausgeführt wird; eine in dem Speicher befindliche Software-Bibliothek, die eine Mehrzahl durch das Computerprogramm aufgerufener Funktionen enthält; und ein Beschleuniger-Bereitstellungstool, das sich in dem Speicher befindet und mit dem mindestens einen Prozessor verbunden ist, wobei das Beschleuniger-Bereitstellungstool eine Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm ermittelt, eine virtuelle Funktionstabelle aufbaut, welche die Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm enthält, feststellt, dass der aktuell implementierte Beschleuniger in der programmierbaren Einheit verfügbar ist, feststellt, dass ein erster der Mehrzahl von Aufrufen in der Software-Bibliothek dem aktuell implementierten Beschleuniger entspricht, und den ersten Aufruf der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des aktuell implementierten Beschleunigers ersetzt.
  • Die vorliegende Erfindung stellt bevorzugt eine Vorrichtung bereit, wobei die programmierbare Einheit eine mit dem mindestens einen Prozessor verbundene OpenCAPI-Schnittstelle (Open Coherent Accelerator Processor Interface) aufweist.
  • Bevorzugt stellt die vorliegende Erfindung eine Vorrichtung bereit, wobei das Beschleuniger-Bereitstellungstool feststellt, dass ein zweiter Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, dynamisch ein Beschleuniger-Abbild für den neuen Beschleuniger erzeugt, das Beschleuniger-Abbild der programmierbaren Einheit bereitstellt, um den neuen Beschleuniger zu erstellen, und den zweiten Aufruf der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des neuen Beschleunigers ersetzt.
  • Bevorzugt stellt die vorliegende Erfindung eine Vorrichtung bereit, wobei es sich bei dem neuen Beschleuniger nicht um den aktuell implementierten Beschleuniger in der programmierbaren Einheit handelt.
  • Bevorzugt stellt die vorliegende Erfindung eine Vorrichtung bereit, wobei das Beschleuniger-Bereitstellungstool das Beschleuniger-Abbild dynamisch erzeugt durch Umwandeln eines Codeabschnitts in dem Computerprogramm in eine Darstellung in einer Hardware-Beschreibungssprache und anschließendes Verarbeiten der Darstellung in der Hardware-Beschreibungssprache, um daraus das Beschleuniger-Abbild zu erzeugen.
  • Die vorliegende Erfindung stellt bevorzugt eine Vorrichtung bereit, wobei die programmierbare Einheit eine vor Ort programmierbare Gatter-Anordnung (FPGA, Field Programmable Gate Array) aufweist.
  • Unter einem zweiten Aspekt stellt die vorliegende Erfindung eine Vorrichtung bereit, die Folgendes aufweist: mindestens einen Prozessor; einen mit dem mindestens einen Prozessor verbundenen Speicher; eine mit dem mindestens einen Prozessor verbundene, vor Ort programmierbare Gatter-Anordnung (FPGA), die eine mit dem mindestens einen Prozessor verbundene OpenCAPI-Schnittstelle aufweist, wobei die FPGA einen aktuell implementierten Beschleuniger enthält; ein Computerprogramm, das sich in dem Speicher befindet und durch den mindestens einen Prozessor ausgeführt wird; eine in dem Speicher befindliche Software-Bibliothek, die eine Mehrzahl durch das Computerprogramm aufgerufener Funktionen enthält; und ein Beschleuniger-Bereitstellungstool, das sich in dem Speicher befindet und mit dem mindestens einen Prozessor verbunden ist, wobei das Beschleuniger-Bereitstellungstool eine Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm ermittelt, eine virtuelle Funktionstabelle aufbaut, welche die Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm enthält, feststellt, dass der aktuell implementierte Beschleuniger in der programmierbaren Einheit verfügbar ist, feststellt, dass ein erster der Mehrzahl von Aufrufen in der Software-Bibliothek dem aktuell implementierten Beschleuniger entspricht, den ersten Aufruf der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des aktuell implementierten Beschleunigers ersetzt, feststellt, dass ein zweiter Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, bei dem es sich nicht um den aktuell implementierten Beschleuniger handelt, ein Beschleuniger-Abbild für den neuen Beschleuniger dynamisch erzeugt durch Umwandeln eines Codeabschnitts in dem Computerprogramm in eine Darstellung in einer Hardware-Beschreibungssprache und anschließendes Verarbeiten der Darstellung in der Hardware-Beschreibungssprache, um daraus das Beschleuniger-Abbild zu erzeugen, das Beschleuniger-Abbild der programmierbaren Einheit bereitstellt, um den neuen Beschleuniger zu erstellen, und den zweiten Aufruf der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des neuen Beschleunigers ersetzt.
  • Unter einem dritten Aspekt stellt die vorliegende Erfindung ein Verfahren zum Verbessern der Laufzeitleistung eines Computerprogramms bereit, wobei das Verfahren Folgendes umfasst: Bereitstellen eines aktuell implementierten Beschleunigers in einer programmierbaren Einheit; Bereitstellen einer Software-Bibliothek, die eine Mehrzahl durch das Computerprogramm aufgerufener Funktionen enthält; Ermitteln einer Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm; Aufbauen einer virtuellen Funktionstabelle, welche die Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm enthält; Feststellen, dass der aktuell implementierte Beschleuniger in der programmierbaren Einheit verfügbar ist; Feststellen, dass ein erster der Mehrzahl von Aufrufen in der Software-Bibliothek dem aktuell implementierten Beschleuniger entspricht; und Ersetzen des ersten Aufrufs der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des aktuell implementierten Beschleunigers.
  • Die vorliegende Erfindung stellt bevorzugt ein Verfahren bereit, wobei die programmierbare Einheit eine mit dem mindestens einen Prozessor verbundene OpenCAPI-Schnittstelle (Open Coherent Accelerator Processor Interface) aufweist.
  • Bevorzugt stellt die vorliegende Erfindung ein Verfahren bereit, das ferner Folgendes umfasst: Feststellen, dass ein zweiter Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte; dynamisches Erzeugen eines Beschleuniger-Abbilds für den neuen Beschleuniger; Bereitstellen des Beschleuniger-Abbilds an die programmierbare Einheit, um den neuen Beschleuniger zu erstellen; und Ersetzen des zweiten Aufrufs der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des neuen Beschleunigers.
  • Bevorzugt stellt die vorliegende Erfindung ein Verfahren bereit, wobei es sich bei dem neuen Beschleuniger nicht um den aktuell implementierten Beschleuniger in der programmierbaren Einheit handelt.
  • Bevorzugt stellt die vorliegende Erfindung ein Verfahren bereit, wobei das dynamische Erzeugen des Beschleuniger-Abbilds für den neuen Beschleuniger Folgendes umfasst: Umwandeln eines Codeabschnitts in dem Computerprogramm in eine Darstellung in einer Hardware-Beschreibungssprache; Verarbeiten der Darstellung in der Hardware-Beschreibungssprache, um daraus das Beschleuniger-Abbild zu erzeugen.
  • Die vorliegende Erfindung stellt bevorzugt ein Verfahren bereit, wobei die programmierbare Einheit eine vor Ort programmierbare Gatter-Anordnung (FPGA) aufweist.
  • Die vorstehenden sowie weitere Merkmale und Vorteile werden aus der nachfolgenden konkreteren Beschreibung ersichtlich, die in den beiliegenden Zeichnungen veranschaulicht wird.
  • Figurenliste
  • Die Offenbarung wird in Verbindung mit den beiliegenden Zeichnungen beschrieben, wobei gleiche Bezugszeichen gleiche Elemente bezeichnen. Es zeigen:
    • 1 ein Blockschaltbild eines beispielhaften Systems, das veranschaulicht, wie eine OpenCAPI-Schnittstelle verwendet werden kann;
    • 2 einen Ablaufplan einer programmierbaren Einheit mit einer OpenCAPI-Schnittstelle, die einen oder mehrere Hardware-Beschleuniger enthalten kann;
    • 3 ein Blockschaltbild eines Computersystems, das ein Tool zum dynamischen Erzeugen und Bereitstellen eines Beschleunigers für einen Codeabschnitt in einem Computerprogramm enthält;
    • 4 einen Ablaufplan, der eine konkrete Implementierung zeigt, wie die Beschleuniger-Abbild-Erzeugungseinrichtung aus 3 ein Beschleuniger-Abbild aus einem Codeabschnitt erzeugt;
    • 5 ein Blockschaubild einer konkreten Umsetzung für die Codeanalyseeinrichtung aus 3, die ein Computerprogramm analysiert und einen Codeabschnitt auswählt;
    • 6 einen Ablaufplan eines Verfahrens zum Identifizieren eines Codeabschnitts in einem Computerprogramm, dynamischen Erzeugen und Bereitstellen eines dem Codeabschnitt entsprechenden Beschleunigers und anschließenden Ändern des Computerprogramms, um den Codeabschnitt durch einen Aufruf des bereitgestellten Beschleunigers zu ersetzen.
    • 7 ein Blockschaubild, das ein erstes beispielhaftes Computerprogramm mit verschiedenen Codeabschnitten zeigt;
    • 8 ein Blockschaubild, das zeigt, wie ein Codeabschnitt in HDL und anschließend in ein Beschleuniger-Abbild umgewandelt werden kann, das einer programmierbaren Einheit bereitgestellt werden kann, um einen Beschleuniger bereitzustellen;
    • 9 ein Blockschaubild, welches das Computerprogramm aus 7 zeigt, nachdem der Codeabschnitt B durch einen Aufruf des Beschleunigers für den Codeabschnitt B ersetzt wurde;
    • 10 ein Blockschaubild, das einen beispielhaften Beschleunigerkatalog zeigt;
    • 11 einen Ablaufplan eines Verfahrens zum Bereitstellen eines Beschleunigers für einen Codeabschnitt, wenn ein Katalog aus zuvor erzeugten Beschleunigern gepflegt wird;
    • 12 ein Blockschaubild, das ein zweites beispielhaftes Computerprogramm mit verschiedenen Codeabschnitten zeigt;
    • 13 ein Blockschaubild, das zwei Codeabschnitte in dem Computerprogramm aus 12 identifiziert, die von einem Beschleuniger profitieren würden;
    • 14 ein Blockschaubild, das einen beispielhaften Beschleunigerkatalog zeigt, der einen Beschleuniger enthält, der dem Codeabschnitt Q entspricht;
    • 15 ein Blockschaltbild, das die Bereitstellung eines im Katalog aus 14 identifizierten Beschleuniger-Abbilds für den Codeabschnitt Q an eine programmierbare Einheit zeigt.
    • 16 ein Blockschaubild, welches das Computerprogramm aus 12 zeigt, nachdem der Codeabschnitt Q durch einen Aufruf des Beschleunigers für den Codeabschnitt Q ersetzt wurde;
    • 17 ein Blockschaubild, das die Erzeugung eines Beschleuniger-Abbilds aus dem Codeabschnitt R in dem in 12 und 16 gezeigten Computerprogramm zeigt;
    • 18 ein Blockschaubild, das die Bereitstellung eines neu erzeugten Beschleuniger-Abbilds für den Codeabschnitt R an eine programmierbare Einheit zeigt;
    • 19 ein Blockschaubild, welches das Computerprogramm aus 16 zeigt, nachdem der Codeabschnitt R durch einen Aufruf des Beschleunigers für den Codeabschnitt R ersetzt wurde;
    • 20 ein Blockschaubild des in 14 gezeigten Beschleunigerkatalogs 1400, nachdem ein den Beschleuniger für den Codeabschnitt R darstellender Eintrag erstellt wurde;
    • 21 ein Blockschaubild eines beispielhaften Computerprogramms;
    • 22 ein Blockschaubild einer programmierbaren Einheit, die eine OpenCAPI-Schnittstelle besitzt und einen Beschleuniger für den Schleifenabschnitt aus 21, einen Beschleuniger für den Verzweigungsbaumabschnitt aus 21 und einen Beschleuniger für den langen seriellen Abschnitt aus 21 enthält;
    • 23 ein Blockschaubild des Computerprogramms aus 21, nachdem die Codeabschnitte durch Aufrufe entsprechender Beschleuniger ersetzt wurden;
    • 24 ein Blockschaubild eines Computerprogramms gemäß Stand der Technik, das Funktionen in einer Software-Bibliothek aufruft;
    • 25 einen Ablaufplan eines Verfahrens zum Ersetzen von Aufrufen der Software-Bibliothek durch entsprechende Aufrufe eines oder mehrerer aktuell implementierter Beschleuniger;
    • 26 eine virtuelle Funktionstabelle, die für Aufrufe aus dem Computerprogramm an die Software-Bibliothek eine Umleitungsebene erstellt;
    • 27 ein Blockschaubild des Computerprogramms aus 24, nachdem die Aufrufe der Software-Bibliothek durch Aufrufe der virtuellen Funktionstabelle ersetzt wurden;
    • 28 ein Blockschaubild einer Beschleuniger-Korrelationstabelle, die aktuell implementierte Beschleuniger zeigt, die Funktionen in der Software-Bibliothek entsprechen;
    • 29 ein Blockschaubild einer programmierbaren Einheit, das die drei in der Tabelle in 28 aufgeführten aktuell implementierten Beschleuniger zeigt.
    • 30 die virtuelle Funktionstabelle aus 26, nachdem Aufrufe der Software-Bibliothek durch Aufrufe entsprechender Beschleuniger ersetzt wurden;
    • 31 einen Ablaufplan eines Verfahrens zum Erzeugen eines neuen Beschleunigers und Ersetzen eines oder mehrerer Aufrufe der Software-Bibliothek durch einen oder mehrere entsprechende Aufrufe des neuen Beschleunigers;
    • 32 ein Blockschaubild einer programmierbaren Einheit, das die drei zuvor erzeugten Beschleuniger und den einen in 31 erzeugten neuen Beschleuniger zeigt; und
    • 33 die virtuelle Funktionstabelle aus 26 und 30, nachdem Aufrufe der Software-Bibliothek durch entsprechende Aufrufe des neuen Beschleunigers ersetzt wurden.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Wie vorstehend im Abschnitt zum allgemeinen Stand der Technik erläutert, handelt es sich bei Open Coherent Accelerator Processor Interface (OpenCAPI) um eine Spezifikation, die eine Schnittstelle definiert, die es einem beliebigen Prozessor ermöglicht, sich an kohärente Beschleuniger und E/A-Einheiten auf Nutzerebene anzuschließen. Unter Bezugnahme auf 1 wird ein beispielhaftes Computersystem 100 gezeigt, um einige der die OpenCAPI-Schnittstelle 150 betreffenden Konzepte zu veranschaulichen. Ein Prozessor 110 ist mit einem standardmäßigen Speicher 140 oder einer Speicherhierarchie wie aus dem Stand der Technik bekannt verbunden. Über eine PCIe-Schnittstelle 120 ist der Prozessor mit einer oder mehreren PCIe-Einheiten 130 verbunden. Der Prozessor 110 ist zudem über eine OpenCAPI-Schnittstelle 150 mit einer oder mehreren kohärenten Einheiten verbunden, beispielsweise einem Beschleuniger 160, einer kohärenten Netzwerksteuerung 170, einem erweiterten Speicher 180 und einer kohärenten Speichersteuerung 190, die im Speicher 195 gespeicherte Daten steuert. Zwar ist aus Veranschaulichungsgründen die OpenCAPI-Schnittstelle 150 in 1 als separate Einheit gezeigt, jedoch kann die OpenCAPI-Schnittstelle 150 anstatt als separate Schnittstelle wie in 1 gezeigt auch innerhalb jeder der kohärenten Einheiten implementiert sein. Der Beschleuniger 160 kann somit eine eigene OpenCAPI-Schnittstelle besitzen, ebenso die anderen kohärenten Einheiten 170, 180 und 190. Einer der wesentlichen Vorteile von OpenCAPI besteht darin, dass virtuelle Adressen für den Prozessor 110 mit kohärenten Einheiten gemeinsam genutzt werden können, die mit einer OpenCAPI-Schnittstelle verbunden sind oder diese enthalten, was ihnen ermöglicht, die virtuellen Adressen in gleicher Weise wie der Prozessor 110 zu nutzen.
  • Bereitstellen von Beschleunigern an programmierbare Einheiten ist im Fachgebiet allgemein bekannt. Unter Bezugnahme auf 2 repräsentiert eine programmierbare Einheit 200 jede beliebige geeignete programmierbare Einheit. Beispielsweise könnte es sich bei der programmierbaren Einheit 200 um eine FPGA oder eine ASIC handeln. In der programmierbaren Einheit kann eine OpenCAPI-Schnittstelle 210 implementiert sein. Zudem können in der programmierbaren Einheit 200 ein oder mehrere Beschleuniger implementiert sein. 1 zeigt beispielhaft den Beschleuniger 1 220A, Beschleuniger 2 220B, ..., Beschleuniger N 220N. Nach dem Stand der Technik würde ein menschlicher Konstrukteur auf Grundlage einer Funktion, die durch Implementierung in Hardware beschleunigt werden muss, ermitteln, welche Art von Beschleuniger benötigt wird. Die Beschleuniger-Funktion könnte beispielsweise in einer Hardware-Beschreibungssprache (HDL) dargestellt werden. Unter Verwendung bekannter Tools kann der menschliche Konstrukteur dann ein Beschleuniger-Abbild erzeugen, das der HDL entspricht. Sobald es in die programmierbare Einheit wie beispielsweise 200 in 2 geladen wurde, erstellt das Beschleuniger-Abbild in der programmierbaren Einheit einen Beschleuniger, der nach Bedarf von einem oder mehreren Computerprogrammen aufgerufen werden kann, um den oder die Hardware-Beschleuniger bereitzustellen.
  • Ein Computerprogramm enthält Aufrufe einer Software-Bibliothek. Es wird eine virtuelle Funktionstabelle aufgebaut, welche die Aufrufe der Software-Bibliothek in dem Computerprogramm enthält. Eine programmierbare Einheit enthält einen oder mehrere aktuell implementierte Beschleuniger. Es werden die verfügbaren Beschleuniger ermittelt, die aktuell implementiert werden. Die Aufrufe in der Software-Bibliothek, die einem aktuell implementierten Beschleuniger entsprechen, werden ermittelt. Ein oder mehrere Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle werden durch einen oder mehrere entsprechende Aufrufe eines entsprechenden aktuell implementierten Beschleunigers ersetzt. Wenn ein Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, wird dynamisch ein Beschleuniger-Abbild für den neuen Beschleuniger erzeugt. Das Beschleuniger-Abbild wird dann bereitgestellt, um den neuen Beschleuniger zu erstellen. Ein oder mehrere Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle werden durch einen oder mehrere entsprechende Aufrufe des neuen Beschleunigers ersetzt.
  • Unter Bezugnahme auf 3 handelt es sich bei einem Computersystem 300 um eine geeignete Implementierung eines Computersystems, das ein Beschleuniger-Bereitstellungstool enthält, das Aufrufe einer Software-Bibliothek dynamisch durch Aufrufe eines oder mehrerer Beschleuniger ersetzt, wie nachstehend noch ausführlicher beschrieben wird. Bei dem Computersystem 300 handelt es sich um ein POWER9-Computersystem von IBM. Ein Fachmann versteht jedoch, dass die vorliegende Offenbarung in gleicher Weise für jedes beliebige Computersystem gilt, gleichgültig ob es sich bei dem Computersystem um eine komplizierte Mehrbenutzer-Datenverarbeitungsvorrichtung, eine Einzelnutzer-Arbeitsstation, ein Laptop-Computersystem, einen Tablet-Computer, ein Telefon oder ein eingebettetes Steuersystem handelt. Wie in 3 gezeigt wird, weist das Computersystem 300 einen oder mehrere Prozessoren 310, eine programmierbare Einheit 312, einen Hauptspeicher 320, eine Massenspeicherschnittstelle 330, eine Anzeigenschnittstelle 340 und eine Netzwerkschnittstelle 350 auf. Diese Systemkomponenten sind untereinander durch Verwendung eines Systembusses 360 verbunden. Die Massenspeicherschnittstelle 330 wird verwendet, um Massenspeichereinheiten wie beispielsweise die lokale Massenspeichereinheit 355 mit dem Computersystem 300 zu verbinden. Bei einer konkreten Art von lokaler Massenspeichereinheit 355 handelt es sich um ein Laufwerk für lesbare und beschreibbare CD-RWs, das Daten auf einer CD-RW 395 speichern und von dieser lesen kann. Bei einer weiteren geeigneten Art von lokaler Massenspeichereinheit 355 handelt es sich um einen Kartenleser, der eine auswechselbare Speicherkarte wie beispielsweise eine SD-Karte aufnimmt und an dem auswechselbaren Speicher Lese- und Schreibvorgänge durchführt. Bei einer weiteren geeigneten Art einer lokalen Massenspeichereinheit 355 handelt es sich um einen Universal Serial Bus (USB), der eine Speichereinheit wie beispielsweise einen USB-Stick liest.
  • Der Hauptspeicher 320 enthält bevorzugt Daten 321, ein Betriebssystem 322, ein Computerprogramm 323, ein Beschleuniger-Bereitstellungstool 324 und einen Beschleuniger-Katalog 329. Die Daten 321 repräsentieren beliebige Daten, die als Eingabe an ein oder Ausgabe aus einem beliebigen Programm im Computersystem 300 dienen. Bei dem Betriebssystem 322 handelt es sich um ein Multitasking-Betriebssystem wie beispielsweise AIX oder LINUX. Das Computerprogramm 323 repräsentiert ein beliebiges geeignetes Computerprogramm, darunter, ohne hierauf eingeschränkt zu sein, ein Anwendungsprogramm, ein Betriebssystem, Firmware, ein Gerätetreiber usw. Das Beschleuniger-Bereitstellungstool 324 enthält bevorzugt eine Codeanalyseeinrichtung 325, eine Beschleuniger-Abbild-Erzeugungseinrichtung 327 und eine Beschleuniger-Implementierungseinrichtung 328. Die Codeanalyseeinrichtung 325 analysiert das Computerprogramm 324 zu dessen Laufzeit, um dessen Laufzeitleistung zu ermitteln. Ein geeigneter Weg für die Codeanalyseeinrichtung 325 zum Analysieren des Computerprogramms besteht im Verwenden bekannter Methoden zum Überwachen der Laufzeitleistung eines Computerprogramms. Beispielsweise existieren im Fachgebiet Tools, die Echtzeitüberwachung der Laufzeitleistung eines Computerprogramms mittels einer außerhalb des Computerprogramms befindlichen Überwachungseinrichtung ermöglichen, die beispielsweise erfasst, welche Adressen durch den Prozessor 310 während der Ausführung des Computerprogramms 323 ausgeführt werden. Andere, als Profiler bekannte Tools ermöglichen ein Einfügen von Code mit Messfunktionen in ein Computerprogramm, wobei es sich um Code handelt, der verschiedene Zähler erhöht, wenn verschiedene Abzweigungen des Computerprogramms ausgeführt werden. Die Werte der Zähler können analysiert werden, um die Häufigkeit der Ausführung jedes Abschnitts des Computerprogramms zu ermitteln. Nach dem Analysieren der Laufzeitleistung des Computerprogramms identifiziert die Codeanalyseeinrichtung 325 einen Codeabschnitt 326, d.h. einen Codeabschnitt im Computerprogramm 323, der durch Bereitstellung an einen Hardware-Beschleuniger verbessert wird, um die Laufzeitleistung des Computerprogramms 323 zu erhöhen.
  • Die Beschleuniger-Abbild-Erzeugungseinrichtung 327 erzeugt dynamisch ein Beschleuniger-Abbild, das dem durch die Codeanalyseeinrichtung 325 identifizierten Codeabschnitt 326 im Computerprogramm 323 entspricht. Die Beschleuniger-Abbild-Erzeugungseinrichtung 327 kann mittels eines beliebigen geeigneten Verfahrens ein Beschleuniger-Abbild aus dem Codeabschnitt 326 erzeugen. Beispielsweise könnte die Beschleuniger-Abbild-Erzeugungseinrichtung 327 eine äquivalente Darstellung des Codeabschnitts 326 in einer Hardware-Beschreibungssprache (HDL) erzeugen und anschließend die HDL-Darstellung in ein geeignetes Beschleuniger-Abbild für die programmierbare Einheit 312 synthetisieren. Die Beschleuniger-Implementierungseinrichtung 328 nimmt bevorzugt ein durch die Beschleuniger-Abbild-Erzeugungseinrichtung 327 erzeugtes Beschleuniger-Abbild und verwendet das Beschleuniger-Abbild, um die programmierbare Einheit 312 zu programmieren, wodurch in der programmierbaren Einheit 312 ein Hardware-Beschleuniger 314 erzeugt wird, der dem Codeabschnitt 326 entspricht.
  • In einer ersten Implementierung erzeugt das Beschleuniger-Bereitstellungstool 324 dynamisch ein dem Codeabschnitt 326 des Computerprogramms 323 entsprechendes Beschleuniger-Abbild und programmiert anschließend die programmierbare Einheit mit dem Beschleuniger-Abbild, so dass die programmierbare Einheit einen Hardware-Beschleuniger enthält, der dem Codeabschnitt 326 entspricht. In einer zweiten Implementierung wird ein Beschleuniger-Katalog 329 bereitgestellt und gepflegt. Der Beschleuniger-Katalog 329 enthält bevorzugt eine Auflistung zuvor erzeugter Beschleuniger. In der zweiten Implementierung prüft das Beschleuniger-Bereitstellungstool 324 zunächst den Beschleuniger-Katalog 329, um zu sehen, ob für den Codeabschnitt 326 ein zuvor erzeugter Beschleuniger verfügbar ist. Ist dies der Fall, stellt das Beschleuniger-Bereitstellungstool 324 ein in dem Beschleuniger-Katalog identifiziertes, zuvor erzeugtes Beschleuniger-Abbild bereit. Falls nicht, erzeugt das Beschleuniger-Bereitstellungstool 324 dynamisch ein Beschleuniger-Abbild wie vorstehend beschrieben und lädt das Abbild anschließend in die programmierbare Einheit 312, um den dem Codeabschnitt 326 entsprechenden Beschleuniger 314 bereitzustellen.
  • Das Computersystem 300 nutzt allgemein bekannte virtuelle Adressierungsmechanismen, die es den Programmen des Computersystems 300 ermöglichen, sich so zu verhalten, als hätten sie nur Zugriff auf einen großen, zusammenhängenden Adressraum anstatt Zugriff auf mehrere kleinere Speichereinheiten wie beispielsweise den Hauptspeicher 320 und die lokale Massenspeichereinheit 355. Auch wenn die Daten 321, das Betriebssystem 322, das Computerprogramm 323, das Beschleuniger-Bereitstellungstool 324 und der Beschleuniger-Katalog 329 als im Hauptspeicher 320 befindlich gezeigt sind, versteht somit der Fachmann, dass diese Elemente nicht notwendigerweise alle zur gleichen Zeit vollständig im Hauptspeicher 320 enthalten sind. Zudem ist zu beachten, dass die Bezeichnung „Speicher“ vorliegend allgemein verwendet wird, um den gesamten virtuellen Speicher des Computersystems 300 zu bezeichnen, und auch den virtuellen Speicher anderer mit dem Computersystem 300 verbundener Computersysteme enthalten kann.
  • Der Prozessor 310 kann aus einem oder mehreren Mikroprozessoren und/oder integrierten Schaltungen aufgebaut sein. Beispielsweise könnte es sich beim Prozessor 310 um einen oder mehrere POWER9-Mikroprozessoren handeln. Der Prozessor 310 führt im Hauptspeicher 320 gespeicherte Programmanweisungen aus. Der Hauptspeicher 320 speichert Programme und Daten, auf die der Prozessor 310 zugreifen kann. Wenn das Computersystem 300 hochfährt, führt der Prozessor 310 zunächst die Programmanweisungen aus, die das Betriebssystem 322 ausmachen. Der Prozessor 310 führt zudem das Computerprogramm 323 und das Beschleuniger-Bereitstellungstool 324 aus.
  • Bei der programmierbaren Einheit 312 kann es sich um eine beliebige geeignete programmierbare Logikeinheit handeln, die vom Prozessor 310 dynamisch programmiert werden kann. Zu Beispielen bekannter geeigneter programmierbarer Logikeinheiten zählen vor Ort programmierbare Gatter-Anordnungen (FPGAs). Unter die programmierbare Einheit 312 fällt jedoch allgemein jede programmierbare Logikeinheit, die es dem Prozessor 310 ermöglicht, die programmierbare Einheit 312 dynamisch zu programmieren, einschließlich bekannter Technologien sowie künftig entwickelter Technologien.
  • Auch wenn das gezeigte Computersystem 300 nur einen einzigen Prozessor und einen einzigen Systembus enthält, versteht ein Fachmann, dass ein Beschleuniger-Bereitstellungstool wie das vorliegend beschriebene mittels eines Computersystems umgesetzt werden kann, das mehrere Prozessoren und/oder mehrere Busse besitzt. Zudem enthalten die verwendeten Schnittstellen bevorzugt jeweils separate, vollständig programmierte Mikroprozessoren, die verwendet werden, um rechenintensive Verarbeitung aus dem Prozessor 310 auszulagern. Ein Fachmann versteht jedoch, dass diese Funktionen auch mittels E/A-Adaptern ausgeführt werden können.
  • Die Anzeigenschnittstelle 340 wird verwendet, um eine oder mehrere Anzeigen 365 direkt mit dem Computersystem 300 zu verbinden. Diese Anzeigen 365, bei denen es sich um nichtintelligente (d.h. nichtprogrammierbare) Terminals oder um vollständig programmierbare Arbeitsstationen handeln kann, werden verwendet, um Systemadministratoren und Nutzern die Möglichkeit zu geben, mit dem Computersystem 300 Daten auszutauschen. Es ist jedoch zu beachten, dass, auch wenn eine Anzeigenschnittstelle 340 vorhanden ist, um Datenaustausch mit einer oder mehreren Anzeigen 365 zu unterstützen, das Computersystem 300 nicht notwendigerweise eine Anzeige 365 erfordert, da sämtliche nötige Interaktion mit Nutzern und anderen Prozessen über die Netzwerkschnittstelle 350 erfolgen kann.
  • Die Netzwerkschnittstelle 350 wird verwendet, um das Computersystem 300 über ein Netzwerk 370 mit anderen Computersystemen oder Arbeitsstationen 375 zu verbinden. Die Computersysteme 375 repräsentieren Computersysteme, die über die Netzwerkschnittstelle 350 mit dem Computersystem 300 verbunden sind. Die Netzwerkschnittstelle 350 repräsentiert im weiteren Sinne jede geeignete Möglichkeit, elektronische Einheiten untereinander zu verbinden, ungeachtet dessen, ob das Netzwerk 370 heutige analoge und/oder digitale Technologien oder künftige Vernetzungsmechanismen aufweist. Die Netzwerkschnittstelle 350 enthält bevorzugt eine Kombination aus Hardware und Software, die Datenaustausch im Netzwerk 370 ermöglicht. Software in der Netzwerkschnittstelle 350 umfasst bevorzugt eine Datenaustauschverwaltung, die Datenaustausch mit anderen Computersystemen 375 über das Netzwerk 370 mittels eines geeigneten Netzwerkprotokolls verwaltet. Zur Implementierung eines Netzwerks können viele verschiedene Netzwerkprotokolle verwendet werden. Bei diesen Protokollen handelt es sich um spezialisierte Computerprogramme, die es Computern ermöglichen, über ein Netzwerk Daten auszutauschen. TCP/IP (Transmission Control Protocol/Internet Protocol) ist ein Beispiel eines geeigneten Netzwerkprotokolls, das von der Datenaustauschverwaltung in der Netzwerkschnittstelle 350 verwendet werden kann. In einer geeigneten Implementierung handelt es sich bei der Netzwerkschnittstelle 350 um einen physischen Ethernet-Adapter.
  • Bei der vorliegenden Erfindung kann es sich um ein System, ein Verfahren und/oder ein Computerprogrammprodukt jedes möglichen technisch detaillierten Integrationsgrads handeln. Das Computerprogrammprodukt kann (ein) durch einen Computer lesbare(s) Speichermedium (oder -medien) umfassen, auf dem/denen durch einen Computer lesbare Programmanweisungen gespeichert ist/sind, um einen Prozessor dazu zu veranlassen, Aspekte der vorliegenden Erfindung auszuführen.
  • Bei dem durch einen Computer lesbaren Speichermedium kann es sich um eine physische Einheit handeln, die Anweisungen zur Verwendung durch eine Einheit zur Ausführung von Anweisungen behalten und speichern kann. Bei dem durch einen Computer lesbaren Speichermedium kann es sich zum Beispiel um eine elektronische Speichereinheit, eine magnetische Speichereinheit, eine optische Speichereinheit, eine elektromagnetische Speichereinheit, eine Halbleiterspeichereinheit oder jede geeignete Kombination daraus handeln, ohne auf diese beschränkt zu sein. Zu einer nicht erschöpfenden Liste spezifischerer Beispiele des durch einen Computer lesbaren Speichermediums gehören die Folgenden: eine tragbare Computerdiskette, eine Festplatte, ein Direktzugriffsspeicher (RAM), ein Nur-Lese-Speicher (ROM), ein löschbarer programmierbarer Nur-Lese-Speicher (EPROM bzw. Flash-Speicher), ein statischer Direktzugriffsspeicher (SRAM), ein tragbarer Kompaktspeicherplatte-Nur-Lese-Speicher (CD-ROM), eine DVD (digital versatile disc), ein Speicher-Stick, eine Diskette, eine mechanisch codierte Einheit wie zum Beispiel Lochkarten oder gehobene Strukturen in einer Rille, auf denen Anweisungen gespeichert sind, und jede geeignete Kombination daraus. Ein durch einen Computer lesbares Speichermedium soll in der Verwendung hierin nicht als flüchtige Signale an sich aufgefasst werden, wie zum Beispiel Funkwellen oder andere sich frei ausbreitende elektromagnetische Wellen, elektromagnetische Wellen, die sich durch einen Wellenleiter oder ein anderes Übertragungsmedium ausbreiten (z.B. durch ein Glasfaserkabel geleitete Lichtimpulse) oder durch einen Draht übertragene elektrische Signale.
  • Hierin beschriebene, durch einen Computer lesbare Programmanweisungen können von einem durch einen Computer lesbaren Speichermedium auf jeweilige Datenverarbeitungs-/Verarbeitungseinheiten oder über ein Netzwerk wie zum Beispiel das Internet, ein lokales Netzwerk, ein Weitverkehrsnetz und/oder ein drahtloses Netzwerk auf einen externen Computer oder eine externe Speichereinheit heruntergeladen werden. Das Netzwerk kann Kupferübertragungskabel, Lichtwellenübertragungsleiter, drahtlose Übertragung, Leitwegrechner, Firewalls, Vermittlungseinheiten, Gateway-Computer und/oder Edge-Server aufweisen. Eine Netzwerkadapterkarte oder Netzwerkschnittstelle in jeder Datenverarbeitungs-/Verarbeitungseinheit empfängt durch einen Computer lesbare Programmanweisungen aus dem Netzwerk und leitet die durch einen Computer lesbaren Programmanweisungen zur Speicherung in einem durch einen Computer lesbaren Speichermedium innerhalb der entsprechenden Datenverarbeitungs-/Verarbeitungseinheit weiter.
  • Bei durch einen Computer lesbaren Programmanweisungen zum Ausführen von Arbeitsschritten der vorliegenden Erfindung kann es sich um Assembler-Anweisungen, ISA-Anweisungen (Instruction-Set-Architecture), Maschinenanweisungen, maschinenabhängige Anweisungen, Mikrocode, Firmware-Anweisungen, zustandssetzende Daten oder entweder Quellcode oder Objektcode handeln, die in einer beliebigen Kombination aus einer oder mehreren Programmiersprachen geschrieben werden, darunter objektorientierte Programmiersprachen wie Smalltalk, C++ o.ä. sowie herkömmliche prozedurale Programmiersprachen wie die Programmiersprache „C“ oder ähnliche Programmiersprachen. Die durch einen Computer lesbaren Programmanweisungen können vollständig auf dem Computer des Benutzers, teilweise auf dem Computer des Benutzers, als eigenständiges Software-Paket, teilweise auf dem Computer des Benutzers und teilweise auf einem fernen Computer oder vollständig auf dem fernen Computer oder Server ausgeführt werden. In letzterem Fall kann der entfernt angeordnete Computer mit dem Computer des Benutzers durch eine beliebige Art Netzwerk verbunden sein, darunter ein lokales Netzwerk (LAN) oder ein Weitverkehrsnetz (WAN), oder die Verbindung kann mit einem externen Computer hergestellt werden (zum Beispiel über das Internet unter Verwendung eines Internet-Dienstanbieters). In einigen Ausführungsformen können elektronische Schaltungen, darunter zum Beispiel programmierbare Logikschaltungen, vor Ort programmierbare Gatter-Anordnungen (FPGA, field programmable gate arrays) oder programmierbare Logikanordnungen (PLA, programmable logic arrays) die durch einen Computer lesbaren Programmanweisungen ausführen, indem sie Zustandsinformationen der durch einen Computer lesbaren Programmanweisungen nutzen, um die elektronischen Schaltungen zu personalisieren, um Aspekte der vorliegenden Erfindung durchzuführen.
  • Aspekte der vorliegenden Erfindung sind hierin unter Bezugnahme auf Ablaufpläne und/oder Blockschaltbilder bzw. Schaubilder von Verfahren, Vorrichtungen (Systemen) und Computerprogrammprodukten gemäß Ausführungsformen der Erfindung beschrieben. Es wird darauf hingewiesen, dass jeder Block der Ablaufpläne und/oder der Blockschaltbilder sowie Kombinationen von Blöcken in den Ablaufplänen und/oder den Blockschaltbildern mittels durch einen Computer lesbarer Programmanweisungen ausgeführt werden können.
  • Diese durch einen Computer lesbaren Programmanweisungen können einem Prozessor eines Universalcomputers, eines Spezialcomputers oder einer anderen programmierbaren Datenverarbeitungsvorrichtung bereitgestellt werden, um eine Maschine zu erzeugen, so dass die über den Prozessor des Computers bzw. der anderen programmierbaren Datenverarbeitungsvorrichtung ausgeführten Anweisungen ein Mittel zur Umsetzung der in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder festgelegten Funktionen/Schritte erzeugen. Diese durch einen Computer lesbaren Programmanweisungen können auch auf einem durch einen Computer lesbaren Speichermedium gespeichert sein, das einen Computer, eine programmierbare Datenverarbeitungsvorrichtung und/oder andere Einheiten so steuern kann, dass sie auf eine bestimmte Art funktionieren, so dass das durch einen Computer lesbare Speichermedium, auf dem Anweisungen gespeichert sind, ein Herstellungsprodukt aufweist, darunter Anweisungen, welche Aspekte der/des in dem Block bzw. den Blöcken des Ablaufplans und/oder der Blockschaltbilder angegebenen Funktion/Schritts umsetzen.
  • Die durch einen Computer lesbaren Programmanweisungen können auch auf einen Computer, eine andere programmierbare Datenverarbeitungsvorrichtung oder eine andere Einheit geladen werden, um das Ausführen einer Reihe von Prozessschritten auf dem Computer bzw. der anderen programmierbaren Vorrichtung oder anderen Einheit zu verursachen, um einen auf einem Computer ausgeführten Prozess zu erzeugen, so dass die auf dem Computer, einer anderen programmierbaren Vorrichtung oder einer anderen Einheit ausgeführten Anweisungen die in dem Block bzw. den Blöcken der Ablaufpläne und/oder der Blockschaltbilder bzw. Schaubilder festgelegten Funktionen/Schritte umsetzen.
  • Die Ablaufpläne und die Blockschaltbilder bzw. Schaubilder in den Figuren veranschaulichen die Architektur, die Funktionalität und den Betrieb möglicher Ausführungen von Systemen, Verfahren und Computerprogrammprodukten gemäß verschiedenen Ausführungsformen der vorliegenden Erfindung. In diesem Zusammenhang kann jeder Block in den Ablaufplänen oder Blockschaltbildern bzw. Schaubildern ein Modul, ein Segment oder einen Teil von Anweisungen darstellen, die eine oder mehrere ausführbare Anweisungen zur Ausführung der bestimmten logischen Funktion(en) aufweisen. In einigen alternativen Ausführungen können die in den Blöcken angegebenen Funktionen in einer anderen Reihenfolge als in den Figuren gezeigt stattfinden. Zwei nacheinander gezeigte Blöcke können zum Beispiel in Wirklichkeit im Wesentlichen gleichzeitig ausgeführt werden, oder die Blöcke können manchmal je nach entsprechender Funktionalität in umgekehrter Reihenfolge ausgeführt werden. Es ist ferner anzumerken, dass jeder Block der Blockschaltbilder und/oder der Ablaufpläne sowie Kombinationen aus Blöcken in den Blockschaltbildern und/oder den Ablaufplänen durch spezielle auf Hardware beruhende Systeme umgesetzt werden können, welche die festgelegten Funktionen oder Schritte durchführen, oder Kombinationen aus Spezial-Hardware und Computeranweisungen ausführen.
  • 4 veranschaulicht Einzelheiten einer geeigneten Implementierung der in 3 gezeigten Beschleuniger-Abbild-Erzeugungseinrichtung 327. Die Beschleuniger-Abbild-Erzeugungseinrichtung 327 verwendet als Eingabe den in 3 und 4 gezeigten Codeabschnitt 326. Eine Code-in-HDL-Erzeugungseinrichtung 410 wandelt bevorzugt den Codeabschnitt 326 in eine entsprechende Darstellung des Codeabschnitts in einer Hardware-Beschreibungssprache (HDL) um, die in 4 als HDL 420 für den Codeabschnitt gezeigt ist. Zu bekannten geeigneten Hardware-Beschreibungssprachen zählen VHDL oder Verilog, es könnte jedoch eine beliebige geeignete Hardware-Beschreibungssprache verwendet werden. Es gibt bekannte Software-Tools zum Erzeugen einer HDL-Repräsentation von Computercode. Bei Vivaldo High Level Synthesis von Xilinx handelt es sich beispielsweise um ein Software-Tool, das in der Programmiersprache C geschriebenen Code in HDL umwandelt. Tools dieser Art werden im Fachgebiet häufig als „C-zu-HDL“-Tool oder „C-zu-RTL“-Tool bezeichnet, wobei sich RTL auf die Darstellung eines Codeabschnitts auf der Registertransferebene (Register Transfer Level) bezieht, die benötigt wird, um den Codeabschnitt in Hardware zu implementieren. Bei der Code-zu-HDL-Erzeugungseinrichtung 410 in 4 könnte es sich um ein bekanntes Software-Tool oder um ein speziell für die Beschleuniger-Abbild-Erzeugungseinrichtung 327 konzipiertes Software-Tool handeln.
  • Die HDL 420 für den Codeabschnitt wird in einen oder mehrere Prozesse eingespeist, die sowohl Synthese als auch Simulation umfassen können. Der Syntheseprozess 430 ist im mittleren Abschnitt der 4 in den Schritten 432, 434, 436, 438 und 440 gezeigt. Der Simulationsprozess 450 ist im unteren Abschnitt der 4 in den Schritten 452, 454 und 460 gezeigt. Die HDL 420 für den Codeabschnitt kann in den Syntheseblock 432 eingespeist werden, der ermittelt, welche Hardware-Elemente benötigt werden. Der Platzier- und Leitwegblock 434 ermittelt, wo in der programmierbaren Einheit die Hardware-Elemente platziert werden sollen und wie Verbindungsleitwege zwischen diesen Hardware-Elementen bestimmt werden sollen. Eine Zeitanalyse 436 analysiert die Leistung des Beschleunigers, nachdem in Block 434 die Hardware-Elemente platziert und Verbindungsleitwege bestimmt wurden. Ein Testblock 438 führt Tests an dem resultierenden Beschleuniger-Abbild durch, um zu ermitteln, ob Zeit- und Leistungsparameter erfüllt werden. Wenn der Aufbau des Beschleunigers noch verbesserungsbedürftig ist, gibt der Testblock 438 eine Rückmeldung an einen Fehlerbehebungsblock 440. Dieser Prozess kann mehrmals iterieren.
  • Der Simulationsprozess 450 empfängt die HDL 420 für den Codeabschnitt und führt eine Computersimulation durch, um deren Funktionsfähigkeit zu ermitteln. Ein simulierter Testblock 454 ermittelt, ob der simulierte Aufbau wie erforderlich funktioniert. Wenn der Aufbau des Beschleunigers noch verbesserungsbedürftig ist, gibt der simulierte Testblock 454 eine Rückmeldung an einen Fehlerbehebungsblock 460.
  • Die Beschleuniger-Abbild-Erzeugungseinrichtung 327 kann entweder den Syntheseblock 430, den Simulationsblock 450 oder beide enthalten. In der am meisten bevorzugten Implementierung enthält die Beschleuniger-Abbild-Erzeugungseinrichtung 327 sowohl den Syntheseblock 430 als auch den Simulationsblock 450. Der Syntheseprozess kann sehr zeitaufwändig sein. Der Simulationsblock ist üblicherweise viel schneller beim Testen des Aufbaus der HDL als der Syntheseblock. Wenn sowohl Synthese 430 als auch Simulation 450 vorhanden sind, kann die Beschleuniger-Abbild-Erzeugungseinrichtung beide in beliebiger geeigneter Weise oder Kombination verwenden. Beispielsweise könnte der Simulationsblock 450 zunächst verwendet werden, um einige Iterationen des Aufbaus durchzuführen, und wenn der Aufbau weitgehend vollständig ist, könnte der weitgehend abgeschlossene Aufbau in den Syntheseblock 430 eingespeist werden. In einer anderen Implementierung könnten der Synthese- und der Simulationsblock parallel arbeiten und zusammenarbeiten, bis die Erzeugung des Beschleuniger-Abbilds vollständig ist. Ungeachtet des konkret verwendeten Prozesses erzeugt die Beschleuniger-Abbild-Erzeugungseinrichtung 327 für den Codeabschnitt 326 ein Beschleuniger-Abbild 480, das dem Codeabschnitt 326 entspricht. Sobald das Beschleuniger-Abbild 480 erzeugt wurde, kann die Beschleuniger-Implementierungseinrichtung 328 aus 3 das Beschleuniger-Abbild 480 in die programmierbare Einheit 312 laden, um einen dem Codeabschnitt 326 entsprechenden Beschleuniger 314 zu produzieren. Der Beschleuniger 314 in der programmierbaren Einheit 312 kann dann anstelle des Codeabschnitts 326 vom Computerprogramm aufgerufen werden.
  • Einige Einzelheiten einer möglichen Implementierung für die Codeanalyseeinrichtung 325 aus 3 sind in 5 gezeigt. Die Codeanalyseeinrichtung 325 kann einen Code-Profiler 510 enthalten, der verwendet wird, um ein Profil des Computerprogramms zu erstellen. Die Profilerstellung erfolgt dadurch, dass der Code-Profiler 510 bevorzugt Code mit Messfunktionen in das Computerprogramm einfügt, um zur Laufzeit des Computerprogramms Profildaten 520 zu erzeugen. Die Profildaten 520 zeigen viele mögliche Merkmale des Computerprogramms an, darunter die Häufigkeit der Ausführung verschiedener Abschnitte, die Anzahl an Schleifeniterationen, erzeugte Ausnahmen, Datenbedarf, Bandbreite, in einem kritischen Abschnitt verbrachte Zeit usw. Software-Profiler sind im Fachgebiet allgemein bekannt und werden daher hier nicht eingehender behandelt. Für die vorliegenden Zwecke reicht die Information, dass der Code-Profiler 510 Profildaten 520 erzeugt, welche die Laufzeitleistung des der Profilerstellung unterzogenen Computerprogramms anzeigen.
  • Die Codeanalyseeinrichtung 325 beinhaltet zudem ein Codeauswahl-Tool 530, das einen Codeabschnitt 326 identifiziert, der durch Implementierung in einem Hardware-Beschleuniger verbessert wird. Jeder geeigneter Abschnitt könnte gemäß jedem geeigneten Kriterium, jedem geeigneten Algorithmus oder jeder geeigneten Heuristik identifiziert werden. Beispielsweise könnte ein Abschnitt des Codes identifiziert werden, der Fließkommaberechnungen durchführt, so dass ein entsprechender Fließkomma-Beschleuniger erzeugt werden könnte, um die Fließkommaberechnungen im Code durchzuführen. Es könnte auch ein Abschnitt des Codes identifiziert werden, der eine Datenbanksuche durchführt, so dass ein entsprechender Beschleuniger für die Datenbanksuche erzeugt werden könnte, um die Datenbanksuche zu ersetzen. Es könnte auch ein Abschnitt des Codes identifiziert werden, der eine spezielle Funktion wie beispielsweise Datenkomprimierung, XML-Parsing, Paketuntersuchung, finanzielle Risikoberechnungen usw. ausführt. Natürlich könnten im Rahmen der vorliegenden Offenbarung und der Ansprüche auch andere Codeabschnitte identifiziert werden. Das Codeauswahl-Tool 530 kann jedes geeignete Kriterium, jeden geeigneten Algorithmus oder jede geeignete Heuristik verwenden, die aktuell bekannt sind oder künftig entwickelt werden, um den Codeabschnitt 326 zu identifizieren. Sobald der Codeabschnitt 326 im Computerprogramm identifiziert wurde, kann ein entsprechender Beschleuniger dynamisch erzeugt werden.
  • Unter Bezugnahme auf 6 beginnt ein Verfahren 600 gemäß der vorliegenden Offenbarung und den Ansprüchen durch Ausführen des Computerprogramms (Schritt 610). Die Laufzeitleistung des Computerprogramms wird analysiert (Schritt 620). Dies kann beispielsweise durch die in 3 und 5 gezeigte und vorstehend erläuterte Codeanalyseeinrichtung 325 erfolgen. Ein Codeabschnitt im Computerprogramm wird identifiziert, um diesen in einem Beschleuniger zu implementieren (Schritt 630). Es wird ein Beschleuniger-Abbild für den Codeabschnitt erzeugt (Schritt 640). Das Beschleuniger-Abbild wird einer programmierbaren Einheit bereitgestellt (Schritt 650). Das Computerprogramm wird dann geändert, um den Codeabschnitt durch einen Aufruf des bereitgestellten Beschleunigers zu ersetzen (Schritt 660). An diesem Punkt führt dann der bereitgestellte Beschleuniger in Hardware die Funktionen aus, die zuvor durch den Codeabschnitt ausgeführt wurden, wodurch die Laufzeitleistung des Computerprogramms verbessert wird. Es ist zu beachten, dass das Verfahren 600 wieder zum Schritt 610 zurückspringt und fortfährt, was bedeutet, dass das Verfahren 600 Iterationen durchführen kann, um das Computerprogramm kontinuierlich zu überwachen und nach Bedarf Beschleuniger bereitzustellen, um die Leistung des Computerprogramms zu verbessern.
  • Es werden nun einige Beispiele angegeben, um die vorstehend erläuterten Konzepte zu veranschaulichen. 7 zeigt ein beispielhaftes Computerprogramm 700, das mehrere Codeabschnitte enthält, die in 7 als Codeabschnitt A 710, Codeabschnitt B 720, Codeabschnitt C 730, ..., Codeabschnitt N 790 gezeigt sind. Es wird zugrunde gelegt, dass der Codeabschnitt B 720 als ein Codeabschnitt identifiziert wird, der durch Implementierung in einem Hardware-Beschleuniger verbessert wird. Der Codeabschnitt B 720 wird dann in eine entsprechende HDL-Darstellung 810 umgewandelt, wie in 8 gezeigt wird. Die HDL 810 für den Codeabschnitt B wird dann verwendet, um ein Beschleuniger-Abbild 820 für den Codeabschnitt B zu erzeugen. Dies könnte beispielsweise mittels des in 4 gezeigten Verfahrens oder mittels eines beliebigen anderen geeigneten Verfahrens erfolgen. Sobald das Beschleuniger-Abbild 820 für den Codeabschnitt B erzeugt wurde, wird das Beschleuniger-Abbild in eine programmierbare Einheit 830 geladen, um den Beschleuniger 850 für den Codeabschnitt B zu erzeugen. Bei der programmierbaren Einheit 830 handelt es sich um eine geeignete Implementierung für die in 3 gezeigte programmierbare Einheit 312, und diese enthält bevorzugt eine OpenCAPI-Schnittstelle 840.
  • Sobald der Beschleuniger in der programmierbaren Einheit 830 bereitgestellt wird, wird der Codeabschnitt B im Computerprogramm gelöscht und durch einen in 9 gezeigten Aufruf 910 des Beschleunigers für den Codeabschnitt B ersetzt. In der am meisten bevorzugten Implementierung enthält der Beschleuniger für den Codeabschnitt B einen Rücksprung zu dem Code, der diesen aufgerufen hat, sobald die Verarbeitung im Beschleuniger für den Codeabschnitt B abgeschlossen ist. Auf diese Weise ruft das Computerprogramm 900, wenn es das ausführen soll, was zuvor der Codeabschnitt B war, den Beschleuniger für den Codeabschnitt B auf, der dann die benötigten Funktionen in Hardware ausführt und anschließend zum Computerprogramm zurückspringt. Auf diese Weise kann ein geeigneter Beschleuniger für einen identifizierten Codeabschnitt automatisch erzeugt werden, um die Laufzeitleistung des Computerprogramms zu erhöhen.
  • In einer ersten Implementierung kann ein Beschleuniger dynamisch erzeugt werden, um die Leistung eines Computerprogramms zu verbessern, wie in 4 bis 9 gezeigt und vorstehend beschrieben wird. In einer zweiten Implementierung kann ein Beschleuniger in einem Katalog gespeichert werden, sobald er dynamisch erzeugt wurde, so dass er bei Bedarf erneut verwendet werden kann. 10 zeigt einen beispielhaften Beschleuniger-Katalog 1000, bei dem es sich um eine mögliche Implementierung für den in 3 gezeigten Beschleuniger-Katalog 329 handelt. Ein Beschleuniger-Katalog kann alle geeigneten Daten oder Informationen enthalten, die für einen Beschleuniger oder den entsprechenden Codeabschnitt nötig sein können. In dem in 10 gezeigten konkreten Beispiel enthält der Beschleuniger-Katalog jedes der folgenden Felder: „Name“, „Speicherort“, „Am Längsten Nicht Verwendet“ (LRU, Least Recently Used), „Zuletzt Verwendet“ (MRU, Most Recently Used), „Abhängigkeiten“, „Funktionalitäten“, „Latenz“ und „Andere Eigenschaften“. Das Feld „Name“ enthält bevorzugt einen Namen für den Beschleuniger. Das Namensfeld kann auch einen Namen für einen dem Beschleuniger entsprechenden Codeabschnitt enthalten. Das „Speicherort“-Feld gibt bevorzugt einen Pfad an, der den Speicherort für das Beschleuniger-Abbild identifiziert. Zwar könnte das Beschleuniger-Abbild auch im Katalog 1000 gespeichert sein, jedoch enthält in der am meisten bevorzugten Implementierung der Katalog 1000 stattdessen einen Pfad zu einem außerhalb des BeschleunigerKatalogs 1000 befindlichen Speicher, in dem das Beschleuniger-Abbild gespeichert ist. Das Feld „Am Längsten Nicht Verwendet (LRU)“ könnte den Zeitpunkt enthalten, zu dem der Beschleuniger erstmals verwendet wurde. Alternativ könnte das LRU-Feld ein Flag enthalten, das gesetzt wird, wenn es sich bei dem Beschleuniger unter allen Beschleunigern im Katalog um den am längsten nicht verwendeten Beschleuniger handelt. Das Feld „Zuletzt Verwendet (MRU)“ könnte den Zeitpunkt enthalten, zu dem der Beschleuniger zuletzt verwendet wurde. Alternativ könnte das MRU-Feld ein Flag enthalten, das gesetzt wird, wenn es sich bei dem Beschleuniger unter allen Beschleunigern im Katalog um den zuletzt verwendeten Beschleuniger handelt. Das Feld „Fehlerrate“ gibt eine geeignete Fehlerrate für den Beschleuniger an und kann in jeder geeigneten Weise ausgedrückt werden. Im Beispiel in 10 wird die Fehlerrate als eine Anzahl X an Fehlern pro 100 Läufe des Beschleunigers ausgedrückt. Das Feld „Fehlerrate“ könnte beliebige geeignete Fehlerinformationen enthalten, die beispielsweise dynamisch überwacht werden könnten, so dass ein Anstieg der Fehlerrate zu einer Benachrichtigung zur Einleitung von Korrekturmaßnahmen führen könnte. Das Feld „Abhängigkeiten“ kann Abhängigkeiten des Beschleunigers anzeigen. Beispielsweise könnte das Feld „Abhängigkeiten“ die konkrete programmierbare Einheit angeben, für die der Beschleuniger konzipiert wurde. Das Feld „Abhängigkeiten“ könnte zudem Abhängigkeiten gegenüber anderen Beschleunigern angeben. Der Beschleuniger Beschll in 10 besitzt somit eine Abhängigkeit gegenüber Beschl2, was bedeutet, dass Beschll erfordert, dass auch Beschl2 implementiert wird. Das Feld „Funktionalitäten“ kann eine beliebige geeignete Anzeige der Funktionalitäten des Beschleunigers liefern. In den beiden in 10 gezeigten Einträgen sind die Funktionalitäten für Beschll als FP-Einheit und für BeschIN als Grafik angegeben. Es ist jedoch zu beachten, dass die Funktionalitäten in jeder geeigneten Weise angezeigt werden können. Beispielsweise könnten die Funktionalitäten eine Angabe des Codeabschnitts enthalten, für den der Beschleuniger implementiert wurde. Es könnte ein separater Index geführt werden, der jeden Codeabschnitt mit seinem entsprechenden Beschleuniger korreliert, zusammen mit einem Deskriptor oder anderen Daten, die Attribute des Codeabschnitts beschreiben. Das Feld „Funktionalitäten“ könnte beliebige geeignete Informationen enthalten, beispielsweise einen Zeiger auf den Index, so dass der dem Beschleuniger entsprechende Codeabschnitt leicht identifiziert werden könnte.
  • Das Feld „Latenz“ gibt bevorzugt eine mittlere Latenz für den Beschleuniger an. In dem in 10 gezeigten Beispiel besitzt Beschl1 eine Latenz von 1,0 Mikrosekunden, während der Beschleuniger BeschIN eine Latenz von 500 Nanosekunden besitzt. Die Latenz könnte beispielsweise die Zeit repräsentieren, die der Beschleuniger zum Ausführen seiner vorgesehenen Funktion benötigt. Das Feld „Andere Eigenschaften“ kann beliebige andere geeignete Informationen oder Daten enthalten, die den Beschleuniger, dessen Eigenschaften und Attribute sowie den dem Beschleuniger entsprechenden Codeabschnitt beschreiben oder in sonstiger Weise identifizieren. In den beiden beispielhaften Einträgen in 10 zeigt das Feld „Andere Eigenschaften“ an, dass Beschll eine Netzwerkverbindung enthält und BeschIN eine Affinität gegenüber Beschl5 besitzt, was bedeutet, dass BeschlN in der programmierbaren Einheit nach Möglichkeit nahe bei Beschl5 platziert werden sollte. Die verschiedenen Felder in 10 sind beispielhaft angegeben, und im Umfang der vorliegenden Offenbarung und der Ansprüche kann ein Katalog mit beliebigen geeigneten Informationen oder Daten bereitgestellt werden.
  • Unter Bezugnahme auf 11 beginnt ein Verfahren 1100 gemäß der zweiten Implementierung durch Ausführen des Computerprogramms (Schritt 1110). Die Laufzeitleistung des Computerprogramms wird analysiert (Schritt 1120). Es werden ein oder mehrere Abschnitte im Computerprogramm identifiziert, die durch Verwendung eines Hardware-Beschleunigers verbessert werden (Schritt 1130). Einer der identifizierten Codeabschnitte wird ausgewählt (Schritt 1140). Wenn es für den ausgewählten Codeabschnitt im Beschleuniger-Katalog einen zuvor erzeugten Beschleuniger gibt (Schritt 1150=JA), wird das zuvor erzeugte Beschleuniger-Abbild der programmierbaren Einheit bereitgestellt (Schritt 1160), um den Beschleuniger bereitzustellen. Das Computerprogramm wird dann geändert, um den ausgewählten Codeabschnitt durch einen Aufruf des Beschleunigers zu ersetzen (Schritt 1162). Wenn es für den ausgewählten Codeabschnitt im Katalog keinen zuvor erzeugten Beschleuniger gibt (Schritt 1150=NEIN), wird ein Beschleuniger-Abbild für den ausgewählten Codeabschnitt dynamisch erzeugt (Schritt 1170), das Beschleuniger-Abbild einer programmierbaren Einheit bereitgestellt (Schritt 1172), das Computerprogramm geändert, um den Codeabschnitt durch einen Aufruf des neu bereitgestellten Beschleunigers zu ersetzen (Schritt 1174) und der Beschleuniger im Beschleuniger-Katalog gespeichert (Schritt 1176). Wenn das Beschleuniger-Abbild im Katalogeintrag gespeichert wird, schreibt der Schritt 1176 das Beschleuniger-Abbild in den Katalog. Wenn das Beschleuniger-Abbild in einem außerhalb des Katalogs befindlichen Speicher gespeichert wird, speichert der Schritt 1176 das Beschleuniger-Abbild im externen Speicher und schreibt in den Beschleuniger-Katalog einen Eintrag, der einen Pfad zu dem Beschleuniger-Abbild im externen Speicher enthält.
  • Wenn es noch mehr identifizierte Codeabschnitte gibt (Schritt 1180=JA), kehrt das Verfahren zu Schritt 1140 zurück und fährt fort. Wenn es keine weiteren identifizierten Codeabschnitte gibt (Schritt 1180=NEIN), kehrt das Verfahren zu Schritt 1120 zurück und fährt fort. Dies bedeutet, dass das Verfahren besonders bevorzugt das Computerprogramm kontinuierlich überwacht und Beschleuniger nach Bedarf dynamisch erzeugt und/oder bereitstellt, um die Laufzeitleistung des Computerprogramms zu verbessern.
  • Es wird nun ein Beispiel angegeben, um die die zweite bevorzugte Implementierung betreffenden Konzepte aus 11 zu veranschaulichen. 12 zeigt ein beispielhaftes Computerprogramm 1200, das viele Codeabschnitte enthält, die in 12 als Codeabschnitt P 1210, Codeabschnitt Q 1220, Codeabschnitt R 1230, ..., Codeabschnitt Z 1290 dargestellt sind. Es wird zugrunde gelegt, dass die Schritte 1110, 1120 und 1130 aus 11 durchgeführt werden. In Schritt 1130 wird zugrunde gelegt, dass der Codeabschnitt Q 1220 und der Codeabschnitt R 1230 als Codeabschnitte identifiziert werden, die durch Implementieren dieser Codeabschnitte in einem Beschleuniger verbessert werden, wie in Tabelle 1300 in 13 gezeigt wird. Ferner wird zugrunde gelegt, dass ein Beschleuniger-Katalog 1400 vorliegt, bei dem es sich um eine geeignete Implementierung des in 3 gezeigten Beschleuniger-Katalogs 329 handelt. Für BeschlQ, für den zugrunde gelegt wird, dass es sich bei diesem um einen zuvor für den Codeabschnitt Q 1220 erzeugten Beschleuniger handelt, weist der Beschleuniger-Katalog 1400 einen einzigen Eintrag auf. Da der Beschleuniger für den Codeabschnitt Q zuvor erzeugt wurde, kann das entsprechende Beschleuniger-Abbild verwendet werden, ohne dass das Beschleuniger-Abbild neu erzeugt werden muss. Es wird zugrunde gelegt, dass in Schritt 1140 der Codeabschnitt Q 1220 ausgewählt wird. Für den Codeabschnitt Q gibt es im Katalog einen zuvor erzeugten Beschleuniger (Schritt 1150=JA), daher wird das dem Codeabschnitt Q entsprechende, zuvor erzeugte Beschleuniger-Abbild 1510 der programmierbaren Einheit bereitgestellt (Schritt 1160), wie in 15 gezeigt wird. Das Bereitstellen des im Katalog für den Codeabschnitt Q identifizierten Beschleuniger-Abbilds 1510 an die programmierbare Einheit 1520 resultiert im Implementieren des Beschleunigers 1540 für den Codeabschnitt Q in der programmierbaren Einheit 1520. Der Beschleuniger 1540 für den Codeabschnitt Q kann dann durch das Computerprogramm aufgerufen werden, um die Funktionen des vorherigen Codeabschnitts Q in Hardware auszuführen, wodurch die Laufzeitleistung des Computerprogramms erhöht wird. Bei der programmierbaren Einheit 1520 handelt es sich um ein geeignetes Beispiel für die in 3 gezeigte programmierbare Einheit 312, und diese enthält bevorzugt eine OpenCAPI-Schnittstelle 1530.
  • Das Computerprogramm wird dann geändert, um den ausgewählten Codeabschnitt Q 1220 durch einen Aufruf des Beschleunigers für den Codeabschnitt Q zu ersetzen (Schritt 1162). 16 zeigt das Computerprogramm 1200 aus 12, nachdem der Codeabschnitt Q durch den Aufruf des Beschleunigers für den Codeabschnitt Q ersetzt wurde, wie in 1610 in 16 gezeigt wird. Anstatt den Codeabschnitt Q auszuführen, ruft das Computerprogramm 1600 in der programmierbaren Einheit 1520 somit den Beschleuniger 1540 für den Codeabschnitt Q auf, um die Laufzeitleistung des Computerprogramms zu erhöhen.
  • Es gibt noch einen weiteren identifizierten Codeabschnitt (Schritt 1180=JA), nämlich den in 13 gezeigten Codeabschnitt R, daher kehrt das Verfahren 1100 in 11 zurück zu Schritt 1140, in dem der Codeabschnitt R 1230 ausgewählt wird (Schritt 1140). Für den Codeabschnitt R gibt es im in 14 gezeigten Katalog 1400 keinen zuvor erzeugten Beschleuniger (Schritt 1150=NEIN), daher wird für den Codeabschnitt R dynamisch ein Beschleuniger-Abbild erzeugt (Schritt 1170). Dies ist in 17 dargestellt, in welcher der Codeabschnitt R 1230 verwendet wird, um eine HDL 1710 für den Codeabschnitt R zu erzeugen, die verwendet wird, um das Beschleuniger-Abbild 1720 für den Codeabschnitt R zu erzeugen. Das dynamisch neu erzeugte Beschleuniger-Abbild 1720 für den Codeabschnitt R wird anschließend der programmierbaren Einheit bereitgestellt (Schritt 1172). Dies ist in 18 gezeigt, in der in die programmierbare Einheit 1520, die bereits den Beschleuniger 1540 für den Codeabschnitt Q enthält, das Beschleuniger-Abbild 1720 für den Codeabschnitt R geladen wird, um den Beschleuniger 1810 für den Codeabschnitt R zu erzeugen. Das Computerprogramm wird dann geändert, um den Codeabschnitt R durch den Aufruf des Beschleunigers für den Codeabschnitt R zu ersetzen (Schritt 1174). Der Beschleuniger für den Codeabschnitt R wird ebenfalls im Beschleuniger-Katalog gespeichert (Schritt 1176), was zur Folge hat, dass der Beschleuniger-Katalog 1400 die zwei Beschleunigern entsprechenden Einträge BeschlQ und BeschIR besitzt, wie in 20 gezeigt wird.
  • Ein konkreteres Beispiel ist in 21 und 22 gezeigt. In diesem Beispiel wird zugrunde gelegt, dass ein als Beispiel1 2100 bezeichnetes Computerprogramm drei verschiedene interessierende Codeabschnitte enthält, nämlich einen Schleifenabschnitt 2110, einen Verzweigungsbaumabschnitt 2120 und einen langen seriellen Abschnitt 2130. Der Schleifenabschnitt 2110 repräsentiert einen Codeabschnitt, bei dem es sich um eine Schleife handelt, die ausgerollt werden kann, da jede Iteration weitgehend unabhängig von anderen Iterationen ist. Aufgrund der Unabhängigkeit jeder Iteration kann die Schleife ausgerollt werden, und die Schleifenfunktion kann einem Beschleuniger bereitgestellt werden, damit jede Iteration parallel in Hardware erfolgt. Finanzielle Risikoberechnungen enthalten manchmal Codeabschnitte wie den Schleifenabschnitt 2110. Paralleles Ausführen verschiedener Iterationen der Schleife in einem Hardware-Beschleuniger erhöht die Laufzeitleistung des Beispiel1-Computerprogramms.
  • Das Computerprogramm Beispiel1 2100 enthält zudem einen Verzweigungsbaumabschnitt 2120. In diesem Beispiel wird zugrunde gelegt, dass der Verzweigungsbaumabschnitt 2120 an einem oder mehreren relativ tief verzweigten Bäumen arbeitet. In diesem Fall kann der Verzweigungsbaumabschnitt 2120 einem Beschleuniger bereitgestellt werden, damit jeder Zweig des Verzweigungsbaums in Hardware parallel ausgeführt wird, die Zweigauswahlkriterien berechnet werden und in der letzten Stufe der Logik das Ergebnis aus dem ausgewählten Zweig ausgewählt wird. Paralleles Ausführen verschiedener Zweige des Verzweigungsbaums in einem Hardware-Beschleuniger erhöht die Laufzeitleistung des Beispiel1-Computerprogramms.
  • Das Computerprogramm Beispiel1 2100 enthält zudem einen langen seriellen Abschnitt 2130. In diesem Beispiel wird zugrunde gelegt, dass der lange serielle Abschnitt 2130 durch vorteilhafte Nutzung einzigartiger Hardware-Funktionalitäten in einem Beschleuniger verkürzt werden kann. Bei einigen mathematischen Funktionen könnte es sich beispielsweise um lange serielle Abschnitte handeln, die in einem Beschleuniger implementiert werden könnten. Ausführen eines langen seriellen Abschnitts in Hardware erhöht die Laufzeitleistung des Beispiel1-Computerprogramms.
  • Es wird zugrunde gelegt, dass die Codeabschnitte in 21 gemäß durch den Code-Profiler 510 in 5 erzeugten Profildaten 520 identifiziert werden. Bei den Kriterien, die vom Codeauswahl-Tool 530 verwendet werden, um die Codeabschnitte 2110, 2120 und 2130, bei denen es sich um Beispiele des Codeabschnitts 326 aus 3 und 5 handelt, auszuwählen, kann es sich um beliebige geeignete Kriterien handeln. Die drei beispielhaften Codeabschnitte 2110, 2120 und 2130 aus 21 wie vorstehend beschrieben zeigen geeignete Kriterien auf, die vom Codeauswahl-Tool 530 verwendet werden könnten, um die Codeabschnitte 2110, 2120 und 2130 zur Implementierung in einem oder mehreren Beschleunigern auszuwählen. Die vorliegenden Ansprüche und die Offenbarung umfassen ausdrücklich alle geeigneten Kriterien für das Codeauswahl-Tool 530, um einen oder mehrere Codeabschnitte 326 zur Implementierung in einem oder mehreren Beschleunigern auszuwählen.
  • 22 zeigt eine programmierbare Einheit 2220, die eine OpenCAPI-Schnittstelle 2230 besitzt und einen Beschleuniger2240 für den Schleifenabschnitt, einen Beschleuniger 2250 für den Verzweigungsbaumabschnitt und einen Beschleuniger 2260 für den langen seriellen Abschnitt enthält. Zwar ist in 22 gezeigt, dass diese drei Beschleuniger in der gleichen programmierbaren Einheit 2220 implementiert sind, jedoch versteht ein Fachmann, dass diese ebenso in separaten programmierbaren Einheiten implementiert sein könnten.
  • 23 zeigt das Computerprogramm Beispiel1 2100, nachdem die in 21 gezeigten Codeabschnitte durch Aufrufe der in 22 gezeigten Hardware-Beschleuniger ersetzt wurden. Somit wurde der Schleifenabschnitt 2110 aus 21 durch einen Aufruf des Beschleunigers 2310 für den Schleifenabschnitt, der Verzweigungsbaumabschnitt 2120 aus 21 durch einen Aufruf des Beschleunigers 2320 für den Verzweigungsbaumabschnitt und der lange serielle Abschnitt 2130 aus 21 durch einen Aufruf des Beschleunigers 2330 für den langen seriellen Abschnitt ersetzt. Da das Beispiel1-Computerprogramm 2100 in 23 nun Aufrufe von Hardware-Beschleunigern enthält, wird die Laufzeitleistung des Computerprogramms 2100 erhöht.
  • 24 zeigt ein Computerprogramm 2400 gemäß Stand der Technik, das Aufrufe von Funktionen in einer Software-Bibliothek 2410 enthält. Software-Bibliotheken sind im Fachgebiet allgemein bekannt und stellen allgemeine Funktionen bereit, die Programmierer verwenden können, anstatt diese allgemeinen Funktionen programmieren zu müssen. Beispielsweise könnten in einer Software-Bibliothek Funktionen enthalten sein, die Komprimierung, Grafikoperationen und XML-Parsing durchführen. Das Computerprogramm 2400 enthält den Codeabschnitt D 2420, den Codeabschnitt E 2422, den Codeabschnitt F 2424, möglicherweise weitere nicht gezeigte Codeabschnitte, bis hin zum Codeabschnitt L 2428. Die Software-Bibliothek 2410 enthält Funktionen L1 2430, L2 2432, L3 2434, L4 2436, möglicherweise weitere Funktionen, bis hin zu LN 2450. Der Codeabschnitt D 2420 im Computerprogramm 2400 enthält einen Aufruf der Funktion L1 2430 in der Software-Bibliothek 2410. Der Codeabschnitt F 2424 enthält einen Aufruf der Funktion L4 2436 in der Software-Bibliothek 2410. Der Codeabschnitt L 2428 enthält einen Aufruf der Funktion L2 2432 in der Software-Bibliothek 2410.
  • Unter Bezugnahme auf 25 wird ein Verfahren 2500 bevorzugt durch das Beschleuniger-Bereitstellungstool 324 aus 3 durchgeführt. Es werden Aufrufe der Software-Bibliothek im Computerprogramm ermittelt (2510). Es wird eine virtuelle Funktionstabelle aufgebaut, welche die Aufrufe der Software-Bibliothek enthält (Schritt 2520). Die verfügbaren Beschleuniger, die aktuell in einer oder mehreren programmierbaren Einheiten implementiert sind, werden ermittelt (Schritt 2530). Aufrufe in der Software-Bibliothek, die einem aktuell implementierten Beschleuniger entsprechen, werden ermittelt (Schritt 2540). Ein oder mehrere Funktionsaufrufe an die Software-Bibliothek in der virtuellen Funktionstabelle werden dann durch einen oder mehrere entsprechende Aufrufe eines entsprechenden aktuell implementierten Beschleunigers ersetzt (Schritt 2550). Es ist zu beachten, dass das Verfahren 2500 dann zu Schritt 2510 zurückkehrt, was anzeigt, dass dieses Verfahren mit dem Bereitstellen oder Entfernen von Beschleunigern seine Funktionen kontinuierlich ausführen kann.
  • Eine konkrete Implementierung einer virtuellen Funktionstabelle ist in 2600 in 26 gezeigt. Die virtuelle Funktionstabelle 2600 listet Aufrufe aus dem Computerprogramm auf, die zuvor direkt an die Software-Bibliothek gerichtet wurden, und erstellt eine Umleitungsebene, so dass diese Aufrufe nach Möglichkeit stattdessen an einen Beschleuniger gerichtet werden können. Die Aufrufe in dem Computerprogramm 2400 aus 24 wurden durch Aufrufe der Funktionen in der virtuellen Funktionstabelle 2600 ersetzt, wie in dem Computerprogramm 2700 in 27 gezeigt wird. Der Aufruf von L1 wird somit durch einen Aufruf von F1, der Aufruf von L4 durch einen Aufruf von F4 und der Aufruf von L2 durch einen Aufruf von F2 ersetzt. Die virtuelle Funktionstabelle 2600 zeigt für jeden Aufruf aus dem Computerprogramm an, welche Funktionen aufgerufen werden sollen. Wenn die virtuelle Funktionstabelle anfangs aufgebaut wird, wird jeder Aufruf aus dem Computerprogramm dem entsprechenden Aufruf der Software-Bibliothek zugeordnet. Das modifizierte Computerprogramm 2700 und die virtuelle Funktionstabelle 2600 stellen somit ähnliche Funktionalität wie in 24 gezeigt bereit, allerdings mit einer Umleitungsebene. Der Codeabschnitt D 2720 ruft somit die Funktion F1 in der virtuellen Funktionstabelle 2600 auf, die einen Aufruf von L1 in der Software-Bibliothek erzeugt. Der Codeabschnitt F 2724 ruft die Funktion F4 in der virtuellen Funktionstabelle 2600 auf, die einen Aufruf von L4 in der Software-Bibliothek erzeugt. Der Codeabschnitt L 2728 ruft die Funktion F2 in der virtuellen Funktionstabelle auf, die einen Aufruf von L2 in der Software-Bibliothek erzeugt. Aus diesem einfachen Beispiel wird ersichtlich, dass bei ihrem anfänglichen Aufbau die virtuelle Funktionstabelle eine ähnliche Funktion wie in 24 gezeigt bereitstellt, nämlich dass jeder Aufruf der virtuellen Funktionstabelle einen entsprechenden Aufruf der Software-Bibliothek zur Folge hat.
  • 28 zeigt eine Beschleuniger-Korrelationstabelle 2800. In diesem Beispiel wird zugrunde gelegt, dass drei Beschleuniger bereitgestellt wurden, nämlich Beschl1, Beschl2 und Beschl3. Es wird zugrunde gelegt, dass diese Beschleuniger drei Funktionen in der Software-Bibliothek entsprechen. Beschl1 entspricht also der Bibliotheksfunktion L4, Beschl2 der Bibliotheksfunktion L1 und Beschl3 der Bibliotheksfunktion L2, wie in 28 angezeigt wird. Die Korrelation zwischen den Beschleunigern und den Bibliotheksfunktionen kann in jeder geeigneten Weise ermittelt werden, etwa indem ein Nutzer manuell Einträge in der Beschleuniger-Korrelationstabelle generiert oder das Beschleuniger-Bereitstellungstool die Korrelation zwischen Beschleunigern und Bibliotheksfunktionen automatisch ermittelt. Bei Beschleunigern, die von einem Nutzer manuell erzeugt werden, könnte der Nutzer denselben Bibliotheksnamen und dieselben Funktionsnamen verwenden, so dass ein Code-Linker den Beschleuniger automatisch erkennen und den Aufruf an den Beschleuniger anstatt an die Software-Bibliothek erstellen kann. Entsprechend könnten automatisch erzeugte Beschleuniger denselben Bibliotheksnamen und dieselben Funktionsnamen verwenden, so dass ein Code-Linker in ähnlicher Weise den Beschleuniger automatisch erkennen und den Aufruf an den Beschleuniger anstatt an die Software-Bibliothek erstellen kann. In einer anderen Implementierung könnte der Beschleuniger Daten enthalten, die seine Funktionen charakterisieren, so dass der Beschleuniger abgefragt werden kann, um die von ihm unterstützten Funktionen zu ermitteln, wobei diese Informationen verwendet werden könnten, um Aufrufe der Softwarebibliothek stattdessen durch Aufrufe des Beschleunigers zu ersetzen.
  • 29 zeigt eine programmierbare Einheit 2900, die eine OpenCAPI-Schnittstelle 2230 und die drei in 28 angegebenen Beschleuniger Beschl1, Beschl2 und Beschl3 enthält. Bei diesen drei Beschleunigern 2910, 2920 und 2930 handelt es sich um aktuell implementierte Beschleuniger, da diese bereits in der programmierbaren Einheit 2900 existieren. 29 zeigt zudem verfügbare Ressourcen 2950 in der programmierbaren Einheit 2900, die noch nicht verwendet wurden.
  • Nun wird das Verfahren 2500 aus 25 in Hinblick auf das konkrete Beispiel aus 26 bis 29 betrachtet. Die Schritte 2510 und 2520 bauen die virtuelle Funktionstabelle 2600 aus 26 auf. Schritt 2530 stellt fest, dass Beschl1 2910, Beschl2 2920 und Beschl3 2930 aktuell in einer programmierbaren Einheit 2900 implementiert sind und zur Verwendung verfügbar sind. Schritt 2540 liest die Beschleuniger-Korrelationstabelle 2800, um zu festzustellen, dass Beschl1 der Bibliotheksfunktion L4, Beschl2 der Bibliotheksfunktion L1 und Beschl3 der Bibliotheksfunktion L2 entspricht. Wie vorstehend erläutert, könnte es sich bei diesen Bibliotheksfunktionen um Funktionen handeln, die Komprimierung, Grafikoperationen, XML-Parsing oder beliebige andere geeignete Bibliotheksfunktionen ausführen. Schritt 2550 ersetzt anschließend Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle durch Aufrufe der aktuell implementierten Beschleuniger, wie in der virtuellen Funktionstabelle 2600 in 30 gezeigt wird. Die virtuelle Funktionstabelle stellt somit eine Umleitungsebene bereit, die dynamisches Ersetzen eines Aufrufs der Software-Bibliothek durch einen Aufruf eines Beschleunigers ermöglicht, ohne dass das Computersystem merkt, dass die Software-Bibliotheksfunktion in einem Beschleuniger implementiert wurde. Das Ergebnis ist eine verbesserte Laufzeitleistung des Computerprogramms in einer für das Computerprogramm transparenten Weise.
  • In einer alternativen Ausführungsform können nicht nur aktuell implementierte Beschleuniger verwendet werden, um Aufrufe von Software-Bibliotheksfunktionen zu ersetzen, sondern es kann auch ein neuer Beschleuniger dynamisch erzeugt werden, um einen Aufruf einer Software-Bibliotheksfunktion zu ersetzen. Unter Bezugnahme auf 31 kehrt, wenn ein Aufruf der Software-Bibliothek nicht in einem neuen Beschleuniger implementiert werden kann (Schritt 3110=NEIN), das Verfahren 3100 zu Schritt 3110 zurück und fährt fort, bis ein Aufruf der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte (Schritt 3110=JA). Ein Faktor, der bei der Entscheidung darüber, ob ein Aufruf der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, eine Rolle spielt, sind die in einer oder mehreren programmierbaren Einrichtungen verfügbaren Ressourcen. Falls beispielsweise die verfügbaren Ressourcen 2950 aus 29 genügend Ressourcen zum Implementieren eines Aufrufs der Software-Bibliothek in einem neuen Beschleuniger bereitstellen, der auf die verfügbaren Ressourcen 2950 verteilt werden könnte, könnte der Schritt 3110 JA ergeben. Ein Beschleuniger-Abbild für den neuen Beschleuniger wird dynamisch erzeugt (Schritt 3120). Eine geeignete Möglichkeit, ein neues Beschleuniger-Abbild dynamisch zu erstellen, besteht im Verwenden des vorstehend ausführlich erläuterten Prozesses aus 4. Natürlich liegen auch andere Möglichkeiten zum dynamischen Erzeugen eines Beschleuniger-Abbilds im Umfang der vorliegenden Offenbarung und der Ansprüche. Das in Schritt 3120 dynamisch erzeugte Beschleuniger-Abbild wird anschließend einer programmierbaren Einheit bereitgestellt, um den neuen Beschleuniger zu erstellen (Schritt 3130). Ein oder mehrere Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle werden durch einen oder mehrere entsprechende Aufrufe des neuen Beschleunigers ersetzt (Schritt 3140). Anschließend kehrt das Verfahren 3100 zu Schritt 3110 zurück und fährt fort, was zeigt, dass das Verfahren 3100 kontinuierlich überwachen und nach Bedarf neue Beschleuniger erstellen kann.
  • Das Verfahren 3100 aus 31 wird nun anhand desselben Beispiels aus 26 bis 30 erläutert. In diesem konkreten Beispiel wird zugrunde gelegt, dass der Schritt 3110 feststellt, dass der Aufruf von L3 in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte (Schritt 3110=JA). Es wird zugrunde gelegt, dass in Schritt 3120 ein Beschleuniger-Abbild für den als Beschl4 bezeichneten neuen Beschleuniger erzeugt und dann in Schritt 3130 einer programmierbaren Einheit bereitgestellt wird. Es wird zugrunde gelegt, dass das Abbild für Beschl4 derselben in 29 gezeigten programmierbaren Einheit 2900 bereitgestellt wird, so dass die programmierbare Einheit 2900 Beschll 2910, Beschl2 2920, Beschl3 2930 und Beschl4 3240 enthält, wie in 32 gezeigt. Es ist zu beachten, dass die verfügbaren Ressourcen 3250 geringer sind als in 29, da Beschl4 einige dieser Ressourcen in Anspruch genommen hat. Der Schritt 3140 aus 31 ersetzt anschließend den Aufruf von L4 in der virtuellen Funktionstabelle durch einen Aufruf von Beschl4, wie in 33 gezeigt wird. An diesem Punkt wird, wenn das Computerprogramm die Funktion F4 in der virtuellen Funktionstabelle 2600 aufruft, Beschl4 aufgerufen, um diese Funktion auszuführen, anstatt die Funktion über einen Aufruf der Software-Bibliothek auszuführen.
  • Die in 8, 15 und 22 gezeigten Beschleuniger enthalten eine OpenCAPI-Schnittstelle. Es ist jedoch zu beachten, dass die OpenCAPI-Schnittstelle nicht unbedingt notwendig ist, um einen Beschleuniger wie vorliegend offenbart und beansprucht dynamisch zu erzeugen und bereitzustellen. Bereitstellen eines Beschleunigers für eine programmierbare Einheit, die eine OpenCAPI-Schnittstelle enthält, ist nützlich, da die OpenCAPI-Spezifikation offen ist, so dass jedermann gemäß der Spezifikation entwickeln und in einer Cloud-Umgebung interagieren kann. Zudem gewährleistet die OpenCAPI-Schnittstelle geringere Latenz, wodurch der „Abstand“ zwischen einem Beschleuniger und den Daten, die dieser beanspruchen oder produzieren kann, verringert wird. Des Weiteren gewährleistet OpenCAPI eine höhere Bandbreite, wodurch die Datenmenge, die ein Beschleuniger in einer bestimmten Zeit beanspruchen oder produzieren kann, erhöht wird. Diese Vorteile von OpenCAPI gewährleisten zusammengenommen eine gute Umgebung zum Implementieren eines Codeabschnitts eines Computerprogramms in einem Beschleuniger und senken die Schwelle, ab der ein Codeabschnitt in einem Beschleuniger besser ist als im Computerprogramm. Die vorliegende Offenbarung und die Ansprüche gelten jedoch ebenso für Beschleuniger, die keine OpenCAPI-Schnittstelle enthalten oder auf eine solche zugreifen können.
  • Ein Computerprogramm enthält Aufrufe einer Software-Bibliothek. Es wird eine virtuelle Funktionstabelle aufgebaut, welche die Aufrufe der Software-Bibliothek in dem Computerprogramm enthält. Eine programmierbare Einheit enthält einen oder mehrere aktuell implementierte Beschleuniger. Es werden die verfügbaren Beschleuniger ermittelt, die aktuell implementiert sind. Die Aufrufe in der Software-Bibliothek, die einem aktuell implementierten Beschleuniger entsprechen, werden ermittelt. Ein oder mehrere Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle werden durch einen oder mehrere entsprechende Aufrufe eines entsprechenden aktuell implementierten Beschleunigers ersetzt. Wenn ein Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, wird dynamisch ein Beschleuniger-Abbild für den neuen Beschleuniger erzeugt. Das Beschleuniger-Abbild wird dann bereitgestellt, um den neuen Beschleuniger zu erstellen. Ein oder mehrere Aufrufe der Software-Bibliothek in der virtuellen Funktionstabelle werden durch einen oder mehrere entsprechende Aufrufe des neuen Beschleunigers ersetzt.
  • Ein Fachmann versteht, dass im Umfang der Ansprüche viele Varianten möglich sind. Während somit die Offenbarung vorstehend ausführlich gezeigt und beschrieben wurde, versteht ein Fachmann, dass diese und andere Änderungen in Form und Einzelheiten vorgenommen werden können, ohne vom Umfang der Ansprüche abzuweichen.

Claims (13)

  1. Vorrichtung, die Folgendes aufweist: mindestens einen Prozessor, einen mit dem mindestens einen Prozessor verbundenen Speicher, eine mit dem mindestens einen Prozessor verbundene programmierbare Einheit, die einen aktuell implementierten Beschleuniger enthält, ein Computerprogramm, das sich in dem Speicher befindet und durch den mindestens einen Prozessor ausgeführt wird, eine in dem Speicher befindliche Software-Bibliothek, die eine Mehrzahl durch das Computerprogramm aufgerufener Funktionen enthält; und ein Beschleuniger-Bereitstellungstool, das sich in dem Speicher befindet und mit dem mindestens einen Prozessor verbunden ist, wobei das Beschleuniger-Bereitstellungstool eine Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm ermittelt, eine virtuelle Funktionstabelle aufbaut, welche die Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm enthält, feststellt, dass der aktuell implementierte Beschleuniger in der programmierbaren Einheit verfügbar ist, feststellt, dass ein erster der Mehrzahl von Aufrufen in der Software-Bibliothek dem aktuell implementierten Beschleuniger entspricht, und den ersten Aufruf der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des aktuell implementierten Beschleunigers ersetzt.
  2. Vorrichtung nach Anspruch 1, wobei die programmierbare Einheit eine mit dem mindestens einen Prozessor verbundene OpenCAPI-Schnittstelle (Open Coherent Accelerator Processor Interface) aufweist.
  3. Vorrichtung nach Anspruch 1, wobei das Beschleuniger-Bereitstellungstool feststellt, dass ein zweiter Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, dynamisch ein Beschleuniger-Abbild für den neuen Beschleuniger erzeugt, das Beschleuniger-Abbild der programmierbaren Einheit bereitstellt, um den neuen Beschleuniger zu erstellen, und den zweiten Aufruf der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des neuen Beschleunigers ersetzt.
  4. Vorrichtung nach Anspruch 1, wobei es sich bei dem neuen Beschleuniger nicht um den aktuell implementierten Beschleuniger in der programmierbaren Einheit handelt.
  5. Vorrichtung nach Anspruch 1, wobei das Beschleuniger-Bereitstellungstool das Beschleuniger-Abbild dynamisch erzeugt durch Umwandeln eines Codeabschnitts in dem Computerprogramm in eine Darstellung in einer Hardware-Beschreibungssprache und anschließendes Verarbeiten der Darstellung in der Hardware-Beschreibungssprache, um daraus das Beschleuniger-Abbild zu erzeugen.
  6. Vorrichtung nach Anspruch 1, wobei die programmierbare Einheit eine vor Ort programmierbare Gatter-Anordnung (FPGA) aufweist.
  7. Vorrichtung, die Folgendes aufweist: mindestens einen Prozessor, einen mit dem mindestens einen Prozessor verbundenen Speicher, eine mit dem mindestens einen Prozessor verbundene, vor Ort programmierbare Gatter-Anordnung (FPGA), die eine mit dem mindestens einen Prozessor verbundene OpenCAPI-Schnittstelle aufweist, wobei die FPGA einen aktuell implementierten Beschleuniger enthält, ein Computerprogramm, das sich in dem Speicher befindet und durch den mindestens einen Prozessor ausgeführt wird, eine in dem Speicher befindliche Software-Bibliothek, die eine Mehrzahl durch das Computerprogramm aufgerufener Funktionen enthält; und ein Beschleuniger-Bereitstellungstool, das sich in dem Speicher befindet und mit dem mindestens einen Prozessor verbunden ist, wobei das Beschleuniger-Bereitstellungstool eine Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm ermittelt, eine virtuelle Funktionstabelle aufbaut, welche die Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm enthält, feststellt, dass der aktuell implementierte Beschleuniger in der programmierbaren Einheit verfügbar ist, feststellt, dass ein erster der Mehrzahl von Aufrufen in der Software-Bibliothek dem aktuell implementierten Beschleuniger entspricht, den ersten Aufruf der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des aktuell implementierten Beschleunigers ersetzt, feststellt, dass ein zweiter Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, bei dem es sich nicht um den aktuell implementierten Beschleuniger handelt, ein Beschleuniger-Abbild für den neuen Beschleuniger dynamisch erzeugt durch Umwandeln eines Codeabschnitts in dem Computerprogramm in eine Darstellung in einer Hardware-Beschreibungssprache und anschließendes Verarbeiten der Darstellung in der Hardware-Beschreibungssprache, um daraus das Beschleuniger-Abbild zu erzeugen, das Beschleuniger-Abbild der programmierbaren Einheit bereitstellt, um den neuen Beschleuniger zu erstellen, und den zweiten Aufruf der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des neuen Beschleunigers ersetzt.
  8. Verfahren zum Verbessern der Laufzeitleistung eines Computerprogramms, wobei das Verfahren Folgendes umfasst: Bereitstellen eines aktuell implementierten Beschleunigers in einer programmierbaren Einheit, Bereitstellen einer Software-Bibliothek, die eine Mehrzahl durch das Computerprogramm aufgerufener Funktionen enthält, Ermitteln einer Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm, Aufbauen einer virtuellen Funktionstabelle, welche die Mehrzahl von Aufrufen der Software-Bibliothek in dem Computerprogramm enthält, Feststellen, dass der aktuell implementierte Beschleuniger in der programmierbaren Einheit verfügbar ist, Feststellen, dass ein erster der Mehrzahl von Aufrufen in der Software-Bibliothek dem aktuell implementierten Beschleuniger entspricht, und Ersetzen des ersten Aufrufs der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des aktuell implementierten Beschleunigers.
  9. Verfahren nach Anspruch 8, wobei die programmierbare Einheit eine mit dem mindestens einen Prozessor verbundene OpenCAPI-Schnittstelle (Open Coherent Accelerator Processor Interface) aufweist.
  10. Verfahren nach Anspruch 8, ferner umfassend: Feststellen, dass ein zweiter Aufruf in der Software-Bibliothek in einem neuen Beschleuniger implementiert werden könnte, dynamisches Erzeugen eines Beschleuniger-Abbilds für den neuen Beschleuniger, Bereitstellen des Beschleuniger-Abbilds an die programmierbare Einheit, um den neuen Beschleuniger zu erstellen, und Ersetzen des zweiten Aufrufs der Software-Bibliothek in der virtuellen Funktionstabelle durch einen Aufruf des neuen Beschleunigers.
  11. Verfahren nach Anspruch 8, wobei es sich bei dem neuen Beschleuniger nicht um den aktuell implementierten Beschleuniger in der programmierbaren Einheit handelt.
  12. Verfahren nach Anspruch 8, wobei das dynamische Erzeugen des Beschleuniger-Abbilds für den neuen Beschleuniger Folgendes umfasst: Umwandeln eines Codeabschnitts in dem Computerprogramm in eine Darstellung in einer Hardware-Beschreibungssprache, Verarbeiten der Darstellung in der Hardware-Beschreibungssprache, um daraus das Beschleuniger-Abbild zu erzeugen.
  13. Verfahren nach Anspruch 8, wobei die programmierbare Einheit eine vor Ort programmierbare Gatter-Anordnung (FPGA) aufweist.
DE112018006540.5T 2017-12-20 2018-12-19 Dynamisches ersetzen eines aufrufs einer software-bibliothek durch einen aufruf eines beschleunigers Pending DE112018006540T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/849,560 2017-12-20
US15/849,560 US11645059B2 (en) 2017-12-20 2017-12-20 Dynamically replacing a call to a software library with a call to an accelerator
PCT/IB2018/060306 WO2019123292A1 (en) 2017-12-20 2018-12-19 Dynamically replacing a call to a software library with a call to an accelerator

Publications (1)

Publication Number Publication Date
DE112018006540T5 true DE112018006540T5 (de) 2020-08-27

Family

ID=66814393

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112018006540.5T Pending DE112018006540T5 (de) 2017-12-20 2018-12-19 Dynamisches ersetzen eines aufrufs einer software-bibliothek durch einen aufruf eines beschleunigers

Country Status (6)

Country Link
US (1) US11645059B2 (de)
JP (1) JP7252694B2 (de)
CN (1) CN111656321B (de)
DE (1) DE112018006540T5 (de)
GB (1) GB2582120B (de)
WO (1) WO2019123292A1 (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190250957A1 (en) * 2016-12-12 2019-08-15 Hitachi, Ltd. System and method of dynamic allocation of hardware accelerator
US10901827B2 (en) * 2018-05-14 2021-01-26 International Business Machines Corporation Failover of a hardware accelerator to software
US10817280B1 (en) * 2018-05-21 2020-10-27 Amazon Technologies, Inc. Overriding shared service interfaces
US10725839B2 (en) 2018-07-12 2020-07-28 International Business Machines Corporation Helping a hardware accelerator using software
US11604653B2 (en) 2020-12-11 2023-03-14 International Business Machines Corporation Identifying dependencies in a control sequence for execution on a hardware accelerator

Family Cites Families (31)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
GB9320982D0 (en) * 1993-10-12 1993-12-01 Ibm A data processing system
WO2001090887A1 (fr) 2000-05-25 2001-11-29 Fujitsu Limited Procede de traitement de programme permettant un traitement haute vitesse au moyen d'un materiel a reconfiguration dynamique et programme permettant d'executer ce procede de traitement
US6785881B1 (en) 2001-11-19 2004-08-31 Cypress Semiconductor Corporation Data driven method and system for monitoring hardware resource usage for programming an electronic device
US7073158B2 (en) 2002-05-17 2006-07-04 Pixel Velocity, Inc. Automated system for designing and developing field programmable gate arrays
US6775810B2 (en) * 2002-10-08 2004-08-10 Sun Microsystems, Inc. Boosting simulation performance by dynamically customizing segmented object codes based on stimulus coverage
JP2005228183A (ja) 2004-02-16 2005-08-25 Hitachi Ltd プログラム実行方法、および、プログラム実行のための計算機システム
US7356672B2 (en) 2004-05-28 2008-04-08 The Regents Of The University Of California Warp processor for dynamic hardware/software partitioning
US20060075007A1 (en) 2004-09-17 2006-04-06 International Business Machines Corporation System and method for optimizing a storage system to support full utilization of storage space
JP2009070265A (ja) 2007-09-14 2009-04-02 Ricoh Co Ltd 情報処理装置
US20090240717A1 (en) * 2008-03-20 2009-09-24 Hitachi, Ltd. Method and apparatus for verifying archived data integrity in integrated storage systems
FR2938943B1 (fr) * 2008-11-21 2010-11-12 Thales Sa Systeme multiprocesseur.
CN101441564B (zh) * 2008-12-04 2011-07-20 浙江大学 为程序定制的可重构加速器实现方法
JP2011013955A (ja) 2009-07-02 2011-01-20 Hitachi Systems & Services Ltd メディアチェック回避システム
US9378003B1 (en) * 2009-07-23 2016-06-28 Xilinx, Inc. Compiler directed cache coherence for many caches generated from high-level language source code
US8825972B1 (en) * 2010-11-19 2014-09-02 Symantec Corporation Method and system of producing a full backup image using an incremental backup method
US8788871B2 (en) * 2011-06-28 2014-07-22 International Business Machines Corporation Unified, workload-optimized, adaptive RAS for hybrid systems
US9081925B1 (en) * 2012-02-16 2015-07-14 Xilinx, Inc. Estimating system performance using an integrated circuit
US9298438B2 (en) 2012-06-20 2016-03-29 Microsoft Technology Licensing, Llc Profiling application code to identify code portions for FPGA implementation
US9424019B2 (en) 2012-06-20 2016-08-23 Microsoft Technology Licensing, Llc Updating hardware libraries for use by applications on a computer system with an FPGA coprocessor
US9990189B2 (en) * 2013-07-03 2018-06-05 International Business Machines Corporation Method to optimize provisioning time with dynamically generated virtual disk contents
US9501393B2 (en) 2014-01-27 2016-11-22 Western Digital Technologies, Inc. Data storage system garbage collection based on at least one attribute
US10108622B2 (en) 2014-03-26 2018-10-23 International Business Machines Corporation Autonomic regulation of a volatile database table attribute
US9921971B2 (en) 2014-06-26 2018-03-20 SAP Portal Israel Ltd. Context based cache eviction
US20150379169A1 (en) * 2014-06-27 2015-12-31 Yong Wu Efficient emulation for pseudo-wrapped callback handling in binary translation software
US9607120B2 (en) 2014-12-30 2017-03-28 International Business Machines Corporation Implementing system irritator accelerator FPGA unit (AFU) residing behind a coherent attached processors interface (CAPI) unit
US9720714B2 (en) 2015-08-26 2017-08-01 International Business Machines Corporation Accelerator functionality management in a coherent computing system
JP6485335B2 (ja) 2015-11-19 2019-03-20 富士通株式会社 演算処理装置及び演算処理装置の制御方法
KR101847262B1 (ko) * 2016-03-18 2018-05-28 연세대학교 산학협력단 하드웨어 가속기를 포함하는 메인 메모리 및 메인 메모리의 동작 방법
US10034407B2 (en) 2016-07-22 2018-07-24 Intel Corporation Storage sled for a data center
US20180189229A1 (en) * 2017-01-04 2018-07-05 Stmicroelectronics S.R.L. Deep convolutional network heterogeneous architecture
US10296741B2 (en) * 2017-07-27 2019-05-21 International Business Machines Corporation Secure memory implementation for secure execution of virtual machines

Also Published As

Publication number Publication date
JP2021508117A (ja) 2021-02-25
WO2019123292A1 (en) 2019-06-27
CN111656321B (zh) 2024-03-22
CN111656321A (zh) 2020-09-11
GB202010578D0 (en) 2020-08-26
JP7252694B2 (ja) 2023-04-05
US11645059B2 (en) 2023-05-09
GB2582120A (en) 2020-09-09
US20190187966A1 (en) 2019-06-20
GB2582120B (en) 2021-01-27

Similar Documents

Publication Publication Date Title
DE112018006540T5 (de) Dynamisches ersetzen eines aufrufs einer software-bibliothek durch einen aufruf eines beschleunigers
DE112017007656T5 (de) Verschobene aktualisierung von datenbank-hashcode in einer blockchain
DE112017007224T5 (de) Momentaufnahmen-Verwaltung in einer Blockchain
DE112012000693T5 (de) Ausführen einer Vielzahl von Instanzen einer Anwendung
DE112018004222T5 (de) Datenbankaufteilung
DE112018005898T5 (de) Dynamische bereitstellung von software-funktionen
DE112018004660T5 (de) Verwenden von kommentaren zum bereitstellen von optimierungen
DE112020000912T5 (de) Verwalten von software-programmen
DE112019001821B4 (de) Verfahren und vorrichtung zur wiedergabe eines aktivierungsrahmens für unterbrechungsfreie speicherbereinigung (pause-less garbage collection)
DE112011103406T5 (de) Verwaltung von nicht geänderten Objekten
DE102013006396A1 (de) Eine grafikverarbeitungseinheit, in der eine standardverarbeitungseinheit verwendet ist, und ein verfahren zum aufbau einer grafikverarbeitungseinheit
DE10333087A1 (de) Verfahren zum automatischen Zerlegen von dynamischen Systemmodellen in Teilmodelle
DE102021130906A1 (de) Optimieren von zugriffen auf begrenzungsinformationen beim pufferschutz
DE112021000338T5 (de) Auslagern der statistikerfassung
DE112018004138T5 (de) Asynchrone aktualisierung von metadatenspuren in reaktion auf einen mittels einer e/a-operation über eine busschnittstelle erzeugten cachetreffer
DE112016003598T5 (de) Gleichzeitige Massenverarbeitung von baumbasierten Datenstrukturen
DE102022106423A1 (de) Verfahren zur Aufteilung von Simulationsmodellen zwischen einem Prozessor und einem FPGA
DE10333088A1 (de) Verfahren zum Liefern von Zugriff auf die internen Signale eines dynamischen Systemmodells von außerhalb bezüglich der Modellierungsumgebung
DE112018005620T5 (de) Auftragsverwaltung in einem datenverarbeitungssystem
DE102016006202A1 (de) Numerische Steuervorrichtung zum Verwalten von Bearbeitungsdaten und Bearbeitungsergebnissen
DE112020002785T5 (de) Verfahren für ein virtualisierungssystem auf container-grundlage
DE102011014977A1 (de) Verfahren zur Verringerung einer gesamten Rechenzeit für eine visuelle Simulationsschleife in einer Anwendung der virtuellen Welt
EP3028182B1 (de) Verfahren und system zur synchronisation von daten
DE112018006331B4 (de) Testfallgenerierungsvorrichtung, Testfallgenerierungsverfahren und Testfallgenerierungsprogramm
DE19710463C2 (de) Verfahren zur automatischen Differentiation auf einem Rechner insbesondere zur Simulation elektronischer Schaltungen

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R084 Declaration of willingness to licence