Help us shape the future of Go! Take the 2026 Go Developer Survey

xorsimd

package module
v0.1.3 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jan 2, 2020 License: MIT Imports: 2 Imported by: 52

README

XOR SIMD

GoDoc MIT licensed Build Status Go Report Card Sourcegraph

Introduction:

  • XOR code engine in pure Go.

  • High Performance: More than 270GB/s per physics core.

Performance

Performance depends mainly on:

  • CPU instruction extension.

  • Number of source row vectors.

Platform:

AWS c5d.xlarge (Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00GHz)

All test run on a single Core.

I/O = (src_num + 1) * vector_size / cost

Src Num Vector size AVX512 I/O (MB/S) AVX2 I/O (MB/S) SSE2 I/O (MB/S)
5 4KB 270403.73 142825.25 74443.91
5 1MB 26948.34 26887.37 26950.65
5 8MB 17881.32 17212.56 16402.97
10 4KB 190445.30 102953.59 53244.04
10 1MB 26424.44 26618.65 26094.39
10 8MB 15471.31 14866.72 13565.80

Documentation

Index

Constants

This section is empty.

Variables

View Source
var EnableAVX512 = true

EnableAVX512 may slow down CPU Clock (maybe not). TODO need more research: https://lemire.me/blog/2018/04/19/by-how-much-does-avx-512-slow-down-your-cpu-a-first-experiment/

Functions

func Encode

func Encode(dst []byte, src [][]byte) (n int)

Encode encodes elements from source slice into a destination slice. The source and destination may overlap. Encode returns the number of elements encoded, which will be the minimum of len(src[i]) and len(dst).

func EncodeBytes added in v0.1.2

func EncodeBytes(dst, a, b []byte) int

EncodeBytes encodes the bytes in a and b into a destination slice. The source and destination may overlap. EncodeBytes returns the number of elements encoded, which will be the minimum of len(dst), len(a), len(b).

func EncodeDW added in v0.1.3

func EncodeDW(dst, a, b []byte)

EncodeDW XORs of packed doubleword (16 Bytes). The slice arguments a, b, dst's lengths are assumed to be at least 16, if not, it will panic.

This functions could be used for AES encryption, AES block size is 16 bytes in Go.

func EncodeW added in v0.1.3

func EncodeW(dst, a, b []byte)

EncodeW XORs of word (8 Bytes). The slice arguments a, b, dst's lengths are assumed to be at least 8, if not, will panic.

Types

This section is empty.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL