Skip to content

Commit e48ff23

Browse files
committed
test(bfloat16): add Phase 3 slice operation tests and benchmarks
1 parent 8024505 commit e48ff23

2 files changed

Lines changed: 509 additions & 0 deletions

File tree

bfloat16.go

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,114 @@ func Float16FromBFloat16(b BFloat16) Float16 {
456456
return b.ToFloat16()
457457
}
458458

459+
// Batch operations for high-performance computing
460+
461+
// BFloat16AddSlice performs element-wise addition of two BFloat16 slices
462+
func BFloat16AddSlice(a, b []BFloat16) []BFloat16 {
463+
if len(a) != len(b) {
464+
panic("float16: slice length mismatch")
465+
}
466+
467+
result := make([]BFloat16, len(a))
468+
for i := range a {
469+
result[i] = BFloat16Add(a[i], b[i])
470+
}
471+
return result
472+
}
473+
474+
// BFloat16SubSlice performs element-wise subtraction of two BFloat16 slices
475+
func BFloat16SubSlice(a, b []BFloat16) []BFloat16 {
476+
if len(a) != len(b) {
477+
panic("float16: slice length mismatch")
478+
}
479+
480+
result := make([]BFloat16, len(a))
481+
for i := range a {
482+
result[i] = BFloat16Sub(a[i], b[i])
483+
}
484+
return result
485+
}
486+
487+
// BFloat16MulSlice performs element-wise multiplication of two BFloat16 slices
488+
func BFloat16MulSlice(a, b []BFloat16) []BFloat16 {
489+
if len(a) != len(b) {
490+
panic("float16: slice length mismatch")
491+
}
492+
493+
result := make([]BFloat16, len(a))
494+
for i := range a {
495+
result[i] = BFloat16Mul(a[i], b[i])
496+
}
497+
return result
498+
}
499+
500+
// BFloat16DivSlice performs element-wise division of two BFloat16 slices
501+
func BFloat16DivSlice(a, b []BFloat16) []BFloat16 {
502+
if len(a) != len(b) {
503+
panic("float16: slice length mismatch")
504+
}
505+
506+
result := make([]BFloat16, len(a))
507+
for i := range a {
508+
result[i] = BFloat16Div(a[i], b[i])
509+
}
510+
return result
511+
}
512+
513+
// BFloat16ScaleSlice multiplies each element in the slice by a scalar
514+
func BFloat16ScaleSlice(s []BFloat16, scalar BFloat16) []BFloat16 {
515+
result := make([]BFloat16, len(s))
516+
for i := range s {
517+
result[i] = BFloat16Mul(s[i], scalar)
518+
}
519+
return result
520+
}
521+
522+
// BFloat16SumSlice returns the sum of all elements in the slice
523+
func BFloat16SumSlice(s []BFloat16) BFloat16 {
524+
sum := BFloat16PositiveZero
525+
for _, v := range s {
526+
sum = BFloat16Add(sum, v)
527+
}
528+
return sum
529+
}
530+
531+
// BFloat16ToSlice32 converts a slice of BFloat16 values to float32
532+
func BFloat16ToSlice32(s []BFloat16) []float32 {
533+
result := make([]float32, len(s))
534+
for i, v := range s {
535+
result[i] = v.ToFloat32()
536+
}
537+
return result
538+
}
539+
540+
// BFloat16FromSlice32 converts a slice of float32 values to BFloat16
541+
func BFloat16FromSlice32(s []float32) []BFloat16 {
542+
result := make([]BFloat16, len(s))
543+
for i, v := range s {
544+
result[i] = BFloat16FromFloat32(v)
545+
}
546+
return result
547+
}
548+
549+
// BFloat16ToSlice64 converts a slice of BFloat16 values to float64
550+
func BFloat16ToSlice64(s []BFloat16) []float64 {
551+
result := make([]float64, len(s))
552+
for i, v := range s {
553+
result[i] = float64(v.ToFloat32())
554+
}
555+
return result
556+
}
557+
558+
// BFloat16FromSlice64 converts a slice of float64 values to BFloat16
559+
func BFloat16FromSlice64(s []float64) []BFloat16 {
560+
result := make([]BFloat16, len(s))
561+
for i, v := range s {
562+
result[i] = BFloat16FromFloat32(float32(v))
563+
}
564+
return result
565+
}
566+
459567
// Convenience constants for common BFloat16 values
460568
var (
461569
BFloat16Zero = BFloat16PositiveZero

0 commit comments

Comments
 (0)