github.com/weaviate/weaviate@v1.24.6/adapters/repos/db/vector/hnsw/distancer/asm/l2_amd64.go (about) 1 // _ _ 2 // __ _____ __ ___ ___ __ _| |_ ___ 3 // \ \ /\ / / _ \/ _` \ \ / / |/ _` | __/ _ \ 4 // \ V V / __/ (_| |\ V /| | (_| | || __/ 5 // \_/\_/ \___|\__,_| \_/ |_|\__,_|\__\___| 6 // 7 // Copyright © 2016 - 2024 Weaviate B.V. All rights reserved. 8 // 9 // CONTACT: hello@weaviate.io 10 // 11 12 package asm 13 14 //go:generate goat ../c/l2_avx256_amd64.c -O3 -mavx2 -mfma -mavx512f -mavx512dq -e="-mfloat-abi=hard" -e="-Rpass-analysis=loop-vectorize" -e="-Rpass=loop-vectorize" -e="-Rpass-missed=loop-vectorize" 15 //go:generate goat ../c/l2_avx512_amd64.c -O3 -mavx2 -mfma -mavx512f -mavx512dq -e="-mfloat-abi=hard" -e="-Rpass-analysis=loop-vectorize" -e="-Rpass=loop-vectorize" -e="-Rpass-missed=loop-vectorize" 16 17 import "unsafe" 18 19 func L2AVX256(x []float32, y []float32) float32 { 20 var res float32 21 22 l := len(x) 23 l2_256( 24 unsafe.Pointer(unsafe.SliceData(x)), 25 unsafe.Pointer(unsafe.SliceData(y)), 26 unsafe.Pointer(&res), 27 unsafe.Pointer(&l)) 28 29 return res 30 } 31 32 func L2AVX512(x []float32, y []float32) float32 { 33 var res float32 34 35 l := len(x) 36 l2_512( 37 unsafe.Pointer(unsafe.SliceData(x)), 38 unsafe.Pointer(unsafe.SliceData(y)), 39 unsafe.Pointer(&res), 40 unsafe.Pointer(&l)) 41 42 return res 43 }