gpuMap (Function)

Signature: gpuMap(buffer: GpuBuffer<int8> | GpuBuffer<int16> | GpuBuffer<int32> | GpuBuffer<int> | GpuBuffer<uint8> | GpuBuffer<uint16> | GpuBuffer<uint32> | GpuBuffer<float16> | GpuBuffer<float32> | GpuBuffer<float> | GpuBuffer<bool>, kernel: (t0) -> t1) -> Result<GpuBuffer<t1>, Error>

Description: Applies a pure kernel to every buffer element independently, one thread per element when OSPREY_GPU selects Metal or OpenCL. The compiler rejects a kernel that performs any effect a handler must discharge at runtime; an effect a static handler has already erased is gone before the check. Allocation, dispatch or synchronization failure returns Error with its reason.

Parameters

  • buffer (GpuBuffer<int8> | GpuBuffer<int16> | GpuBuffer<int32> | GpuBuffer<int> | GpuBuffer<uint8> | GpuBuffer<uint16> | GpuBuffer<uint32> | GpuBuffer<float16> | GpuBuffer<float32> | GpuBuffer<float> | GpuBuffer<bool>): The source buffer
  • kernel ((t0) -> t1): The pure per-element function

Returns: Result<GpuBuffer<t1>, Error>

Example

match toGpu([1, 2, 3]) {
    Success { value } => { let buffer = value
    match gpuMap(buffer, fn(x) => wrapMul(x, x)) {
        Success { value } => match gpuGet(value, 2) {
            Success { value } => print(value)
            Error { message } => print(message)
        }
        Error { message } => print(message)
    }
    }
    Error { message } => print(message)
}