Edit: Found this in PowerISA_V3.0.pdf
Load Doubleword Monitored Instruction: Specifies a new instruction and facility that improves the performance of the garbage collection process and eliminates the need to pause all applications during collection.
The ldmx instruction loads the same doubleword in storage as the ldx instruction.
ldmx is intended for use by applications when loading data objects during times when objects are being moved as part of a garbage collection process. In this type of usage, all loads of object pointers by applications are performed using ldmx. Whenever objects within a given region of memory are to be moved, the garbage collection program sets the Load Monitored Region registers to encompass the region being moved, and sets BESCRGE LME to 0b11 to enable Load Monitored event-based branches.
...
>The Load Monitored Region registers are used to specify a Load Monitored region, and to specify the sections of the region that are enabled. The Load Monitored region is a contiguous region of storage specified by the Load Monitored Region register. Load Monitored regions range in size from 32 MB to 1 TB. All regions are powers of 2 in length and are aligned (see Section 1.11.1). The Load Monitored region is divided into 64 sections of equal length, each of which can be separately enabled. The Load Monitored Section Enable Register specifies which sections are enabled.
>Load Doubleword Monitored Instruction: Specifies a new instruction and facility that improves the performance of the garbage collection process and eliminates the need to pause all applications during collection.
Programming Note:
>The ldmx instruction loads the same doubleword in storage as the ldx instruction.
>Idmx is intended for use by applications when loading data objects during times when objects are being moved as part of a garbage collection process. In this type of usage, all loads of object pointers by applications are performed using ldmx. Whenever objects within a given region of memory are to be moved, the garbage collection program sets the Load Monitored Region registers to encompass the region being moved, and sets BESCR GE LME to 0b11 to enable Load Monitored event-based branches.
>Subsequently, if an application program loads (ldmx) a pointer into an enabled section of the Load Monitored region, an event-based branch (EBB) will occur. The EBB handler will load the instruction from storage, and decode the instruction to determine the effective address from which the pointer was loaded. The handler will then load the pointer (obtaining the same value the application obtained), and determine where the corresponding object has been moved to, and update the pointer in storage so that it points to the object's new location. The EBB handler may also take other actions such as updating additional pointers, depending on the situation. After this processing is complete, the EBB handler sets BESCR LME LMEO to (1 0) since the taking of the EBB set these bits to (0,1), and then executes rfebb 1 to re-enable EBBs and return to the application program at the ldmx. The application program re-executes the ldmx, which now returns the updated pointer (which no longer points into an enabled section of the Load Monitored region), and continues.
>Other variations and extensions of the above pro- cedure are also possible.
seriously? love to see how/why that was put in the die
At it's core a `SELECT FROM` statement is a filter lambda (without any joins, or before/after a join has been done depending on query optimization).
Fundamentally this is because an SQL table is a flat array. With row's being flat array's within the table's memory space.
Calculating the pointer to fields within rows within a table is ridiculously parallel. You're limited only by SIMD size. (this is 1 FMA + 1 add against a constant ~2 ticks).
Also custom wide SIMD registers can allow for `VARCHAR(255)` equality statements to be done in 1 processor cycle.
I would love to see some benchmarks of how much this speeds up some sample workload queries, if you happen to know of some (preferably not from Oracle's marketing dept.)?
The only ones you'll find by 3rd party are non-direct comparisons like transactions per second in Oracle-SQL. Or Core Count.
But they'll still cheat us on small things. We request information on a training seminar (we had a free attendance voucher), and they lose our account information until 1 week after the seminar ended.
It's to the point where I just laugh. Everyone knows their cheating us, but upper management won't change.
I mean I'd rather use Postgres. But large corps like having a vendor to call.
http://www.enterprisedb.com/products-services-training/produ...
Alas.
Good to see new developments in this line. The more (open) hardware platforms the better, IMO.
They killed the desktops. That, essentially, made SPARC mostly invisible to most people. They also do a crappy job of reminding the world that a software company (as they position themselves) can make decent hardware.
https://en.wikipedia.org/wiki/Intel_iAPX_432#Garbage_collect...
LoPAPR http://openpowerfoundation.org/?resource_lib=linux-on-power-... IODA2 http://openpowerfoundation.org/?resource_lib=openpower-io-de...
(although i'm 99% sure the IODA doc is missing a heap of stuff).