DE102019117226A1 - Schaltkreis mit adaptiven speicherassistenzfähigkeiten - Google Patents

Schaltkreis mit adaptiven speicherassistenzfähigkeiten Download PDF

Info

Publication number
DE102019117226A1
DE102019117226A1 DE102019117226.8A DE102019117226A DE102019117226A1 DE 102019117226 A1 DE102019117226 A1 DE 102019117226A1 DE 102019117226 A DE102019117226 A DE 102019117226A DE 102019117226 A1 DE102019117226 A1 DE 102019117226A1
Authority
DE
Germany
Prior art keywords
memory
application
storage
cache
service
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
DE102019117226.8A
Other languages
English (en)
Inventor
Robert L. Pelt
Hong Wang
Arifur Rahman
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.)
Intel Corp
Original Assignee
Intel 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 Intel Corp filed Critical Intel Corp
Publication of DE102019117226A1 publication Critical patent/DE102019117226A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • 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/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/4881Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0806Multiuser, multiprocessor or multiprocessing cache systems
    • G06F12/0811Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0862Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with prefetch
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0866Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches for peripheral storage systems, e.g. disk cache
    • G06F12/0871Allocation or management of cache space
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0888Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches using selective caching, e.g. bypass
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/12Replacement control
    • G06F12/121Replacement control using replacement algorithms
    • G06F12/126Replacement control using replacement algorithms with special data handling, e.g. priority of data or instructions, handling errors or pinning
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/30Circuit design
    • G06F30/32Circuit design at the digital level
    • G06F30/327Logic synthesis; Behaviour synthesis, e.g. mapping logic, HDL to netlist, high-level language to RTL or netlist
    • 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
    • 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]
    • G06F30/343Logical level
    • 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
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • 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/445Program loading or initiating
    • G06F9/44505Configuring for program initiating, e.g. using registry, configuration files
    • 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5016Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
    • 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/46Multiprogramming arrangements
    • G06F9/52Program synchronisation; Mutual exclusion, e.g. by means of semaphores
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/10Providing a specific technical effect
    • G06F2212/1016Performance improvement
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • G06F2212/601Reconfiguration of cache memory

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Computer Hardware Design (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Design And Manufacture Of Integrated Circuits (AREA)
  • Stored Programmes (AREA)

Abstract

Ein System zum Ausführen einer oder mehrerer Anwendungen ist bereitgestellt. Jede Anwendung kann Speicherdienste erfordern, die unter Verwendung konfigurierbarer Speicherassistenzschaltungen, die mit unterschiedlichen Leveln einer Speicherhierarchie assoziiert sind, beschleunigt werden können. Entwurfswerkzeuge für integrierte Schaltungen können verwendet werden, um Konfigurationsdaten zum Programmieren der konfigurierbaren Speicherassistenzschaltungen zu erzeugen. Während der Kompilierzeit können die Entwurfswerkzeuge Speicherdienstmuster in einem Quellcode identifizieren, die identifizierten Speicherdienstmuster zu entsprechenden Vorlagen abgleichen, die passenden Vorlagen parametrisieren und dann die parametrisierten Vorlagen synthetisieren, um die Konfigurationsdaten zu erzeugen. Während der Laufzeit kann ein Speicherassistenzscheduler die durch jede Anwendung benötigten Speicherdienste zu verfügbaren Speicherassistenzschaltungen im System abbilden. Die abgebildeten Speicherassistenzschaltungen werden durch die Konfigurationsdaten programmiert, um die gewünschte Speicherdienstfähigkeit bereitzustellen.

Description

  • Hintergrund
  • Das Vorliegende betrifft integrierte Schaltungssysteme und insbesondere Verfahren und Vorrichtungen zur Verbesserung der Leistungsfähigkeit integrierter Schaltungssysteme unter Verwendung von programmierbarer Logik.
  • Programmierbare Logikschaltungen können durch einen Benutzer programmiert werden, um eine gewünschte benutzerdefinierte Logikfunktion zu implementieren. In einem typischen Szenario verwendet ein Logikentwickler computergestützte Entwurfswerkzeuge, um eine benutzerdefinierte Logikschaltung zu entwerfen. Wenn der Entwurfsprozess beendet ist, erzeugen die computergestützten Entwurfswerkzeuge Konfigurationsdaten. Die Konfigurationsdaten werden dann in Konfigurationsspeicherelemente geladen, die die programmierbaren Logikschaltungen zum Durchführen der Funktionen der benutzerdefinierten Logikschaltung konfigurieren.
  • Programmierbare Einrichtungen können zum Coverarbeiten in Big-Data- oder Fast-Data-Anwendungen verwendet werden. Programmierbare Einrichtungen können zum Beispiel bei Anwendungsbeschleunigungsaufgaben in einem Rechenzentrum verwendet werden und können während des Rechenzentrumbetriebs umprogrammiert werden, um unterschiedliche Aufgaben durchzuführen. Programmierbare Logik ist jedoch nicht verwendet worden, um adaptive Speicherlösungen in einer integrierten Schaltung oder einem integrierten Schaltungs-Package zu ermöglichen. Bestehende Lösungen zum Entwickeln einer Anwendung, die programmierbare Logik wirksam einsetzt, basieren auf einem High-Level-Synthese(HLS)-Entwurfsfluss, der eine Hardwarebeschreibung basierend auf einem High-Level-Synthese-Quellcode erzeugt. Derartige Lösungen erfordern jedoch, dass die Anwendungsentwickler die zugrundeliegende Hardwarearchitektur verstehen und die gesamte Anwendung unter Verwendung des HLS-Werkzeugflusses abbilden.
  • Es liegt in diesem Zusammenhang, dass die hierin beschriebenen Ausführungsformen entstehen.
  • Figurenliste
    • 1 ist ein Diagramm eines veranschaulichenden Systems, das einen Prozessor und assoziierte konfigurierbare Speicherassistenzschaltungen gemäß einer Ausführungsform beinhaltet.
    • 2 ist ein Diagramm eines veranschaulichenden Systems, das mehrere CPU-Cluster und assoziierte konfigurierbare Speicherassistenzschaltungen gemäß einer Ausführungsform beinhaltet.
    • 3 ist ein Diagramm eines programmierbaren Logikschaltkreises gemäß einer Ausführungsform.
    • 4 ist ein Diagramm eines Schaltungsentwurfssystems, das zum Entwerfen integrierter Schaltungen verwendet werden kann, gemäß einer Ausführungsform.
    • 5 ist ein Diagramm von veranschaulichenden CAD-Werkzeugen (CAD: Computer-Aided Design - computergestützter Entwurf), die in einem Schaltungsentwurfssystem gemäß einer Ausführungsform verwendet werden können.
    • 6 ist ein Flussdiagramm von veranschaulichenden Schritten zum Implementieren konfigurierbarer Speicherassistenzschaltungen zur Kompilierzeit gemäß einer Ausführungsform.
    • 7 ist ein Flussdiagramm von veranschaulichenden Schritten zum Laden einer Anwendung und zum selektiven Programmieren der konfigurierbaren Speicherassistenzschaltungen zur Laufzeit gemäß einer Ausführungsform.
    • 8 ist ein Diagramm eines veranschaulichenden Systems, das zum Ausführen mehrerer Anwendungen verwendet werden kann, die jeweils Speicherdienste nutzen, die zu unterschiedlichen konfigurierbaren Speicherassistenzschaltungen abgebildet sind, gemäß einer Ausführungsform.
  • Ausführliche Beschreibung
  • Die vorliegenden Ausführungsformen betreffen integrierte Schaltungssysteme und insbesondere Entwurfswerkzeuge für integrierte Schaltungen, die dazu ausgelegt sind, Speicherzugriffsmuster, die durch einen Prozessor durchgeführt werden, zu identifizieren und die identifizierten Speicherzugriffsmuster mit einer ausgewählten Speicherzugriffsvorlage in einer Bibliothek mit vorbestimmten Speicherzugriffsvorlagen abzugleichen. Die ausgewählte Speicherzugriffsvorlage kann dann parametrisiert und synthetisiert werden, um eine Konfigurationsdatei für eine programmierbare Speicherassistenzschaltung zu erzeugen, die zum Beschleunigen von Speicherzugriffsoperationen für den Prozessor verwendet wird.
  • Während der Laufzeit kann ein Betriebssystem eine Anwendung laden, die durch die Speicherassistenzschaltung beschleunigt werden kann. Das Betriebssystem kann die Kompatibilität zwischen der erforderlichen Speicherassistenzschaltung und den aktuellen Hardwareressourcen auf dem System bestimmen, Laufzeitentscheidungen zur Abbildung von Speicherzugriffsanforderungen zu verfügbaren Speicherassistenzschaltungen treffen und verschiedene Arbeitslasten priorisieren. Dieses Verfahren ermöglicht Anwendungsentwicklern, programmierbare Speicherassistenzschaltungen zur Verbesserung der Leistungsfähigkeit auszunutzen, ermöglicht In-System-Upgrades und kann auch bei der Verbesserung der Speichersicherheit helfen.
  • Der Fachmann wird erkennen, dass die vorliegende Ausführungsbeispiele ohne manche oder alle dieser spezifischen Einzelheiten in die Praxis umgesetzt werden können. In anderen Fällen sind allgemein bekannte Operationen nicht im Einzelnen beschrieben worden, um die vorliegenden Ausführungsformen nicht unnötig unklar zu machen.
  • 1 ist ein Diagramm eines veranschaulichenden Systems, wie etwa eines Systems 92, das einen Prozessor 80, einen Eingabe-Ausgabe(EA)-Schaltkreis 84 und assoziierte konfigurierbare Speicherassistenzschaltungen beinhaltet. Der Prozessor 80 kann eine Zentralverarbeitungseinheit (CPU: Central Processing Unit), eine Grafikverarbeitungseinheit (GPU: Graphics Processing Unit), ein Digitalsignalprozessor (DSP), ein Netzwerkprozessor oder andere geeignete Arten von Verarbeitungsschaltkreis sein. Allgemein kann das System 92 einen oder mehrere Prozessoren beinhalten, wie durch die Auslassungspunkte 81 angegeben.
  • Das System 92 kann ferner einen Cache-Speicher, wie etwa einen Level-1(L1)-Cache-Speicher 82-1, einen Level-2(L2)-Cache-Speicher 82-2 und einen Level-3(L3)-Cache-Speicher 82-3, beinhalten. Allgemein kann das System 92 beliebige geeignete Levels von Cache-Speicher beinhalten, wie durch die Auslassungspunkte 101 angegeben. Der L1-Speicher 82-1 ist allgemein näher am Prozessor 80 gebaut als der L2-Speicher 82-2, somit findet das Zugreifen auf den L1-Speicher 82-1 gewöhnlich schneller als das Zugreifen auf den L2-Speicher 82-2 statt. Gleichermaßen ist der L2-Speicher 82-2 allgemein näher am Prozessor 80 gebaut als der L3-Speicher 82-3, somit findet das Zugreifen auf den L2-Speicher 82-2 gewöhnlich schneller als das Zugreifen auf den L3-Speicher 82-3 statt. Der Speicher 82 kann zum temporären Speichern von Daten verwendet werden, sodass anschließende Anforderungen vom Prozessor 80 schneller angeboten werden können, im Gegensatz zu Abrufen der Daten aus einem Hauptspeicher, der bezüglich des Cache-Speichers viel langsamer ist.
  • Gemäß einer Ausführungsform kann das System 92 konfigurierbare Speicherassistenzschaltungen beinhalten, um zu erleichtern, wie der Prozessor 80 mit den verschiedenen Speicher-Caches interagiert. In dem Beispiel von 1 können Operationen am L1-Speicher 82-1 optional unter Verwendung einer konfigurierbaren L1-Speicherassistenzschaltung 100-1 beschleunigt werden; Operationen am L2-Speicher 82-2 können optional unter Verwendung einer konfigurierbaren L2-Speicherassistenzschaltung 100-2 beschleunigt werden; und Operationen am L3-Speicher 82-3 können funktionsfähig unter Verwendung einer Speicherassistenzschaltung 100-3 beschleunigt werden. Die Speicherassistenzschaltungen 100 können unter Verwendung eines programmierbaren („Soft“) Logikschaltkreises implementiert werden und werden manchmal als rekonfigurierbare, adaptierbare oder anpassbare Speicherassistenzschaltungen bezeichnet. Die Speicherassistenzschaltungen 100 können basierend auf Anwendungsnutzungsprofilen dynamisch rekonfiguriert werden.
  • Die Komponenten des Systems 92 können als Teil eines einzelnen integrierten Schaltungs-Die (als ein Systemauf-Chip oder „SoC“ (System-on-Chip)), als mehrere integrierte Schaltungschips in einem einzelnen Mehrchip-Package, als Teile verschiedener Packages auf einer Leiterplatte, als Teile verschiedener Leiterplatten in einem verteilten System usw. ausgebildet sein. Im Allgemeinen kann das System 92 ein digitales System oder ein hybrides System sein, das sowohl digitale als auch analoge Teilsysteme beinhaltet. Das System 92 kann in einer breiten Vielfalt von Anwendungen als Teil eines größeren Rechensystems verwendet werden, das unter anderem Folgendes beinhalten kann: ein Rechenzentrum, ein Computer-Networking-System, ein Daten-Networking-System, ein Digitalsignalverarbeitungssystem, ein Grafikverarbeitungssystem, ein Videoverarbeitungssystem, ein Computervisionsverarbeitungssystem, eine zellulare Basisstation, ein virtuelles Realitätssystem oder erweitertes Realitätssystem, eine Netzwerkfunktionenvirtualisierungsplattform, ein künstliches neuronales Netzwerk, ein autonomes Fahrsystem, eine Kombination von zumindest manchen dieser Systeme und/oder andere geeignete Arten von Rechensystemen.
  • Das System 92 kann mehr als einen Prozessor oder mehr als eine CPU beinhalten. 2 ist ein Diagramm, das das System 92 mit mehreren CPU-Clustern 200 darstellt. Wie in 2 dargestellt, kann das System 92 einen ersten CPU-Cluster 200-1 und einen zweiten CPU-Cluster 200-2 beinhalten. Der erste CPU-Cluster 200-1 kann eine erste CPU 80A und eine zweite CPU 80B beinhalten. Die erste CPU 80A kann auf einen L1-Cache 82A-1 zugreifen, der durch eine Speicherassistenzschaltung 100A-1 beschleunigt wird. Die zweite CPU 80B kann auf einen L1-Cache 82B-1 zugreifen, der durch eine Speicherassistenzschaltung 100B-1 beschleunigt wird. Jeder L1-Cache ist allgemein einer einzigen CPU dediziert. Beide CPUs 80A und 80B können auf den L2-Cache 82-2 zugreifen, der durch die Speicherassistenzschaltung 100-2 beschleunigt wird (d. h. der L2-Cache 82-2 kann zwischen den CPUs 80A und 80B gemeinsam genutzt werden).
  • Der zweite CPU-Cluster 200-2 kann eine oder mehrere zusätzliche CPUs beinhalten. In dem Beispiel von 2 können beide CPU-Cluster 200-1 und 200-2 auf den L3-Cache 82-3 zugreifen, der durch die Speicherassistenzschaltung 100-3 beschleunigt wird (d. h. der L3-Cache 82-3 kann zwischen mindestens zwei verschiedenen CPU-Clustern gemeinsam genutzt werden). Die Anordnung von 2, bei der die beiden CPUs im Cluster 200-1 einen gemeinsamen L2-Cache gemeinsam nutzen und bei der zwei verschiedene CPU-Cluster einen gemeinsamen L3-Cache gemeinsam nutzen, ist lediglich veranschaulichend. Falls gewünscht, kann ein L2-Cache einer einzelnen CPU dediziert sein oder kann zwischen drei oder mehr CPUs oder zwei oder mehr CPU-Clustern gemeinsam genutzt werden, ein L3-Cache kann zwischen drei oder mehr CPU-Clustern gemeinsam genutzt werden usw.
  • Wie oben beschrieben, können die Speicherassistenzschaltungen, die zwischen der Speicher-Cache-Hierarchie der Prozessoren verteilt sind, unter Verwendung eines programmierbaren Logikschaltkreises implementiert werden. Wie in 3 dargestellt, kann eine Speicherassistenzschaltung 100 eine programmierbare Logik 18 beinhalten und Vernetzungsressourcen 16, wie etwa globale und lokale vertikale und horizontale leitfähige Leitungen und Busse, können zum Routen von Signalen innerhalb der Schaltung 100 verwendet werden. Die Vernetzungsressourcen 16 beinhalten feste Interconnects (leitfähige Leitungen) und programmierbare Interconnects (d. h. programmierbare Verbindungen zwischen jeweiligen festen Interconnects). Die programmierbare Logik 18 kann einen kombinatorischen und sequenziellen Logikschaltkreis beinhalten. Die programmierbare Logik 18 kann dazu ausgelegt sein, eine benutzerdefinierte Logikfunktion durchzuführen. Die programmierbare Logik 18 kann in Gebiete mit Funktionsblöcken organisiert sein, die manchmal als Logikarrayblöcke („LABs“) bezeichnet werden. Funktionsblöcke, wie etwa LABs, können kleinere programmierbare Gebiete (z. B. Logikelemente, konfigurierbare Logikblöcke oder adaptive Logikmodule) beinhalten, die Eingangssignale empfangen und benutzerdefinierte Funktionen an den Eingangssignalen durchführen, um Ausgangssignale zu erzeugen.
  • Die programmierbare Logik 18 kann Speicherelemente 20 enthalten, die mit Konfigurationsdaten (auch Programmierdaten genannt) geladen werden können. Nachdem sie geladen sind, können die Speicherelemente 20 jeweils ein entsprechendes statisches Steuerungsausgangssignal bereitstellen, das den Zustand einer assoziierten Logikkomponente in der programmierbaren Logik 18 steuert. Typischerweise werden die Speicherelementausgangssignale zum Steuern der Gates von Metalloxidhalbleiter(MOS)-Transistoren verwendet. Manche der Transistoren können p-Kanal-Metalloxidhalbleiter(PMOS)-Transistoren sein. Viele dieser Transistoren können n-Kanal-Metalloxidhalbleiter(NMOS)-Durchlasstransistoren in programmierbaren Komponenten, wie etwa Multiplexern, sein. Wenn ein Speicherelementausgang High ist, wird ein NMOS-Durchlasstransistor, der durch dieses Speicherelement gesteuert wird, eingeschaltet, um Logiksignale von seinem Eingang zu seinem Ausgang durchzulassen. Wenn der Speicherelementausgang Low ist, ist der Durchlasstransistor ausgeschaltet und lässt keine Logiksignale durch.
  • Ein typisches Speicherelement 20 wird aus einer Anzahl von Transistoren gebildet, die dazu ausgelegt sind, kreuzgekoppelte Inverter zu bilden. Andere Anordnungen (z. B. Zellen mit mehr verteilten inverterartigen Schaltungen) können auch verwendet werden. Bei einem geeigneten Ansatz wird eine integrierte CMOS(Complementary Metal-Oxide-Semiconductor - komplementärer Metalloxidhalbleiter)-Schaltungstechnologie verwendet, um die Speicherelemente 20 zu bilden, somit sind CMOS-basierte Speicherelementimplementierungen hierin als ein Beispiel beschrieben. Im Zusammenhang von programmierbaren integrierten Schaltungen speichern die Speicherelemente Konfigurationsdaten und werden daher manchmal als Konfigurations-Direktzugriffsspeicher(CRAM)-Zellen bezeichnet.
  • Es kann eine Herausforderung sein, einen integrierten Schaltungsentwurf, der programmierbare Logik beinhaltet, zu entwerfen und zu implementieren. Schaltungsentwickler verwenden daher allgemein Logikentwurfssysteme, die auf CAD(Computer-Aided Design)-Werkzeugen basieren, um beim Entwerfen von Logikschaltungen unterstützt zu werden. Ein Logikentwurfssystem kann einem Logikentwickler dabei helfen, komplexe Schaltungen für ein System zu entwerfen und zu testen. Ein veranschaulichendes Schaltungsentwurfssystem 300 gemäß einer Ausführungsform ist in 4 dargestellt. Das Schaltungsentwurfssystem 300 kann auf einem Rechengerät für einen integrierten Schaltungsentwurf implementiert werden. Das System 300 kann zum Beispiel auf einem oder mehreren Prozessoren ansässig sein, wie etwa Personal-Computer, Arbeitsstationen usw. Der eine oder die mehreren Prozessoren können unter Verwendung eines Netzwerks (z. B. eines lokalen oder großflächigen Netzwerks) verknüpft sein. Der Speicher in diesen Computern oder externe Speicher- und Speicherungseinrichtungen, wie etwa interne und/oder externe Festplatten, können zum Speichern von Anweisungen und Daten verwendet werden.
  • Softwarebasierte Komponenten, wie etwa computergestützte Entwurfswerkzeuge 320 und Datenbanken 330, befinden sich auf dem System 300. Während des Betriebs wird ausführbare Software, wie etwa die Software der computergestützten Entwurfswerkzeuge 320, auf dem einen oder den mehreren Prozessoren des Systems 300 ausgeführt. Die Datenbanken 330 werden zum Speichern von Daten für den Betrieb des Systems 300 verwendet. Allgemein können Software und Daten auf nichtflüchtigen computerlesbaren Speicherungsmedien (z. B. greifbaren computerlesbaren Speicherungsmedien) gespeichert sein. Der Softwarecode kann manchmal als Software, Daten, Programmanweisungen, Anweisungen, Scripts oder Code bezeichnet werden. Die nichtflüchtigen computerlesbaren Speicherungsmedien können Computerspeicherchips wie etwa Nurlesespeicher (ROM: Read-Only Memory), beständigen Speicher wie etwa beständigen Direktzugriffsspeicher (NVRAM: Non-Volatile Random-Access Memory), ein oder mehrere Festplattenlaufwerke (z. B. magnetische Laufwerke oder Festkörperlaufwerke), ein oder mehrere entfernbare Flash-Laufwerke oder andere entfernbare Medien, CDs (Compact Discs), DVDs (Digital Versatile Discs), Blu-Ray-Discs (BDs), andere optische Medien, Disketten, Bänder oder eine oder mehrere beliebige andere geeignete Speicher- oder Speicherungseinrichtungen beinhalten.
  • Auf den nichtflüchtigen computerlesbaren Speicherungsmedien gespeicherte Software kann auf dem System 300 ausgeführt werden. Wenn die Software des Systems 300 installiert ist, weist die Speicherung des Systems 300 Anweisungen und Daten auf, die bewirken, dass das Rechengerät im System 300 verschiedene Verfahren oder Prozesse ausführt. Wenn diese Prozesse durchgeführt werden, ist das Rechengerät dazu ausgelegt, die Funktionen des Schaltungsentwurfssystems 300 zu implementieren.
  • Die CAD(Computer Aided Design)-Werkzeuge 320, von denen manche oder alle manchmal zusammengefasst als ein CAD-Werkzeug, ein Schaltungsentwurfswerkzeug oder ein EDA(Electronic Design Automation - elektronische Entwurfsautomatisierung)-Werkzeug bezeichnet werden, können durch einen einzigen Anbieter oder durch mehrere Anbieter bereitgestellt werden. Die Werkzeuge 320 können als eine oder mehrere Suites von Werkzeugen (z. B. eine Compiler-Suite zum Durchführen von Aufgaben, die mit dem Implementieren eines Schaltungsentwurfs assoziiert sind) und/oder als eine oder mehrere separate Softwarekomponenten (Werkzeuge) bereitgestellt werden. Die Datenbank(en) 330 können eine oder mehrere Datenbanken beinhalten, auf die nur ein spezielles Werkzeug oder spezielle Werkzeuge zugreifen, und können eine oder mehrere gemeinsam genutzte Datenbanken beinhalten. Auf gemeinsam genutzte Datenbanken können mehrere Werkzeuge zugreifen. Ein erstes Werkzeug kann zum Beispiel Daten für ein zweites Werkzeug in einer gemeinsam genutzten Datenbank speichern. Das zweite Werkzeug kann auf die gemeinsam genutzte Datenbank zugreifen, um die durch das erste Werkzeug gespeicherten Daten abzurufen. Dies ermöglicht einem Werkzeug, Informationen zu einem anderen Werkzeug weiterzugeben. Werkzeuge können auch Informationen untereinander weitergeben, ohne Informationen in einer gemeinsam genutzten Datenbank zu speichern, falls gewünscht.
  • Die veranschaulichenden computergestützten Entwurfswerkzeuge 320, die in einem Schaltungsentwurfssystem, wie etwa dem Schaltungsentwurfssystem 300 von 4, verwendet werden können, um programmierbare Speicherassistenzschaltungen 100 zu entwerfen, sind in 5 dargestellt. Der Entwurfsprozess kann mit der Formulierung von Funktionsspezifikationen des integrierten Schaltungsentwurfs (z. B. eine Funktions- oder Verhaltensbeschreibung des integrierten Schaltungsentwurfs) beginnen. Ein Schaltungsentwickler kann den funktionellen Betrieb eines gewünschten Schaltungsentwurfs unter Verwendung von Entwurfs- und Einschränkungseingabewerkzeugen 464 spezifizieren.
  • Die Entwurfs- und Einschränkungseingabewerkzeuge 464 können verwendet werden, um einem Schaltungsentwickler zu ermöglichen, einen gewünschten Schaltungsentwurf unter Verwendung eines beliebigen geeigneten Formats bereitzustellen. Die Entwurfs- und Einschränkungseingabewerkzeuge 464 können zum Beispiel Werkzeuge beinhalten, die dem Schaltungsentwickler ermöglichen, einen Schaltungsentwurf unter Verwendung von Wahrheitstabellen einzugeben. Wahrheitstabellen können unter Verwendung von Textdateien oder Timing-Diagrammen spezifiziert werden und können aus einer Bibliothek importiert werden. Die Wahrheitstabellen-Schaltungsentwurfs- und -Einschränkungseingabe kann für einen Teil einer großen Schaltung oder für eine gesamte Schaltung verwendet werden.
  • Als ein anderes Beispiel können die Entwurfs- und Einschränkungseingabewerkzeuge 464 ein schematisches Erfassungswerkzeug beinhalten. Ein schematisches Erfassungswerkzeug kann dem Schaltungsentwickler ermöglichen, integrierte Schaltungsentwürfe aus Bestandteilen, wie etwa Logikgattern und Gruppen von Logikgattern, visuell zu konstruieren. Bibliotheken mit vorbestehenden integrierten Schaltungsentwürfen können verwendet werden, um zu ermöglichen, dass ein gewünschter Teil eines Entwurfs mit den schematischen Erfassungswerkzeugen importiert wird.
  • Falls gewünscht, können die Entwurfs- und Einschränkungseingabewerkzeuge 464 dem Schaltungsentwickler ermöglichen, dem Schaltungsentwurfssystem 300 einen Schaltungsentwurf-Softwareanwendungscode unter Verwendung einer Hardwarebeschreibungssprache, wie etwa Verilog HDL (Verilog Hardware Description Language - Verilog-Hardwarebeschreibungssprache), VHDL (Very High Speed Integrated Circuit Hardware Description Language - sehr schnelle Hardwarebeschreibungssprache für integrierte Schaltungen), SystemVerilog, oder einer Schaltungsbeschreibungssprache höherer Ebene, wie etwa OpenCL, Systeme, C/C++, um nur einige zu nennen, bereitzustellen. Blöcke von Code können aus benutzerverwalteten oder kommerziellen Bibliotheken importiert werden, falls gewünscht.
  • Nachdem der Entwurf unter Verwendung der Entwurfs- und Einschränkungseingabewerkzeuge 464 eingegeben wurde, können Verhaltenssimulationswerkzeuge 472 verwendet werden, um die Funktionalität des Schaltungsentwurfs zu simulieren. Falls die Funktionalität des Entwurfs unvollständig oder fehlerhaft ist, kann der Schaltungsentwickler Änderungen am Schaltungsentwurf unter Verwendung der Entwurfs- und Einschränkungseingabewerkzeuge 464 vornehmen. Der funktionelle Betrieb des neuen Schaltungsentwurfs kann unter Verwendung der Verhaltenssimulationswerkzeuge 472 verifiziert werden, bevor Syntheseoperationen unter Verwendung der Werkzeuge 474 durchgeführt wurden. Simulationswerkzeuge, wie etwa die Verhaltenssimulationswerkzeuge 472, können auch bei anderen Stufen im Entwurfsfluss verwendet werden, falls gewünscht (z. B. nach der Logiksynthese). Die Ausgabe der Verhaltenssimulationswerkzeuge 472 kann dem Schaltungsentwickler in einem beliebigen geeigneten Format (z. B. Wahrheitstabellen, Timing-Diagrammen usw.) bereitgestellt werden.
  • Sobald der funktionelle Betrieb des Schaltungsentwurfs als zufriedenstellend bestimmt wurde, können die Logiksynthese- und Optimierungswerkzeuge 474 eine Netzliste auf Gate-Ebene des Schaltungsentwurfs zum Beispiel unter Verwendung von Gates aus einer speziellen Bibliothek erzeugen, die sich auf einen angezielten Prozess bezieht, der durch eine Fertigungsanlage unterstützt wird, die zum Produzieren der integrierten Schaltung ausgewählt wurde. Alternativ dazu können die Logiksynthese- und Optimierungswerkzeuge 474 eine Netzliste auf Gate-Ebene des Schaltungsentwurfs unter Verwendung von Gates einer angezielten programmierbaren Logikschaltung erzeugen.
  • Die Logiksynthese- und Optimierungswerkzeuge 474 können den Entwurf optimieren, indem geeignete Auswahlen von Hardware zum Implementieren unterschiedlicher Logikfunktionen im Schaltungsentwurf basierend auf den Schaltungsentwurfsdaten und Einschränkungsdaten, die durch den Logikentwickler unter Verwendung der Werkzeuge 464 eingegeben werden, vorgenommen werden. Als ein Beispiel können die Logiksynthese- und Optimierungswerkzeuge 474 eine Mehrebenen-Logikoptimierungs- und Technologieabbildung basierend auf der Länge eines Kombinationspfades zwischen Registern im Schaltungsentwurf und entsprechenden Timing-Einschränkungen, die durch den Logikentwickler unter Verwendung der Werkzeuge 464 eingegeben wurden, durchführen.
  • Nach der Logiksynthese und der Optimierung unter Verwendung der Werkzeuge 474 kann das Schaltungsentwurfssystem Werkzeuge verwenden, wie etwa Platzierungs-, Routing- und physische Synthesewerkzeuge 476, um physische Entwurfsschritte (Layoutsyntheseoperationen) durchzuführen. Die Werkzeuge 476 können verwendet werden, um zu bestimmen, wo jedes Gate der Netzliste auf Gate-Ebene, die durch die Werkzeuge 474 produziert wird, zu platzieren ist. Falls zum Beispiel zwei Zähler miteinander interagieren, können die Werkzeuge 476 diese Zähler in angrenzenden Gebieten platzieren, um Interconnect-Verzögerungen zu reduzieren oder um Timing-Anforderungen, die die maximal zugelassene Interconnect-Verzögerung spezifizieren, zu erfüllen. Die Werkzeuge 476 erzeugen ordnungsgemäße und effiziente Implementierungen von Schaltungsentwürfen für eine beliebige angezielte integrierte Schaltung (z. B. für eine gegebene programmierbare integrierte Schaltung, wie etwa ein feldprogrammierbares Gate-Array (FPGA)).
  • Werkzeuge, wie etwa die Werkzeuge 474 und 476, können Teil einer Compiler-Suite sein (z. B. Teil einer Suite von Compiler-Werkzeugen, die durch einen Anbieter für programmierbare Logikeinrichtungen bereitgestellt werden). Bei gewissen Ausführungsformen können Werkzeuge, wie etwa die Werkzeuge 474, 476 und 478, auch Timing-Analysewerkzeuge, wie etwa Timing-Schätzer, beinhalten. Dies ermöglicht den Werkzeugen 474 und 476, Leistungsfähigkeitsanforderungen (z. B. Timing-Anforderungen) zu erfüllen, bevor die integrierte Schaltung tatsächlich produziert wird.
  • Nachdem eine Implementierung des gewünschten Schaltungsentwurfs unter Verwendung der Werkzeuge 476 erzeugt wurde, kann die Implementierung des Entwurfs unter Verwendung von Analysewerkzeugen 478 analysiert und getestet werden. Die Analysewerkzeuge 478 können zum Beispiel Timing-Analysewerkzeuge, Leistung-Analysewerkzeuge oder formelle Verifizierungswerkzeuge beinhalten, um nur einige zu nennen.
  • Nachdem zufriedenstellende Optimierungsoperationen unter Verwendung der Werkzeuge 320 abgeschlossen wurden, und in Abhängigkeit von der angezielten integrierten Schaltungstechnologie, können die Werkzeuge 320 eine Layoutbeschreibung auf Maskenebene oder Konfigurationsdaten zum Programmieren des Soft-Logikschaltkreises (z. B. zum Programmieren der rekonfigurierbaren Speicherassistenzschaltungen) erzeugen.
  • 5 ist ein Flussdiagramm veranschaulichender Schritte zum Verwenden der Werkzeuge 320, um einen Entwurf für ein integriertes Schaltungssystem der in den 1 und 2 dargestellten Art zu kompilieren. Bei Schritt 600 können die Werkzeuge 320 einen Quellcode erhalten. Der Quellcode wird manchmal als eine Entwurfs- oder Verhaltensspezifikation bezeichnet, die in Form eines Softwareanwendungsquellcodes (z. B. C-Codes, C++-Codes, SystemC-Codes, OpenCL-Codes usw.) bereitgestellt wird. Der Quellcode kann in die Entwurfs- und Einschränkungseingabewerkzeuge 464 von 5 eingegeben werden.
  • Bei Schritt 602 können die Werkzeuge 320 den Quellcode in eine entsprechende Objektdatei umwandeln und die Objektdatei mit Laufzeitbibliotheksdateien kombinieren, um eine ausführbare Datei (manchmal als eine „ausführbare Binärdatei“ bezeichnet) zu erzeugen. Die ausführbare Datei kann Programmanweisungen beinhalten, die eine gegebene CPU oder einen gegebenen Prozessor anleiten, eine Reihe von Aufgaben durchzuführen.
  • Bei Schritt 604 können die Werkzeuge 320 Möglichkeiten zur Speicherassistenz identifizieren, indem Kandidatenspeicherdienstmuster im Quellcode detektiert werden. Es soll zum Beispiel ein Szenario angenommen werden, in dem der Quellcode eine Videoanwendung mit einem definierten Stride-Muster implementiert, das zweidimensionale (2D) Blöcke von 20x10 Pixeln aus einem High-Definition-Bild (z. B. einem Videoeinzelbild mit 1920x1080 Pixeln) greift. Die Werkzeuge 320 können dieses spezielle 2D-Stride-Muster als einen potenziellen Kandidaten zur Speicherdienstbeschleunigung identifizieren.
  • Bei Schritt 606 können die Werkzeuge 320 das bei Schritt 604 identifizierte Kandidatenspeicherdienstmuster mit einer entsprechenden Speicherdienstvorlage (z. B. einer Speicherdienstvorlage mit einem ähnlichen Verhalten wie das Kandidaten-Stride-Muster) in einer Bibliothek mit vorbestimmten Speicherdienstvorlagen abgleichen. Bei dem Videoanwendungsbeispiel können die Werkzeuge 320 eine Speichervorabrufvorlage mit einer 2D-Stride-Fähigkeit aus der Bibliothek mit vorbestimmten Speicherdienstvorlagen auswählen.
  • Bei Schritt 608 können die Werkzeuge 320 Schlüsselparameter aus dem Quellcode extrahieren und die ausgewählte Speicherdienstvorlage parametrisieren. Bei dem Videoanwendungsbeispiel können die Werkzeuge 320 Grenzen und die Schrittgröße, die mit dem 2D-Stride-Muster assoziiert sind, identifizieren. Falls gewünscht, kann dieser Extraktionsschritt gleichzeitig mit dem Schritt 604 vor dem Schritt 606 durchgeführt werden. Die ausgewählte Speichervorabrufvorlage kann dann unter Verwendung der identifizierten Grenz- und Schrittgrößeninformationen (als ein Beispiel) parametrisiert werden. Dies ist lediglich veranschaulichend. Unterschiedliche Speicherdienstvorlagen können unter Verwendung verschiedener Arten von Parametern und einer beliebigen geeigneten Anzahl von extrahierten Parametern konfiguriert werden. Die Speicherdienstvorlagen können basierend auf den Anwendungsnutzungsprofilen dynamisch rekonfiguriert werden.
  • Bei Schritt 610 können die Werkzeuge 320 die parametrisierte Speicherdienstvorlage verwenden, um eine entsprechende Konfigurationsdatei zum Konfigurieren einer Speicherassistenzschaltung zu erzeugen. Die Konfigurationsdatei (manchmal als ein Konfigurationsbitstrom bezeichnet) kann anwendungsspezifische Speicheranforderungen beinhalten, wie etwa die erforderliche Speichergröße und Leistungsfähigkeitseinschränkungen, die diktieren würden, was für ein Speicher-Cache-Level benötigt wird. Eine Speicherassistenzschaltung, die unter Verwendung der auf diese Weise erzeugten Konfigurationsdatei konfiguriert wird, kann dabei helfen, dass die CPU eine beliebige Speicherinstandhaltungsoperation, die durch die aktuelle Anwendung benötigt wird, beschleunigt, und kann erhebliche Leistungsfähigkeitsvorteile erbringen.
  • Bei Schritt 612 können die bei Schritt 602 erzeugte ausführbare Datei und die bei Schritt 610 erzeugte Konfigurationsdatei optional kombiniert werden, um eine kompilierte Anwendungsdatei zu bilden. Dies bezeichnet das Ende der Kompilierzeitoperationen.
  • Das oben beschriebene Beispiel der Videoanwendung, das unter Verwendung einer 2D-Speichervorabrufvorlage beschleunigt werden kann, ist lediglich veranschaulichend. Die Bibliothek mit vorbestimmten Speicherdienstvorlagen kann Vorlagen einer Vielfalt potenzieller Speicherdienstarten beinhalten. Beispielsweise kann die 2D-Speichervorabrufoperation, die sequenzielle 2D-Blöcke von Daten greift, eine Unterkategorie einer breiteren „Speicherverschiebungs“-Kategorie sein. Eine Zeigerverfolgungsoperation ist ein anderes Beispiel für eine Unterkategorie der Speicherverschiebungsdienste und kann das Identifizieren von Speicherorten, die zum Zeigen zu Datenorten verwendet werden, das Extrahieren von Informationen aus diesen Orten und dann das Vorabrufen der entsprechenden Daten beinhalten. Allgemein können Speicherverschiebungsdienste Operationen enthalten, die das Verschieben von Speicherdaten zwischen Prozessorspeicherhierarchien (z. B. zwischen der CPU und den unterschiedlichen Leveln eines Cache-Speichers), das Verschieben von Speicherdaten zwischen der CPU und einem externen Speicher, zwischen der CPI und Festplatten, zwischen der CPU und einer Netzwerkspeicherung, zwischen der CPU und einem assoziierten Eingabe-Ausgabe-Schaltkreis usw. beinhalten. Die Bibliothek mit vorbestimmten Speicherdienstvorlagen kann eine beliebige geeignete Anzahl und Art von Speicherverschiebungsvorlagen beinhalten.
  • Eine andere Kategorie von Speicherdiensten ist „Speicherbarriere“-Operationen, die allgemein das Überwachen und/oder Steuern eines Zugriffs auf spezielle Speicherorte beinhalten. Ein Beispiel für einen Speicherbarrieredienst ist Anwendungsisolation, die verhindert, dass eine Anwendung auf einen Speicher und auf Ressourcen zugreift, die anderen Anwendungen zugewiesen sind. Ein anderes Beispiel für einen Speicherbarrieredienst ist Anwendungsspeicherschutz, der verhindert, dass andere Anwendungen auf einen geschützten Speicherraum einer Anwendung zugreifen. Die Bibliothek mit vorbestimmten Speicherdienstvorlagen kann eine beliebige geeignete Anzahl und Art von Speicherbarrierevorlagen beinhalten.
  • Eine andere Speicherdienstkategorie kann „Speicherwartung“-Operationen sein, die allgemein das Regeln der Richtlinien einer Speicherhierarchie eines Prozessors beinhalten. Ein Beispiel für einen Speicherwartungsdienst ist das Setzen einer Cache-Ersetzungsrichtlinie, die die Zuweisung von Daten in der Speicherhierarchie bestimmt und die Datenpriorität bestimmt, wenn Konflikte auftreten. Ein anderes Beispiel für einen Speicherwartungsdienst ist das Setzen einer Scrubbing-Richtlinie, die die Notfallsicherheitsmaßnahmen zum Löschen aller Daten an einem speziellen Speicherort bestimmt. Die Bibliothek mit vorbestimmten Speicherdienstvorlagen kann eine beliebige geeignete Anzahl und Art von Speicherwartungsvorlagen beinhalten.
  • Noch eine andere Speicherdienstkategorie kann „Speicherberechnungs“-Operationen sein, die allgemein das Durchführen von (arithmetischen) Berechnungen an Daten, die auf dem Cache-Speicher gespeichert sind, oder Daten, die in den Cache-Speicher eingehen, beinhalten. Beispiele für Speicherberechnungsoperationen beinhalten das Berechnen des Mittelwerts für eine Gruppe von Datenblöcken, das Durchführen eines Abgleichalgorithmus an einer Gruppe von Datenblöcken (z. B. durch Abgleichen der Daten mit einem vorbestimmten Muster), das Berechnen von Schätzungen aus einer Gruppe von Datenblöcken (z. B. durch das Durchführen einer Datenextrapolation oder Regressionsanalyse) usw. Die Bibliothek mit vorbestimmten Speicherdienstvorlagen kann eine beliebige geeignete Anzahl und Art von Speicherberechnungsvorlagen beinhalten.
  • Die verschiedenen Arten oder Kategorien von oben beschriebenen Speicherdienstoperationen (z. B. Speicherverschiebung, Speicherbarriere, Speicherwartung und Speicherberechnung) sind lediglich veranschaulichend und sollen nicht den Schutzumfang der vorliegenden Ausführungsformen beschränken. Die Bibliothek mit vorbestimmten Speicherdienstvorlagen kann Vorlagen für eine beliebige Anzahl von Speicherdienstkategorien und -unterkategorien beinhalten. Die Bibliothek kann zum Beispiel Speicherbarrierevorlagen beinhalten, wie etwa eine Anwendungsisolationsvorlage zum Ermöglichen einer ersten Art von Speicherbarriereoperation und eine Anwendungsspeicherschutzvorlage zum Ermöglichen einer zweiten Art von Speicherbarriereoperation. Als ein anderes Beispiel kann die Bibliothek ferner Speicherwartungsvorlagen beinhalten, wie etwa eine Cache-Ersetzungsvorlage zum Ermöglichen einer ersten Art von Speicherwartungsoperation und eine Scrubbing-Vorlage zum Ermöglichen einer zweiten Art von Speicherwartungsoperation. Als noch ein anderes Beispiel kann die Bibliothek ferner Speicherberechnungsvorlagen beinhalten, wie etwa eine Datenmittelungsvorlage, eine Datenabgleichvorlage, eine Datenschätzungsvorlage usw. Eine beliebige Speicherassistenzschaltung auf dem System 92 kann dazu programmiert sein, eine oder mehrere Kategorien von Speicherdiensten durchzuführen.
  • Allgemein kann der Prozess von 6 verwendet werden, um eine ausführbare Datei zum Ausführen einer beliebigen Anzahl von Anwendungen zu erzeugen und eine Konfigurationsdatei zum Programmieren einer beliebigen Anzahl von rekonfigurierbaren Speicherassistenzschaltungen zu erzeugen, die zum Durchführen und Beschleunigen der durch die Anwendungen erforderlichen Speicherdienste verwendet werden.
  • 7 ist ein Flussdiagramm von veranschaulichenden Schritten zum Laden einer Anwendung und zum selektiven Programmieren der konfigurierbaren Speicherassistenzschaltungen zur Laufzeit gemäß einer Ausführungsform. Bei Schritt 700 kann ein Betriebssystem (OS) zum Ausführen eines Systems, wie etwa des Systems 92 von 1 oder 2, eine Anwendungsstartanforderung empfangen. Ein Benutzer kann zum Beispiel einen Anwendungsstart (z. B. durch das Klicken eines Desktop-Icons) initiieren.
  • Sobald die Anwendung initiiert ist, kann das Betriebssystem die Anwendung abfragen, um bei Schritt 702 Informationen zu sammeln. Das Betriebssystem kann zum Beispiel Anwendungsressourcenanforderungen sammeln, wie etwa Anwendungsspeicheranforderungen, Eingabe-Ausgabe-Ressourcenanforderungen und Speicherassistenzschaltung-Ressourcenanforderungen.
  • Bei Schritt 704 kann das Betriebssystem die Anwendungsressourcenanforderungen (d. h. Speicherassistenzschaltung-Ressourcenanforderungen) zu einem Speicherassistenzscheduler weiterleiten. Der Speicherassistenzscheduler kann manchmal als Teil des Betriebssystems angesehen werden und kann dazu ausgelegt sein, eine Vielfalt von Operationen durchzuführen, die dabei helfen, die Anwendungsressourcenanforderungen zu einer oder mehreren Speicherassistenzschaltungen im System 92 abzubilden.
  • Bei Schritt 706 kann der Speicherassistenzscheduler die Anwendungsressourcenanforderungen überprüfen, um zu bestimmen, wie viele Speicherassistenzschaltungen benötigt werden (z. B. wie viele programmierbare Logikelemente benötigt werden, um die benötigte Speicherdienstbeschleunigung durchzuführen), um den benötigten Ort jeder Speicherassistenzschaltung zu bestimmen (d. h. ob jede Speicherassistenzschaltung mit einem L1-, L2- oder L3-Cache assoziiert sein sollte) usw.
  • Bei Schritt 708 kann der Speicherassistenzscheduler die bestehenden Hardwareressourcen im System 92 beurteilen, um zu bestimmen, welche Arten von Speicherassistenzschaltungen verfügbar sind (d. h. ob eine L1-Cache-Speicherassistenzschaltung vorhanden ist und wie viele Logikelemente sie anbietet, ob eine L2-Cache-Speicherassistenzschaltung vorhanden ist und wie viele Logikelemente sie anbietet oder ob eine L3-Cache-Speicherassistenzschaltung vorhanden ist und wie viele Logikelemente sie anbietet), und um den Status jeder verfügbaren Speicherassistenzschaltung zu bestimmen (d. h. ob jede Speicherassistenzschaltung gegenwärtig durch eine andere Anwendung verwendet wird und welche Anwendungen schon auf diesen „beschäftigten“ Speicherassistenzschaltungen ausgeführt werden). Der Ausdruck „verfügbar“ bedeutet, dass eine benötigte Speicherassistenzschaltung physisch vorhanden ist, aber eine verfügbare Speicherassistenzschaltung kann entweder beschäftigt und eine oder mehrere andere Anwendungen versorgend sein oder inaktiv (d. h. gegenwärtig keine Anwendung versorgend) sein. Der Ausdruck „nicht verfügbar“ bedeutet, dass das System 92 nicht die notwendige Hardware aufweist, um die erforderlichen Anwendungsressourcenanforderungen zu erfüllen.
  • Bei Schritt 710 kann der Speicherassistenzscheduler das Betriebssystem darüber benachrichtigen, ob die durch die gegenwärtig initiierende Anwendung benötigten Ressourcen verfügbar sind. Falls die erforderlichen Anwendungsressourcen tatsächlich verfügbar sind, kann der Speicherassistenzscheduler ferner Informationen darüber bereitstellen, ob die verfügbare(n) Speicherassistenzschaltung(en) gegenwärtig durch eine oder mehrere andere Anwendungen verwendet wird (werden).
  • Als Reaktion auf das Empfangen der Verfügbarkeits- und Statusinformationen vom Speicherassistenzscheduler kann das Betriebssystem entweder (1) die Anwendung mit den verfügbaren und zuvor inaktiven Speicherassistenzschaltungen starten, (2) die bestehenden Anwendungen neu priorisieren, um eine oder mehrere beschäftigte Speicherassistenzschaltungen verfügbar zu machen, oder (3) nur die Anwendung ohne die erforderlichen Speicherassistenzschaltungen starten. Das Starten der Anwendung mit allen erforderlichen Speicherassistenzressourcen wird die optimale Leistungsfähigkeit anbieten. Das Starten der Anwendung ohne die erforderlichen Speicherassistenzressourcen wird bewirken, dass die Anwendung eine relativ niedrige Leistungsfähigkeit aufweist.
  • Bei gewissen Ausführungsformen kann das System 92 dazu ausgelegt sein, mehrere Anwendungen parallel auszuführen. Bei derartigen Szenarios ist es möglich, dass sich die gegenwärtig ausgeführten Anwendungen um die Speicherassistenzschaltungsressourcen, die auf dem System 92 verfügbar sind, bewerben. Um einen potenziellen Konflikt zu vermeiden, kann das Betriebssystem die durch jede Anwendung angeforderten Speicherdienste priorisieren und zu entsprechenden Speicherassistenzschaltungsressourcen abbilden.
  • 8 ist ein Diagramm des Systems 92, das zum Ausführen mehrerer Anwendungen verwendet werden kann, die jeweils Speicherdienste nutzen, die zu unterschiedlichen konfigurierbaren Speicherassistenzschaltungen abgebildet sind, gemäß einer Ausführungsform. Wie in 8 dargestellt, kann das System 92 gleichzeitig mindestens eine Sicherheitseingrenzungsanwendung, eine Videosuchanwendung und eine Datenbankanwendung unterstützen. Die Sicherheitseingrenzungsanwendung kann einen L1-Speicherbarrieredienst erfordern. Die Videosuchanwendung kann einen L1-Speicherberechnungsdienst und einen L2-Speichervorabrufdienst erfordern. Die Datenbankanwendung kann einen L1-Speicherberechnungsdienst, einen L2-Speichervorabrufdienst und einen L3-Speicherwartungsdienst erfordern.
  • Ein Speicherassistenzscheduler, wie etwa der Speicherassistenzscheduler 800, kann dazu ausgelegt sein, die mit jeder Anwendung assoziierten Speicherdienstanforderungen zu entsprechenden verfügbaren Speicherassistenzhardwareressourcen im System 92 abzubilden. In dem Beispiel von 8 kann der Speicherassistenzscheduler 800 den durch die Sicherheitseingrenzungsanwendung angeforderten L1-Speicherbarrieredienst zu einer Speicherassistenzschaltung 100A-1 abbilden (wie durch einen Pfeil 810 angegeben). Da sie auf diese Weise konfiguriert ist, kann die Sicherheitseingrenzungsanwendung unter Verwendung der CPU-A ausgeführt werden und die Speicherassistenzschaltung 100A-1 kann eine Anwendungsisolation oder einen Anwendungsspeicherschutz für den L1-Cache 82A-1 durchführen.
  • Der Speicherassistenzscheduler 800 kann ferner den L1-Speicherberechnungsdienst und den L2-Speichervorabrufdienst, die durch die Videosuchanwendung angefordert werden, zu einer Speicherassistenzschaltung 100B-1 (wie durch einen Pfeil 812 angegeben) bzw. einer Speicherassistenzschaltung 100AB-2 (wie durch einen Pfeil 814 angegeben) abbilden. Da sie auf diese Weise konfiguriert ist, kann die Videosuchanwendung unter Verwendung der CPU-B ausgeführt werden und die Speicherassistenzschaltung 100B-1 kann Datenberechnungsoperationen für den L1-Cache 82B-1 durchführen, während die Speicherassistenzschaltung 100AB-2 Speichervorabrufoperationen am L2-Cache 82AB-2 durchführen kann. Der L2-Cache 82AB-2 kann zwischen der CPU-A und der CPU-B gemeinsam genutzt werden.
  • Der Speicherassistenzscheduler 800 kann auch den L1-Speicherberechnungsdienst, den L2-Speichervorabrufdienst und den L3-Speicherwartungsdienst, die durch die Datenbankanwendung angefordert werden, zu einer Speicherassistenzschaltung 100C-1 (wie durch einen Pfeil 816 angegeben), einer Speicherassistenzschaltung 100CD-2 (wie durch einen Pfeil 818 angegeben) bzw. einer Speicherassistenzschaltung 100-3 (wie durch einen Pfeil 820 angegeben) abbilden. Da sie auf diese Weise konfiguriert ist, kann die Datenbankanwendung unter Verwendung der CPU-C ausgeführt werden und die Speicherassistenzschaltung 100C-1 kann Datenberechnungsoperationen für den L1-Cache 82C-1 durchführen, während die Speicherassistenzschaltung 100CD-2 Speichervorabrufoperationen am L2-Cache 82CD-2 durchführen kann und während die Speicherassistenzschaltung 100-3 Cache-Ersetzungs- oder Scrubbing-Richtlinien für den L3-Cache 82-3 setzen kann (als Beispiele). Der L2-Cache 82CD-2 kann zwischen der CPU-C und der CPU-D gemeinsam genutzt werden. Der L3-Cache 82-3 kann zwischen der CPU-A, der CPU-B, der CPU-C und der CPU-D gemeinsam genutzt werden.
  • Das Beispiel von 8, in dem das System 92 gleichzeitig drei unterschiedliche Anwendungen unterstützt, die jeweils ihren eigenen Satz von angeforderten Speicherdiensten aufweisen, die unter Verwendung entsprechender Speicherassistenzschaltungen bei verschiedenen Leveln der Speicherhierarchie beschleunigt werden, ist lediglich veranschaulichend. Falls gewünscht, kann das System 92 auch einen separaten Pool von Speicherassistenzschaltungen beinhalten, die dazu ausgelegt sind, eine oder mehrere CPUs zu versorgen. Mehrere Speicherassistenzschaltungen aus diesem Pool können zum Beispiel effizient zugeordnet werden, um eine einzelne CPU zu versorgen. Allgemein kann das System 92 dazu ausgelegt sein, eine beliebige Anzahl von Anwendungen zu unterstützen, die jeweils einen oder mehrere Speicherdienste anfordern können, die durch verfügbare Speicherassistenzhardwareressourcen im System 92 beschleunigt werden können. Die verschiedenen Speicherassistenzschaltungen, die zum Beschleunigen der erforderlichen Speicherdienste für jede Anwendung verwendet werden, werden unter Verwendung von Konfigurationsdaten programmiert, die unter Verwendung der Werkzeuge 320 erzeugt werden (siehe z. B. den in der 6 dargestellten Prozess, bei dem jeder angeforderte Speicherdienst mit einer entsprechenden Vorlage in der Bibliothek mit vorbestimmten Speicherdienstvorlagen abgeglichen werden kann).
  • Obwohl die Verfahren von Operationen in einer spezifischen Reihenfolge beschrieben wurden, sollte verstanden werden, dass andere Operationen zwischen beschriebenen Operationen durchgeführt werden können, beschriebene Operationen so angepasst werden können, dass sie zu leicht unterschiedlichen Zeiten auftreten, oder beschriebene Operationen in einem System verteilt sein können, das ein Auftreten der Verarbeitungsoperationen mit verschiedenen Intervallen, die mit der Verarbeitung assoziiert sind, gestattet, solange die Verarbeitung der übergelagerten Operationen auf eine gewünschte Weise durchgeführt wird.
  • Das Vorstehende ist lediglich für die Prinzipien dieser Erfindung veranschaulichend und verschiedene Modifikationen können durch Fachleute vorgenommen werden. Die vorstehenden Ausführungsformen können individuell oder in einer beliebigen Kombination implementiert werden.

Claims (24)

  1. System, das Folgendes umfasst: einen Prozessor, der zum Ausführen einer Anwendung verwendet wird; einen Cache-Speicher, der mit dem Prozessor gekoppelt ist, wobei die Anwendung eine Speicherdienstanforderung zu dem Cache-Speicher erstellt; und eine programmierbare Speicherassistenzschaltung, die dazu ausgelegt ist, die Speicherdienstanforderungen für die Anwendung zu beschleunigen.
  2. System nach Anspruch 1, das ferner Folgendes umfasst: einen zusätzlichen Cache-Speicher, der mit dem Prozessor gekoppelt ist, wobei die Anwendung eine zusätzliche Speicherdienstanforderung zu dem zusätzlichen Cache-Speicher erstellt und wobei die Speicherdienstanforderung und die zusätzliche Speicherdienstanforderung unterschiedliche Arten von Speicherdienstanforderungen sind; und eine zusätzliche programmierbare Speicherassistenzschaltung, die dazu ausgelegt ist, die zusätzliche Speicherdienstanforderung für die Anwendung zu beschleunigen.
  3. System nach Anspruch 2, wobei der Cache-Speicher einen Cache eines ersten Levels umfasst und wobei der zusätzliche Cache-Speicher einen Cache eines zweiten Levels umfasst, der sich vom ersten Level unterscheidet.
  4. System nach einem der Ansprüche 1-3, das ferner Folgendes umfasst: einen zusätzlichen Prozessor, der zum Ausführen einer zusätzlichen Anwendung verwendet wird; einen zusätzlichen Cache-Speicher, der mit dem zusätzlichen Prozessor gekoppelt ist, wobei die zusätzliche Anwendung eine zusätzliche Speicherdienstanforderung zu dem zusätzlichen Cache-Speicher erstellt; und eine zusätzliche programmierbare Speicherassistenzschaltung, die dazu ausgelegt ist, die zusätzliche Speicherdienstanforderung für die zusätzliche Anwendung zu beschleunigen.
  5. System nach einem der Ansprüche 1-4, wobei die durch die Anwendung erstellte Speicherdienstanforderung einen Speicherverschiebungsdienst zum Verschieben von Daten vom Cache-Speicher zu einem anderen Ort im System umfasst.
  6. System nach Anspruch 5, wobei der Speicherverschiebungsdienst eine Speichervorabrufoperation zum Abrufen von Datenblöcken mit einer durch die Anwendung bestimmten Größe umfasst.
  7. System nach Anspruch 1, wobei die durch die Anwendung erstellte Speicherdienstanforderung einen Speicherbarrieredienst zum Überwachen und Steuern eines Zugriffs auf den Cache-Speicher umfasst.
  8. System nach Anspruch 7, wobei der Speicherbarrieredienst eine Anwendungsisolationsoperation umfasst, um zu verhindern, dass die Anwendung auf den Cache-Speicher zugreift, der mit anderen Anwendungen assoziiert ist, die auf dem System ausgeführt werden.
  9. System nach Anspruch 1, wobei die durch die Anwendung erstellte Speicherdienstanforderung einen Speicherwartungsdienst zum Regeln von Richtlinien für den Cache-Speicher umfasst.
  10. System nach Anspruch 9, wobei der Speicherwartungsdienst ein Setzen einer Cache-Ersetzungsrichtlinie zum Bestimmen einer Datenpriorität umfasst, wenn Speicherzugriffskonflikte beim Cache-Speicher auftreten.
  11. System nach Anspruch 1, wobei die durch die Anwendung erstellte Speicherdienstanforderung einen Speicherberechnungsdienst zum Durchführen von Berechnungen an Daten umfasst, die beim Cache-Speicher gespeichert sind.
  12. System nach Anspruch 11, wobei der Speicherberechnungsdienst eine Abgleichoperation zum Vergleichen der am Cache-Speicher gespeicherten Daten mit einem vorbestimmten Muster umfasst.
  13. Verfahren zum Implementieren eines Systems, das einen Prozessor beinhaltet, der eine Speicherdienstanforderung zu einem Cache erstellt, wobei das Verfahren Folgendes umfasst: Erhalten eines Quellcodes; Identifizieren von Möglichkeiten zur Speicherassistenz durch das Detektieren eines Kandidatenspeicherdienstmusters im Quellcode; und Verwenden des Kandidatenspeicherdienstmusters, um Konfigurationsdaten zum Programmieren einer Speicherassistenzschaltung im System zu erzeugen, wobei die Speicherassistenzschaltung dazu ausgelegt ist, die Speicherdienstanforderung am Cache zu beschleunigen.
  14. Verfahren nach Anspruch 13, das ferner Folgendes umfasst: Abgleichen des Kandidatenspeicherdienstmusters zu einer ausgewählten Speicherdienstvorlage in einer Bibliothek mit vorbestimmten Speicherdienstvorlagen, wobei die Bibliothek mit vorbestimmten Speicherdienstvorlagen zumindest eine ausgewählte der Folgenden umfasst: eine Speicherverschiebungsdienstvorlage, eine Speicherbarrieredienstvorlage, eine Speicherwartungsdienstvorlage und eine Speicherberechnungsdienstvorlage.
  15. Verfahren nach Anspruch 14, das ferner Folgendes umfasst: Extrahieren von Parametern aus dem Quellcode; Verwenden der extrahierten Parameter, um die ausgewählte Speicherdienstvorlage zu parametrisieren, sodass eine parametrisierte Speicherdienstvorlage erzeugt wird; und Erzeugen der Konfigurationsdaten basierend auf der parametrisierten Speicherdienstvorlage.
  16. Verfahren nach einem der Ansprüche 13-15, das ferner Folgendes umfasst: Verwenden des Quellcodes, um eine ausführbare Datei zu erzeugen, die den Prozessor zur Laufzeit steuert; und Kombinieren der ausführbaren Datei mit den Konfigurationsdaten.
  17. Verfahren zum Betreiben eines Systems mit einer Zentralverarbeitungseinheit (CPU), die mit einem Cache kommuniziert, wobei das Verfahren Folgendes umfasst: Empfangen einer Anwendungsstartanforderung für eine Anwendung; Abfragen der Anwendung, um Anwendungsressourcenanforderungen zu sammeln; Senden der Anwendungsressourcenanforderungen zu einem Speicherassistenzscheduler; Verwenden des Speicherassistenzschedulers, um die Anwendungsressourcenanforderungen zu entsprechenden Speicherassistenzschaltungen auf dem System abzubilden, wobei die Speicherassistenzschaltungen dazu ausgelegt sind, Speicherdienstanforderungen für die Anwendung beim Cache zu beschleunigen; und Verwenden der CPU, um die Anwendung auszuführen.
  18. Verfahren nach Anspruch 17, das ferner Folgendes umfasst: Überprüfen, unter Verwendung des Speicherassistenzschedulers, der Anwendungsressourcenanforderungen, um zu bestimmen, wie viele Speicherassistenzschaltungen benötigt werden, und um den benötigten Ort für jede der Speicherassistenzschaltungen im System zu bestimmen.
  19. Verfahren nach Anspruch 18, das ferner Folgendes umfasst: Beurteilen, unter Verwendung des Speicherassistenzschedulers, von bestehenden Hardwareressourcen auf dem System, um zu bestimmen, welche Arten von Speicherassistenzschaltungen physisch vorhanden sind, und um zu bestimmen, ob die physisch vorhandenen Speicherassistenzschaltungen durch eine andere Anwendung verwendet werden.
  20. Verfahren nach Anspruch 19, das ferner Folgendes umfasst: Neupriorisieren bestehender Anwendungen, die auf dem System ausgeführt werden, um mindestens eine Speicherassistenzschaltung, die gegenwärtig durch eine der bestehenden Anwendungen verwendet wird, verfügbar zu machen, um dabei zu helfen, dass die Anwendungsressourcenanforderungen der Anwendung erfüllt werden.
  21. System mit einer Zentralverarbeitungseinheit (CPU), die mit einem Cache kommuniziert, das Folgendes umfasst: Mittel zum Empfangen einer Anwendungsstartanforderung für eine Anwendung; Mittel zum Abfragen der Anwendung, um Anwendungsressourcenanforderungen zu sammeln; Mittel zum Senden der Anwendungsressourcenanforderungen zu einem Speicherassistenzscheduler; Mittel zum Verwenden des Speicherassistenzschedulers, um die Anwendungsressourcenanforderungen zu entsprechenden Speicherassistenzschaltungen auf dem System abzubilden, wobei die Speicherassistenzschaltungen dazu ausgelegt sind, Speicherdienstanforderungen für die Anwendung beim Cache zu beschleunigen; und Mittel zum Verwenden der CPU, um die Anwendung auszuführen.
  22. System nach Anspruch 21, das ferner Folgendes umfasst: Verwenden des Speicherassistenzschedulers, um die Anwendungsressourcenanforderungen zu überprüfen, um zu bestimmen, wie viele Speicherassistenzschaltungen benötigt werden, und um den benötigten Ort für jede der Speicherassistenzschaltungen im System zu bestimmen.
  23. System nach Anspruch 22, das ferner Folgendes umfasst: Verwenden des Speicherassistenzschedulers, um die bestehenden Hardwareressourcen auf dem System zu beurteilen, um zu bestimmen, welche Arten von Speicherassistenzschaltungen physisch vorhanden sind, und um zu bestimmen, ob die physisch vorhandenen Speicherassistenzschaltungen durch eine andere Anwendung verwendet werden.
  24. System nach Anspruch 23, das ferner Folgendes umfasst: Mittel zum Neupriorisieren bestehender Anwendungen, die auf dem System ausgeführt werden, um mindestens eine Speicherassistenzschaltung, die gegenwärtig durch eine der bestehenden Anwendungen verwendet wird, verfügbar zu machen, um dabei zu helfen, dass die Anwendungsressourcenanforderungen der Anwendung erfüllt werden.
DE102019117226.8A 2018-06-26 2019-06-26 Schaltkreis mit adaptiven speicherassistenzfähigkeiten Pending DE102019117226A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/019,338 US11500674B2 (en) 2018-06-26 2018-06-26 Circuitry with adaptive memory assistance capabilities
US16/019,338 2018-06-26

Publications (1)

Publication Number Publication Date
DE102019117226A1 true DE102019117226A1 (de) 2020-01-02

Family

ID=65229569

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102019117226.8A Pending DE102019117226A1 (de) 2018-06-26 2019-06-26 Schaltkreis mit adaptiven speicherassistenzfähigkeiten

Country Status (2)

Country Link
US (1) US11500674B2 (de)
DE (1) DE102019117226A1 (de)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102429429B1 (ko) * 2017-03-24 2022-08-04 삼성전자주식회사 전자 장치 및 그 동작방법
WO2020231196A1 (en) * 2019-05-14 2020-11-19 Samsung Electronics Co., Ltd. Method and system for predicting and optimizing resource utilization of ai applications in an embedded computing system
US10891414B2 (en) 2019-05-23 2021-01-12 Xilinx, Inc. Hardware-software design flow for heterogeneous and programmable devices
US10891132B2 (en) 2019-05-23 2021-01-12 Xilinx, Inc. Flow convergence during hardware-software design for heterogeneous and programmable devices
US11188312B2 (en) * 2019-05-23 2021-11-30 Xilinx, Inc. Hardware-software design flow with high-level synthesis for heterogeneous and programmable devices

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6078338A (en) 1998-03-11 2000-06-20 Compaq Computer Corporation Accelerated graphics port programmable memory access arbiter
US6553411B1 (en) 1999-05-18 2003-04-22 International Business Machines Corporation System and method for cache acceleration
US7444495B1 (en) 2002-08-30 2008-10-28 Hewlett-Packard Development Company, L.P. Processor and programmable logic computing arrangement
US7337265B2 (en) 2003-03-28 2008-02-26 Em Photonics, Inc. Organization of cache memory for hardware acceleration of the finite-difference time-domain method
US8117137B2 (en) 2007-04-19 2012-02-14 Microsoft Corporation Field-programmable gate array based accelerator system
US9378003B1 (en) * 2009-07-23 2016-06-28 Xilinx, Inc. Compiler directed cache coherence for many caches generated from high-level language source code
US9182912B2 (en) 2011-08-03 2015-11-10 Avago Technologies General Ip (Singapore) Pte. Ltd. Method to allow storage cache acceleration when the slow tier is on independent controller
US10200493B2 (en) * 2011-10-17 2019-02-05 Microsoft Technology Licensing, Llc High-density multi-tenant distributed cache as a service
US9477610B2 (en) * 2011-12-23 2016-10-25 Intel Corporation Address range priority mechanism
US9256369B2 (en) 2012-04-18 2016-02-09 Samsung Electronics Co., Ltd. Programmable memory controller
US9600417B2 (en) * 2015-04-29 2017-03-21 Google Inc. Data caching

Also Published As

Publication number Publication date
US11500674B2 (en) 2022-11-15
US20190042306A1 (en) 2019-02-07

Similar Documents

Publication Publication Date Title
DE102019117226A1 (de) Schaltkreis mit adaptiven speicherassistenzfähigkeiten
DE60318086T2 (de) System und methode zur reduzierung von leitungsverzögerung oder überlastung bei der synthese von hardware-solvern
US8860458B2 (en) Integrated circuits with logic regions having input and output bypass paths for accessing registers
US10318686B2 (en) Methods for reducing delay on integrated circuits by identifying candidate placement locations in a leveled graph
US9026978B1 (en) Reverse interface logic model for optimizing physical hierarchy under full chip constraint
DE112012005320T5 (de) Multicore-Prozessor mit intern integriertem entscheidungsbasierten Selbsttest
US11361133B2 (en) Method of reporting circuit performance for high-level synthesis
US8719752B1 (en) Hierarchical crosstalk noise analysis model generation
CN108140067B (zh) 用于电路设计优化的方法和系统
DE102020115968A1 (de) Systeme und verfahren für multi-bit-speicher mit eingebetteter logik
US9183335B2 (en) Dynamic power driven clock tree synthesis (CTS)
US20230342531A1 (en) Methods and apparatus for profile-guided optimization of integrated circuits
US20220327271A1 (en) Integrated circuit with peek and poke protection circuitry for multi-tenant usage model
US9047434B2 (en) Clustering for processing of circuit design data
US9824172B1 (en) Performance of circuitry generated using high-level synthesis
DE102022133809A1 (de) Verfahren, systeme, herstellungsartikel und einrichtungen zur identifizierung von codesemantik
US9710584B1 (en) Performance of circuitry generated using high-level synthesis
US7318211B2 (en) Method for physical placement of an integrated circuit based on timing constraints
Tan et al. Verilog hdl simulator technology: a survey
KR102038736B1 (ko) 네트리스트 추상화
US9626218B1 (en) Repartitioning and reordering of multiple threads into subsets based on possible access conflict, for sequential access to groups of memory banks in a shared memory
Beckhoff et al. Design tools for implementing self-aware and fault-tolerant systems on FPGAs
US10152566B1 (en) Constraint based bit-stream compression in hardware for programmable devices
DE102022104024A1 (de) Techniken zum konfigurieren von parallelprozessoren für verschiedene anwendungsbereiche
US10839118B1 (en) Optimization-aware incremental synthesis