filter: update testing/benchmark

This commit is contained in:
Markus Tzoe 2017-07-22 17:40:48 +08:00
parent f8381ea58f
commit a5d7aea48e
4 changed files with 135 additions and 99 deletions

View file

@ -41,3 +41,106 @@ func (f *Filter) Decode(in *int32) {
func (f *Filter) Encode(in *int32) {
encode(f, in)
}
func decodeCompat(f *Filter, in *int32) {
pa := f.dl[:]
pb := f.qm[:]
pm := f.dx[:]
sum := f.round
if f.error < 0 {
pb[0] -= pm[0]
pb[1] -= pm[1]
pb[2] -= pm[2]
pb[3] -= pm[3]
pb[4] -= pm[4]
pb[5] -= pm[5]
pb[6] -= pm[6]
pb[7] -= pm[7]
} else if f.error > 0 {
pb[0] += pm[0]
pb[1] += pm[1]
pb[2] += pm[2]
pb[3] += pm[3]
pb[4] += pm[4]
pb[5] += pm[5]
pb[6] += pm[6]
pb[7] += pm[7]
}
sum += pa[0]*pb[0] + pa[1]*pb[1] + pa[2]*pb[2] + pa[3]*pb[3] +
pa[4]*pb[4] + pa[5]*pb[5] + pa[6]*pb[6] + pa[7]*pb[7]
pm[0] = pm[1]
pm[1] = pm[2]
pm[2] = pm[3]
pm[3] = pm[4]
pa[0] = pa[1]
pa[1] = pa[2]
pa[2] = pa[3]
pa[3] = pa[4]
pm[4] = ((pa[4] >> 30) | 1)
pm[5] = ((pa[5] >> 30) | 2) & ^1
pm[6] = ((pa[6] >> 30) | 2) & ^1
pm[7] = ((pa[7] >> 30) | 4) & ^3
f.error = *in
*in += (sum >> uint32(f.shift))
pa[4] = -pa[5]
pa[5] = -pa[6]
pa[6] = *in - pa[7]
pa[7] = *in
pa[5] += pa[6]
pa[4] += pa[5]
}
func encodeCompat(f *Filter, in *int32) {
pa := f.dl[:]
pb := f.qm[:]
pm := f.dx[:]
sum := f.round
if f.error < 0 {
pb[0] -= pm[0]
pb[1] -= pm[1]
pb[2] -= pm[2]
pb[3] -= pm[3]
pb[4] -= pm[4]
pb[5] -= pm[5]
pb[6] -= pm[6]
pb[7] -= pm[7]
} else if f.error > 0 {
pb[0] += pm[0]
pb[1] += pm[1]
pb[2] += pm[2]
pb[3] += pm[3]
pb[4] += pm[4]
pb[5] += pm[5]
pb[6] += pm[6]
pb[7] += pm[7]
}
sum += pa[0]*pb[0] + pa[1]*pb[1] + pa[2]*pb[2] + pa[3]*pb[3] +
pa[4]*pb[4] + pa[5]*pb[5] + pa[6]*pb[6] + pa[7]*pb[7]
pm[0] = pm[1]
pm[1] = pm[2]
pm[2] = pm[3]
pm[3] = pm[4]
pa[0] = pa[1]
pa[1] = pa[2]
pa[2] = pa[3]
pa[3] = pa[4]
pm[4] = ((pa[4] >> 30) | 1)
pm[5] = ((pa[5] >> 30) | 2) & ^1
pm[6] = ((pa[6] >> 30) | 2) & ^1
pm[7] = ((pa[7] >> 30) | 4) & ^3
pa[4] = -pa[5]
pa[5] = -pa[6]
pa[6] = *in - pa[7]
pa[7] = *in
pa[5] += pa[6]
pa[4] += pa[5]
*in -= (sum >> uint32(f.shift))
f.error = *in
}

View file

@ -1,3 +1,6 @@
//+build !noasm !appengine
//+build amd64
package filter
import (
@ -24,7 +27,7 @@ func BenchmarkEncodeSSE2(b *testing.B) {
})
}
func BenchmarkEncodeCompat(b *testing.B) {
func BenchmarkEncodeCompatX64(b *testing.B) {
f := New([8]byte{1, 2, 3, 4, 5, 6, 7, 8}, 8)
var in int32
b.RunParallel(func(pb *testing.PB) {
@ -54,7 +57,7 @@ func BenchmarkDecodeSSE2(b *testing.B) {
})
}
func BenchmarkDecodeCompat(b *testing.B) {
func BenchmarkDecodeCompatX64(b *testing.B) {
f := New([8]byte{1, 2, 3, 4, 5, 6, 7, 8}, 8)
var in int32
b.RunParallel(func(pb *testing.PB) {

View file

@ -3,104 +3,9 @@
package filter
func DecodeCompat(f *Filter, in *int32) {
pa := f.dl[:]
pb := f.qm[:]
pm := f.dx[:]
sum := f.round
if f.error < 0 {
pb[0] -= pm[0]
pb[1] -= pm[1]
pb[2] -= pm[2]
pb[3] -= pm[3]
pb[4] -= pm[4]
pb[5] -= pm[5]
pb[6] -= pm[6]
pb[7] -= pm[7]
} else if f.error > 0 {
pb[0] += pm[0]
pb[1] += pm[1]
pb[2] += pm[2]
pb[3] += pm[3]
pb[4] += pm[4]
pb[5] += pm[5]
pb[6] += pm[6]
pb[7] += pm[7]
}
sum += pa[0]*pb[0] + pa[1]*pb[1] + pa[2]*pb[2] + pa[3]*pb[3] +
pa[4]*pb[4] + pa[5]*pb[5] + pa[6]*pb[6] + pa[7]*pb[7]
pm[0] = pm[1]
pm[1] = pm[2]
pm[2] = pm[3]
pm[3] = pm[4]
pa[0] = pa[1]
pa[1] = pa[2]
pa[2] = pa[3]
pa[3] = pa[4]
pm[4] = ((pa[4] >> 30) | 1)
pm[5] = ((pa[5] >> 30) | 2) & ^1
pm[6] = ((pa[6] >> 30) | 2) & ^1
pm[7] = ((pa[7] >> 30) | 4) & ^3
f.error = *in
*in += (sum >> uint32(f.shift))
pa[4] = -pa[5]
pa[5] = -pa[6]
pa[6] = *in - pa[7]
pa[7] = *in
pa[5] += pa[6]
pa[4] += pa[5]
decodeCompat(f, in)
}
func EncodeCompat(f *Filter, in *int32) {
pa := f.dl[:]
pb := f.qm[:]
pm := f.dx[:]
sum := f.round
if f.error < 0 {
pb[0] -= pm[0]
pb[1] -= pm[1]
pb[2] -= pm[2]
pb[3] -= pm[3]
pb[4] -= pm[4]
pb[5] -= pm[5]
pb[6] -= pm[6]
pb[7] -= pm[7]
} else if f.error > 0 {
pb[0] += pm[0]
pb[1] += pm[1]
pb[2] += pm[2]
pb[3] += pm[3]
pb[4] += pm[4]
pb[5] += pm[5]
pb[6] += pm[6]
pb[7] += pm[7]
}
sum += pa[0]*pb[0] + pa[1]*pb[1] + pa[2]*pb[2] + pa[3]*pb[3] +
pa[4]*pb[4] + pa[5]*pb[5] + pa[6]*pb[6] + pa[7]*pb[7]
pm[0] = pm[1]
pm[1] = pm[2]
pm[2] = pm[3]
pm[3] = pm[4]
pa[0] = pa[1]
pa[1] = pa[2]
pa[2] = pa[3]
pa[3] = pa[4]
pm[4] = ((pa[4] >> 30) | 1)
pm[5] = ((pa[5] >> 30) | 2) & ^1
pm[6] = ((pa[6] >> 30) | 2) & ^1
pm[7] = ((pa[7] >> 30) | 4) & ^3
pa[4] = -pa[5]
pa[5] = -pa[6]
pa[6] = *in - pa[7]
pa[7] = *in
pa[5] += pa[6]
pa[4] += pa[5]
*in -= (sum >> uint32(f.shift))
f.error = *in
encodeCompat(f, in)
}

View file

@ -0,0 +1,25 @@
package filter
import (
"testing"
)
func BenchmarkEncodeCompat(b *testing.B) {
f := New([8]byte{1, 2, 3, 4, 5, 6, 7, 8}, 8)
var in int32
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
encodeCompat(f, &in)
}
})
}
func BenchmarkDecodeCompat(b *testing.B) {
f := New([8]byte{1, 2, 3, 4, 5, 6, 7, 8}, 8)
var in int32
b.RunParallel(func(pb *testing.PB) {
for pb.Next() {
decodeCompat(f, &in)
}
})
}