Vector Operations
Overview​
The VecOps API provides efficient vector operations such as addition, subtraction, and multiplication.
Example​
Vector addition​
package main
import (
"github.com/ingonyama-zk/icicle/wrappers/golang/core"
cr "github.com/ingonyama-zk/icicle/wrappers/golang/cuda_runtime"
)
func main() {
testSize := 1 << 12
a := GenerateScalars(testSize)
b := GenerateScalars(testSize)
out := make(core.HostSlice[ScalarField], testSize)
cfg := core.DefaultVecOpsConfig()
// Perform vector addition
err := VecOp(a, b, out, cfg, core.Add)
if err != cr.CudaSuccess {
panic("Vector addition failed")
}
}
Vector Subtraction​
package main
import (
"github.com/ingonyama-zk/icicle/wrappers/golang/core"
cr "github.com/ingonyama-zk/icicle/wrappers/golang/cuda_runtime"
)
func main() {
testSize := 1 << 12
a := GenerateScalars(testSize)
b := GenerateScalars(testSize)
out := make(core.HostSlice[ScalarField], testSize)
cfg := core.DefaultVecOpsConfig()
// Perform vector subtraction
err := VecOp(a, b, out, cfg, core.Sub)
if err != cr.CudaSuccess {
panic("Vector subtraction failed")
}
}
Vector Multiplication​
package main
import (
"github.com/ingonyama-zk/icicle/wrappers/golang/core"
cr "github.com/ingonyama-zk/icicle/wrappers/golang/cuda_runtime"
)
func main() {
testSize := 1 << 12
a := GenerateScalars(testSize)
b := GenerateScalars(testSize)
out := make(core.HostSlice[ScalarField], testSize)
cfg := core.DefaultVecOpsConfig()
// Perform vector multiplication
err := VecOp(a, b, out, cfg, core.Mul)
if err != cr.CudaSuccess {
panic("Vector multiplication failed")
}
}
VecOps Method​
func VecOp(a, b, out core.HostOrDeviceSlice, config core.VecOpsConfig, op core.VecOps) (ret cr.CudaError)
Parameters​
- a: The first input vector.
- b: The second input vector.
- out: The output vector where the result of the operation will be stored.
- config: A
VecOpsConfig
object containing various configuration options for the vector operations. - op: The operation to perform, specified as one of the constants (
Sub
,Add
,Mul
) from theVecOps
type.
Return Value​
- CudaError: Returns a CUDA error code indicating the success or failure of the vector operation.
VecOpsConfig​
The VecOpsConfig
structure holds configuration parameters for the vector operations, allowing customization of its behavior.
type VecOpsConfig struct {
Ctx cr.DeviceContext
isAOnDevice bool
isBOnDevice bool
isResultOnDevice bool
IsResultMontgomeryForm bool
IsAsync bool
}
Fields​
- Ctx: Device context containing details like device ID and stream ID.
- isAOnDevice: Indicates if vector
a
is located on the device. - isBOnDevice: Indicates if vector
b
is located on the device. - isResultOnDevice: Specifies where the result vector should be stored (device or host memory).
- IsResultMontgomeryForm: Determines if the result vector should be in Montgomery form.
- IsAsync: Controls whether the vector operation runs asynchronously.
Default Configuration​
Use DefaultVecOpsConfig
to obtain a default configuration, customizable as needed.
func DefaultVecOpsConfig() VecOpsConfig