Intel presenterar nya instruktionsuppsättningar
Intel har tillkännagivit nya instruktionsuppsättningar till kommande mikroarkitekturer (Haswell) vilket bl.a. innefattar 256-bitars Integervektoroperationer (AVX2), d.v.s. ungefär som AVX fast för heltal, nya vektorpermuteringar, variabla vektorshifts, scattered loads (gathers), vektorkonverteringar mellan short floats (16-bit) och floats samt nya instruktioner för general purpose registers.
AVX2 extends Intel AVX by promoting most of the 128-bit SIMD integer instructions
with 256-bit numeric processing capabilities. AVX2 instructions follow the same
programming model as AVX instructions.
In addition, AVX2 provide enhanced functionalities for broadcast/permute operations
on data elements, vector shift instructions with variable-shift count per data
element, and instructions to fetch non-contiguous data elements from memory.
Nya GPR-instruktionerr:
ANDN — Logical AND NOT
BEXTR — Bit Field Extract
BLSI — Extract Lowest Set Isolated Bit
BLSMSK — Get Mask Up to Lowest Set Bit
BLSR- Reset Lowest Set Bit
BZHI - Zero High Bits Starting with Specified Bit Position
MULX — Unsigned Multiply Without Affecting Flags
PDEP — Parallel Bits Deposit
PEXT— Parallel Bits Extract
RORX — Rotate Right Logical Without Affecting Flags
SARX/SHLX/SHRX- Shift Without Affecting Flags
TZCNT — Count the Number of Trailing Zero Bits
INVPCID - Invalidate Processor Context ID
RDFSBASE/RDGSBASE—Read FS/GS Segment Base Register
RDRAND—Read Random Number
WRFSBASE/WRGSBASE—Write FS/GS Segment Base Register
http://software.intel.com/file/36945
Framförallt 256-bitars Integervektoroperationer har jag längtat efter sedan AVX presenterades, det kommer att ge fina prestandaboosts i många applikationer.
Mer generella permuteringar är alltid trevligt, dock verkar det endast vara för dword/qword/float/double i det här läget vilket är synd, hade gärna sett stöd för byte och word också.
Variabla vektorshifts där man kan shifta varje element olika mycket kan man nog trixa lite med för att kapa några klockcykler i ett flertal tillämningar skulle jag tro, kan bli intressant att programmera med.
Scattered loads har varit efterfrågat länge då det är användbart till mycket, dock är det tyvärr även här begränsat till dword/qword/float/double.
Hårdvaru-RNG direkt i CPU:n kan vara väldigt intressant för en del applikationer, åtminstone om den ger bra throughput och ger bra slumpmässig spridning då rena mjukvarulösningar ofta är väldigt långsamma.
Kommer definitivt att införskaffa första CPU:n med AVX2-stöd så man får knacka lite assembly och uppdatera en bunt algoritmer. Assembly är helt klart det roligaste språket att programmera i då man verkligen får tänka till för att hitta kreativa lösningar.
Några andra assemblykodare som hänger på Swec som har några tankar kring detta?
Assembly är ett högnivåspråk.