Method and apparatus for coherent device initialization and access

A method and apparatus for enabling usage of an accelerator device in a processor socket is herein described. A set of inter-processor messages is utilized to initialize a configuration/memory space of the accelerator device. As an example, a first set of inter-processor interrupts (IPIs) is sent to indicate a base address of a memory space and a second set of IPIs is sent to indicate a size of the memory space. Furthermore, similar methods and apparatus' are herein described for dynamic reconfiguration of an accelerator device in a processor socket.

FIELD

This invention relates to the field of computer systems and, in particular, to accelerator devices in computer systems.

BACKGROUND

Advances in semi-conductor processing and logic design have permitted an increase in the amount of logic that may be present on integrated circuit devices. As a result, computer system configurations have evolved from a single or multiple integrated circuits in a system to multiple cores and multiple logical processors present on individual integrated circuits. In addition, computer systems have evolved to encompass numerous different functions, such as traditional computing systems, media storage systems, entertainment centers, audio playback, video playback, servers, etc.

As a result, the number of input/output devices to be included in computer systems have also grown exponentially. Often, to support functions that may provide too much of a load for processors in the computer system or are targeted at providing functions that a processor architecture is not fundamentally designed for, an accelerator device may be included in the computer system. The most common example of an accelerator is a graphics accelerator, which provides processing power to perform graphic and display computations. However, an accelerator may include any logic to aid a processor in execution. Other examples may include, a math accelerator, a matrix inversion accelerator, a video compression accelerator, a memory access accelerator, and a network accelerator.

Yet, when a single accelerator is included in a system, that specific accelerator is limited to its default intended use. Furthermore, these accelerators are often located “below” a chipset, i.e. off of an memory controller hub or interconnect controller hub through an Input/Output (I/O) bus, such as Peripheral Component Interconnect (PCI) or PCI Express. As a result, these accelerators are commonly initialized through predefined I/O bus protocols and initialization procedures. However, memory access latencies are much longer for a device sitting off an I/O bus as compared to a processor in socket.

DETAILED DESCRIPTION

In the following description, numerous specific details are set forth such as examples of specific accelerators, specific accelerator implementation logic, specific inter-processor messages, specific memory mapping/addressing techniques etc. in order to provide a thorough understanding of the present invention. It will be apparent, however, to one skilled in the art that these specific details need not be employed to practice the present invention. In other instances, well known components or methods, such as accelerator architecture/design, address translation, device initialization code/commands, and specific operational details of computer systems, have not been described in detail in order to avoid unnecessarily obscuring the present invention.

The method and apparatus described herein are for enabling usage of an accelerator in a processor socket. Specifically, enabling usage of an accelerator is primarily discussed in reference to a multi-processor computer system capable of sending and receiving inter-processor interrupts. However, the methods and apparatus described herein are not so limited, as they may be implemented on or in association with any integrated circuit device or system, such as cell phones, personal digital assistants, embedded controllers, mobile platforms, desktop platforms, and server platforms, as well as in conjunction with any type of inter-processor communication.

Referring toFIG. 1, an embodiment of a system capable of enabling usage of an accelerator device in a processor socket is illustrated. As depicted, the computer system includes four processor sockets:105,110,115, and120. Yet, any number of processor sockets may be included in a computer system. Sockets105,110,115, and120are coupled to hub125. In one embodiment, hub125resembles a chipset. Often a chipset comprises two integrated circuit devices, such as a memory controller hub (MCH) and an interconnect controller hub (ICH). In one embodiment Hub125is the MCH coupling processors106,111, and116, as well as accelerator121, to memory130.

As illustrated, sockets105,110,115, and120are coupled to hub125through interconnect126. In one embodiment, interconnect126is a front-side bus (FSB). An example of a common FSB includes a multi-drop parallel bus. Another example includes a serial point-to-point differential bus, such as a Quickpath Architecture. However, interconnect126may include any bus or interconnect, such as a Gunning Transceiver Logic (GTL) bus, a GTL+bus, a double data rate (DDR) bus, a differential bus, a cache coherent bus, a point-to-point bus, a multi-drop bus, a serial bus, a parallel bus, or other known interconnect implementing any known bus protocol.

Processors106,111, and116are coupled in sockets105,110, and115, respectively. Note that coupling of devices in sockets may include any coupling, such as electrical coupling. In one embodiment, a package and corresponding socket technology is utilized. Examples of common socket technologies utilized today include a Land-Grid Array (LGA) package/socket, a Pin Grid Array (PGA) package/socket, and a Ball Grid Array (BGA) package/socket. However, any known apparatus for electrically coupling processors106,111, and116into sockets105,110, and115may be utilized. Furthermore, a socket may refer to any apparatus for electrically coupling a device, such as accelerator121, to a circuit board. Processors106,111, and116are often referred to as physical processors, but may include any style of processing element, such as a microprocessor, an embedded processor, a multi-core processor, a multi-threaded processor, or a signal processor.

Accelerator device121is also electrically coupled in processor socket120. As above, accelerator device121potentially includes packaging to be coupled in a corresponding processor socket. Often, sockets have a specific land, bump, pin, or other contact patterns including specific signal, power, and ground contacts, which couple accordingly to a printed circuit board (PCB). As a result, in one embodiment, the package or contacts of accelerator device121are placed to match the configuration of contacts for socket120. Therefore, instead of an accelerator resembling an I/O add-in card, the accelerator, in one embodiment, may physically resemble a processor, in that the accelerator may include a similar processor pin/bump out, as well as a package matching a corresponding socket configuration. However, a conversion package may be utilized to couple an existing accelerator device in a processor socket.

In one embodiment, an accelerator includes a device or logic to accelerate a processing function. As an example, a processor executing code is able to perform some function, such as matrix inversion, during a number of execution cycles. A matrix inversion accelerator may be able to perform matrix inversion in a smaller number of cycles, as it is specifically tailored to perform such computations.

In the alternative, the accelerator may not be able to perform the function, such as matrix inversion, at a faster rate or even an equal rate than a processor, but the accelerator potentially provides parallelization capacity for the processing function. For example, assume a floating point computation accelerator performs floating point calculations slower than a processor with a floating point unit. Yet, the floating point computation accelerator is deemed an accelerator, as the accelerator is specifically tailored to provide another floating point execution unit for parallel floating point execution. Therefore, in one embodiment, accelerators do not have as diverse execution capability as a processor, and in fact, the accelerator in some embodiments may only be capable of performing a single acceleration task/function at a time. However, in other embodiment, an accelerator may be physically or logically portioned similarly to a multi-core or multi-threaded processor, with each portion capable of accelerating different tasks/functions.

Examples of processing functions/tasks that an accelerator device may accelerate include a matrix inversion task, a graphics computation task, a floating point computation task, a memory access task, a network access task, a compression task, a decompression task, an encryption task, a decryption task, an authentication task, a mathematical computation task, and a media task. The most typical example of an accelerator includes an I/O accelerator, such as a graphics accelerator, which is often coupled to an MCH off a peripheral connection bus.

In one embodiment, accelerator device121is implemented on an integrated circuit. Examples of a logic device to implement accelerator device121includes a Programmable Array Logic (PAL) device, a Programmable Logic Device (PLD), a Complex Programmable Logic Device (CPLD), a Field Programmable Gate Array (FPGA) device, an Application Specific Integrated Circuit (ASIC) device. In one embodiment, accelerator device121is a static accelerator, which is designed and implemented to accelerate a fixed number of tasks/functions. In another embodiment, accelerator121is capable of being dynamically reconfigured to accelerate different functions at different times. Reconfiguration of accelerator121is discussed below in reference to characters132-133andFIG. 5.

Memory130, as illustrated includes a system memory, to hold initialization code131, reconfiguration modules132-133, and accelerator memory space135. An example of system memory includes dynamic random access memory (DRAM). However, any memory may be utilized for system memory, such as double data rate (DDR) memory, synchronous DRAM (SDRAM), buffered memory, and other known memory devices. Additionally, memory130is not limited to a system memory, and may include other known memory devices, such as a flash memory device.

In fact, the code, modules, and memory space illustrated in memory130may be held in a single memory device as illustrated or independently held in separate memory devices. For example, a first portion of initialization code131, such as Basic Input/Output Software (BIOS) or Extensible Firmware Interface (EFI) code, to initialize the computer system and communicate with hardware at runtime may be held in a flash memory device, while a second portion of initialization code131, such as a device driver for accelerator121, may be initially held in long-term storage, such as a hard drive, and loaded into system memory at runtime or held in another device, such as an article of manufacture.

As stated above, initialization code131may include many forms of code for system or device initialization. In one embodiment, initialization code131includes BIOS or EFI code to be executed on a processor, such as processor106, upon boot of the computer system to initialize the system. As an example, when executing boot code, it is determined that socket120includes accelerator device121. Here, boot code may also include code to initialize accelerator device121as described below.

In another embodiment, initialization code131includes code to be executed on a processor, such as processor106, to initialize a memory space for accelerator121. Often, a single processor is designated to execute system management code or initialization code; however, any processor including all processors106,111, and116in parallel may execute initialization code131. Here, initialization code131may resemble or include a device driver. Often with an accelerator device sitting below hub125, a device driver, when executed, maps configuration registers of the device to a shared memory space utilizing specified peripheral bus constructs/protocols, such as specified PCI-Express protocols.

As illustrated here, the computer system is to communicate with accelerator device121through configuration space135in system memory. Therefore, in one embodiment, for the system and accelerator device121to comprehend the location of memory space135, the device driver/initialization code being executed on a processor, such as processor106, initializes memory space135for accelerator121. In other words, the memory space is allocated and communicated to accelerator121, so accelerator121is able to comprehend its associated memory space. To illustrate, an oversimplified example is herein discussed. Upon reset, boot code held in a flash device, not illustrated, is executed, which determines that accelerator121is in socket120. After initialization, an operating system loads device driver131for accelerator121. Processor106executes device driver131causing processor106to transmit a set of inter-processor messages to socket120, which was determined to be the socket including accelerator121during boot.

In one embodiment, these inter-processor messages provide base address136of accelerator memory space135and size137of accelerator memory space135. As a result, memory space135, which is defined by size137added to base136, is associated with memory space135. Here, writes to accelerator device121, such as writes to registers of accelerator device121, may be enabled through writes to memory space135. Furthermore, memory space135may include mapped portions, such as specific addresses, designated for configuration information commonly held in registers of accelerator121. Essentially, accelerator121is able to map its register space in memory130, while being able to access main memory with much lower latency then if accelerator121were placed below hub125off an I/O interconnect.

Note that a similar manner of initialization and use of accelerator121may be utilized in a more secure execution environment, such as a Virtualization Architecture. Here, a hypervisor, such as a virtual machine monitor (VMM), is to provide an interface between software, such as virtual machines (VMs), and hardware, such as processors and memory. Often a hypervisor abstracts hardware to allow multiple guest applications to run independently on the hardware. Virtual machines may be an operating system, an application, guest software, or other software to be executed on the hardware. Continuing the example above, a device driver executing in a virtual machine may setup a similar memory space within a permissible memory range. Furthermore, the VMM may intercepts memory accesses to the memory range and handle/forward them accordingly.

However, regardless of the execution environment, in one embodiment, accelerator121is capable of being dynamically reconfigured. Often the usage model of a computer system changes from application to application and over time through different user experience. As a result, different functions or tasks are to be accelerated. Instead of physically switching out accelerator121every time a new processing task is to be accelerated, device121itself, may be reconfigured. As stated above, in one embodiment, accelerator device121is implemented utilizing reconfigurable logic, such as a Programmable Logic Device (PLD).

As illustrated, reconfiguration modules132and133when executed are to reconfigure accelerator121. In one embodiment, reconfiguration modules132and133are code included in a device driver for accelerator121. Essentially, a device driver provides a resemblance of a library of modules to reconfigure accelerator121to accelerate different functions. As an example, reconfiguration module132, when executed, reconfigures accelerator device121to accelerate matrix inversions, while reconfiguration module133, when executed, reconfigures accelerator device121to accelerate video compression.

In one embodiment, reconfiguration of accelerator121occurs dynamically during runtime of a computer system. As an illustrative example, processor106is executing a media application, which includes video compression. However, accelerator device121is configured to accelerate matrix inversion. As a result, processor106executes reconfiguration module133to reconfigure accelerator121to accelerate video compression. In one embodiment, processor106, when executing reconfiguration module133, transmits inter-processor messages, similar to the initialization messages described above, to reconfigure accelerator121. In another example, processor106, when executing reconfiguration module133, writes to accelerator memory space135to reconfigure accelerator121. Note that a combination of direct messaging and writing to memory space may be utilized, such as a direct message to indicate reconfiguration is going to occur and writes to memory to actually provide the commands for reconfiguration.

Turning toFIG. 2aan embodiment of a format for an inter-processor message is illustrated. In one embodiment, an inter-processor message includes an inter-processor interrupt (IPI). However, inter-processor message200includes any message to be routed between processor sockets105,110,115, and120, without writing to shared system memory. For example, a write to memory space135, updates memory, which in turn is monitored by accelerator121. As a result, a write to system memory associated with a device is often not referred to as an inter-processor message. In contrast, an inter-processor, such as a an IPI, may be directly routed to socket120based on an identifier referenced in a message or transaction.

As illustrated inFIG. 2a, inter-processor message200includes destination field205and vector210. In one embodiment, destination205includes a reference to a socket including an accelerator device. For example, an IPI destination field often includes a value, wherein first portion206of the value identifies a socket and second portion207identifies a logical processor, such as a core or thread, to receive the IPI. To illustrate, inter-processor message200, and specifically, socket field206of message200, represents socket120, for an inter-processor message transmitted to accelerator121. Here, a default value or any other value may be included in logical processor field207. Or in an implementation where an accelerator device includes multiple portions to accelerate different functions, logical processor field207may indicate an appropriate corresponding portion of the accelerator.

Furthermore, vector field210is to hold data or commands potentially supported by accelerator device121. In one embodiment, vector210includes sequence number field211and data field212. Here, sequence number field211is to identify the order of message200in a set of inter-processor messages. For example, in a bus system, such as a Quickpath architecture, which includes a serial point-to-point coherent architecture where bus transactions may be re-ordered, a sequence number in sequence field211allows accelerator device121to correctly order and aggregate inter-processor messages received out of order. However, in another embodiment, where sequence number field211is not utilized, data field212is potentially allocated a larger portion of vector210. As stated above, data field212may include any information, such as data, commands, and instructions.

Referring next toFIG. 2b, an oversimplified embodiment of a set of IPIs to initialization a memory space for an accelerator device is illustrated. As illustrated, first IPI250is an initialization IPI transmitted to begin initialization of the accelerator device. Here, destination field205includes the decimal value of three, i.e. binary value of 011, to indicate the IPI is to be transmitted to socket three. For example, during boot of the system illustrated inFIG. 1, socket105is associated with socket number 0, socket110is associated with socket number 1, socket115is associated with socket number 2, and socket120is associated with socket number 3. Here, IPI250is routed to socket3including accelerator device121based on at least a portion of destination field205including a value identifying socket3. Furthermore, as the first IPI in the set, sequence number field211of IPI250includes a value of zero.

In addition, data field212includes a value, which accelerator device121, recognizes as an initialization value, i.e. a predefined “magic value.” Based on the implementation, any predefined value may be utilized to indicate an initialization state. After the initialization IPI is received and comprehended by accelerator device121, accelerator device121waits for IPI's to initialize its memory space. In one embodiment, a first number of IPIs, such as IPIs251-259, to indicate a base address of a memory space to be associated with accelerator device121. In the example illustrated, portions of the base address are transmitted in each IPI. Also, IPIs251-259are ordered 1-9, accordingly, in sequence field211. Here, the base address has 36 bits, which are sent from Lowest Significant Bit (LSB) to Most Significant Bit (MSB). However, a different embodiment includes transmitting from MSB to LSB.

After, the first number of IPIs are transmitted, a second number of IPIs, such as IPI260-263, are transmitted to indicate a size of the memory space. In one embodiment, the base address plus the size value defines the bounds of the memory space to be associated with an accelerator device. Similar to above, IPIs260-263identify socket3in destination field205, indicate a sequence in the set in field211, and include at least a portion of the size value in each IPI. Note, that portions of the size value may be transmitted from MSB to LSB or LSB to MSB. In addition, new ordering numbers may be restarted for each phase of initialization, such as restarting at zero for IPI251and zero for IPI260. Moreover, in one embodiment, initialization IPI250is not transmitted before IPIs251-259or IPIs260-263. Here, accelerator device121, upon boot, enters an initialization state. As a result, initialization IPI250is not needed.

Initialization of a memory space for an accelerator device, as described above and below, in one embodiment, is in response to execution of code on a physical processor. For example, a device driver for accelerator device121is loaded into system memory130and executed on processor106. As another example, the device driver or other initialization code is included on an article of manufacture, as described below, to be executed on processor106. However, any code executed on processor106potentially results in initializing an accelerator device.

To illustrate, processor106when executing instructions, operations, function calls, etc. in code, such as a device driver or initialization code, is to transmit initialization IPIS, such as the set of IPIs illustrated inFIG. 2bto initialize memory space135. Furthermore, the flows ofFIGS. 3-5may also be performed in response to execution of code by a physical processor or an accelerator device. Additionally, a compiler or other code, when executed, to compile or alter initialization code, may insert the instructions, operations, function calls, and other known executable values, that when executed, are to perform the flows illustrated inFIGS. 3-5.

Although the flows ofFIGS. 3-5are illustrated in a substantially serial manner, any of the illustrated flows may take place in parallel with others. The specific order of flows illustrated inFIGS. 3-5are purely illustrative. As a result, any flow may be performed in any order. For example, determining a processor socket associated with an accelerator device in flow300may take place during execution of initialization code in flow305.

Turning toFIG. 3, an embodiment of a flow diagram for a method of initializing an accelerator device is illustrated. In flow300, a processor socket associated with an accelerator device is determined. In one embodiment, boot code, when executed, is to initialize a computer system including the accelerator. During initialization sockets and their contents are identified. For example, a socket including an accelerator is polled during initialization. When executing the code, a number or other identifier is associated with the socket including the accelerator device. Other initialization tasks may also be performed, such as Power On Self Test (POST) and initialization of other tasks. Often code for booting a system, such as Basic Input Output Software (BIOS) code and/or Extensible Firmware Interface (EFI) code, is held in a memory device, such as a flash memory device.

In flow305initialization code for the accelerator is executed on a physical processor in another socket. In one embodiment, the initialization code for the accelerator device is included in the boot code held in the flash device. In another embodiment, the initialization code for the accelerator device is separate initialization code held in memory or on an article of manufacture capable of interfacing with the computer system. Here, during execution of the boot code a call to the initialization code for the accelerator may be executed. In another embodiment, the boot code completes execution and hands off control to an operation system or hypervisor. The hypervisor then loads and schedules execution of the initialization code, which here resembles device driver code.

The physical processor, in response to executing the initialization code, transmits a plurality of inter-processor messages from the physical processor to the socket associated with the accelerator device to initialize a memory space for the accelerator device in flow310. In one embodiment, the inter-processor messages include inter-processor interrupts (IPIs). As an illustrative example, the inter-processor messages transmit a defined memory space. For example, a contiguous section of physical memory is allocated to the accelerator device. The inter-processor messages communicate the defined contiguous section of physical memory to the accelerator device. In one embodiment, the memory space is defined by a base address and a size value, which is transmitted utilizing the inter-processor messages.

A specific illustrative embodiment of a set of IPIs is illustrated inFIG. 2b. Here, a first initialization IPI is sent to place the accelerator device of socket3into an initialization mode. A first number of IPIs is transmitted to the accelerator device to indicate the base address. Note in an embodiment where sequence numbers are utilized, the accelerator device may receive the IPIs in a different order than intended. However, the accelerator is capable of re-ordering the IPIs into the intended order.

Furthermore, the accelerator is capable of aggregating data portions of the IPIs to form the entire base address from a plurality of base address IPIs. As an example, each set of bits from one base address IPI is masked into a corresponding correct position within a register until all of the transmitted data bits are held in the register. As another example, the bits are serially shifted into a register. Other known methods and of aggregating data portions or bits may be utilized. In a similar manner, a second number of IPIs to indicate a size value of the memory space is transmitted, received, re-ordered, and aggregated as described above in reference to the base address.

Turning toFIG. 4, a specific illustrative embodiment of a flow diagram for a method of initializing a configuration space is depicted. In flow400, a processor socket associated with an accelerator device is determined. Any method described above in reference toFIG. 3or any other known method for determining an identifier associated with a device in a processor socket may be utilized. Note that the accelerator device may be any acceleration device, as described above, for accelerating processing functions/tasks.

In flow405, a configuration space in memory for the accelerator device is allocated. In one embodiment, an OS, a hypervisor, or other controlling code/application provides memory management. As a result, a memory space is provided by request of the OS, hypervisor, or controlling code. For example, with a hypervisor a space within a virtual machine (VM) memory space may be allocated. In one embodiment, the memory space or configuration space is allocated as physically contiguous. Therefore, the bounds of the entire memory space are definable by a base address and a size value. However, a non-contiguous space may be allocated where multiple base addresses and sizes define the configuration space.

Here, in flow410, a first inter-processor interrupt (IPI) is transmitted to indicate a beginning of initialization. As an example, an instruction or operation may be compiled in initialization code or inserted by a compiler in initialization code. A physical processor in a computer system including the accelerator device, when executing the instruction or operation, is to generate/transmit the first IPI to the accelerator device. The processor socket determined in flow400is referenced in the first IPI to enable correct routing of the first IPI to the socket including the accelerator device. An example of a first initialization IPI is illustrated inFIG. 2bwith reference character250. There, destination field205indicates the IPI is to be routed to socket3, has a sequence number of zero, i.e. the first IPI, and includes a start initialization value. Note the start initialization value may include any “magic value,” which is recognizable by the accelerator as a command to enter an initialization state, i.e. wait for base address and size value IPIs.

Next, a first number of IPIs, is transmitted to the socket associated with the accelerator device to indicate a base address for the configuration space in flow415ofFIG. 4. Referring back toFIG. 2bagain, nine IPIs, i.e. IPIs251-259, are sent to indicate the full base address, which there includes 36 bits. However, a base address may include any number of bits to reference an address and any number of IPIs may be sent to indicate a base address. Furthermore, bits may be transmitted in any increment, such as eight bits at a time, as well as in any order, such as MSB to LSB. The accelerator device is capable of aggregating the data portions of the first number of IPIs to form the correct full base address. Similarly, a second number of IPIs are sent to indicate a size value. Here, IPIs260-261indicate a 16 bit size value, when added to the 36 bit base address defines the bounds of the configuration space for the accelerator device. However, once again, the size value may include any number of bits and may be transmitted in different increments of bits per IPI and a different number if IPIs.

Referring next toFIG. 5, an embodiment of a flow diagram for a method of reconfiguring an accelerator device in a processor socket is illustrated. In flow500, reconfiguration code is executed on a physical processor in a socket of a computer system. In one embodiment, the reconfiguration code is included in a device driver associated with the accelerator device. For example, as illustrated inFIG. 1, different reconfiguration modules may be included in the device driver, which resembles a library of reconfiguration modules. When an accelerator is to be reconfigured to perform a different processing function, the corresponding reconfiguration module is determined and executed to reconfigure the accelerator device. However, reconfiguration code and modules is not limited to inclusion in a device driver, and may be included in any storage device able to communicate with the computer system, such as an article of manufacture or other memory.

Next, in flow505reconfiguration commands are transmitted to an accelerator device in another socket of the computer system to reconfigure the accelerator to perform a different acceleration function. In one embodiment, a physical processor executing the reconfiguration code transmits similar inter-processor messages as described above. However, instead of an initialization command or “magic number” in a data field of the inter-processor message, a reconfiguration command or data value is transmitted to indicate the accelerator is to be reconfigured. Additionally, more inter-processor commands may be transmitted to reconfigure the device.

Alternatively, after a configuration space of the accelerator device is initialized, as described above, the physical processor, in response to executing the reconfiguration code, performs writes to the configuration space to reconfigure the accelerator device. However, note that inter-processor messaging and writes to a configuration space may be performed in cooperation. As a first example, an inter-processor message is sent to place the accelerator device in a reconfiguration state, i.e. wait for writes to the configuration space for re-configuration. As another example, for extensive reconfiguration writes to the configuration space are performed, while minor reconfigurations are performed through inter-processor messaging.

As stated above, reconfiguration of an accelerator, in one embodiment, includes reconfiguring logic of an accelerator device from accelerating one processing function to accelerate a second processing function. Examples of processing functions/tasks that an accelerator device may accelerate include a matrix inversion task, a graphics computation task, a floating point computation task, a memory access task, a network access task, a compression task, a decompression task, an encryption task, a decryption task, an authentication task, a mathematical computation task, and a media task. The most typical example of an accelerator includes an I/O accelerator, such as a graphics accelerator, which is often coupled to an MCH off a peripheral connection bus.

An accelerator device may be implemented on an integrated circuit or other logic. Examples of a logic device to implement an accelerator device include a Programmable Array Logic (PAL) device, a Programmable Logic Device (PLD), a Complex Programmable Logic Device (CPLD), a Field Programmable Gate Array (FPGA) device, an Application Specific Integrated Circuit (ASIC) device.

To illustrate with an oversimplified example, assume a physical processor is executing a graphics intensive program. As a result, an accelerator in another processor socket is configured to accelerate graphics calculations, such as 3D lighting calculations or vertices translation. In response to a context switch or during parallel execution, the physical processor begins executing a video program with intensive video compression. As a result, during runtime of the computer system, the processor may dynamically execute a reconfiguration module, as described above, to reconfigure the accelerator device from accelerating graphics calculations to accelerating video compression.

Therefore, as can be seen from above, an accelerator device may be placed in a processor socket, which potentially enables better memory throughput. However, without I/O bus defined protocols to initialize the accelerator device, direct inter-processor messaging is utilized to initialize a configuration space of the accelerator device, which may be associated with configuration registers of the accelerator, as well as a general memory/communication area for the accelerator. As the size of a base address and size for the configuration space may be too large for data vectors of existing inter-processor communication, a set of inter-processor messages may be utilized to communicate bases and sizes of memory space. Furthermore, the accelerator may be dynamically reconfigured during runtime utilizing inter-processor messaging or writes to memory to provide flexible acceleration support.

The embodiments of methods, hardware, software, firmware or code set forth above may be implemented via instructions or code stored on a machine-accessible or machine readable medium which are executable by a processing element. A machine-accessible/readable medium includes any mechanism that provides (i.e., stores and/or transmits) information in a form readable by a machine, such as a computer or electronic system. For example, a machine-accessible medium includes random-access memory (RAM), such as static RAM (SRAM) or dynamic RAM (DRAM); ROM; magnetic or optical storage medium; flash memory devices; electrical storage device, optical storage devices, acoustical storage devices or other form of propagated signal (e.g., carrier waves, infrared signals, digital signals) storage device; etc. For example, a machine may access a storage device through receiving a propagated signal, such as a carrier wave, from a medium capable of holding the information to be transmitted on the propagated signal.