1
0
mirror of https://github.com/fumiama/gozel.git synced 2026-06-05 00:10:24 +08:00

init: project framework

This commit is contained in:
源文雨
2026-03-11 00:17:13 +08:00
parent a91a6683f3
commit f39461341c
5 changed files with 157 additions and 0 deletions

16
cmd/gemm/main.go Normal file
View File

@@ -0,0 +1,16 @@
package main
import (
"fmt"
"github.com/fumiama/gozel"
)
func main() {
err := gozel.InitZe()
if err != nil {
panic(err)
}
desc := gozel.GPGPUDriverTypeDesc()
fmt.Println(gozel.InitDrivers(&desc))
}

3
go.mod Normal file
View File

@@ -0,0 +1,3 @@
module github.com/fumiama/gozel
go 1.26.1

27
init_windows.go Normal file
View File

@@ -0,0 +1,27 @@
package gozel
import (
"fmt"
"syscall"
)
const (
zeLibraryName = "ze_loader.dll"
)
var (
libZeLoader syscall.DLL
)
func InitZe() error {
h, err := syscall.LoadLibrary(zeLibraryName)
if err != nil {
return err
}
libZeLoader = syscall.DLL{Handle: h, Name: zeLibraryName}
procZeInitDrivers, err = libZeLoader.FindProc("zeInitDrivers")
if err != nil {
return fmt.Errorf("zeInitDrivers not found in ze_loader.dll: %w", err)
}
return nil
}

74
types.go Normal file
View File

@@ -0,0 +1,74 @@
package gozel
import "unsafe"
// ZeResult maps to ze_result_t
type ZeResult uint32
const (
ZeResultSuccess ZeResult = 0x00000000
ZeResultNotReady ZeResult = 0x00000001
ZeResultErrorUninitialized ZeResult = 0x78000001
ZeResultErrorInvalidArgument ZeResult = 0x78000004
ZeResultErrorOutOfHostMemory ZeResult = 0x78000006
ZeResultErrorOutOfDeviceMemory ZeResult = 0x78000007
ZeResultErrorUnsupported ZeResult = 0x78000009
)
func (r ZeResult) Error() string {
switch r {
case ZeResultSuccess:
return "ZE_RESULT_SUCCESS"
case ZeResultNotReady:
return "ZE_RESULT_NOT_READY"
case ZeResultErrorUninitialized:
return "ZE_RESULT_ERROR_UNINITIALIZED"
case ZeResultErrorInvalidArgument:
return "ZE_RESULT_ERROR_INVALID_ARGUMENT"
case ZeResultErrorOutOfHostMemory:
return "ZE_RESULT_ERROR_OUT_OF_HOST_MEMORY"
case ZeResultErrorOutOfDeviceMemory:
return "ZE_RESULT_ERROR_OUT_OF_DEVICE_MEMORY"
case ZeResultErrorUnsupported:
return "ZE_RESULT_ERROR_UNSUPPORTED_FEATURE"
default:
return "ZE_RESULT_UNKNOWN"
}
}
// ZeDriverHandle maps to ze_driver_handle_t (opaque pointer)
type ZeDriverHandle uintptr
// ZeStructureType maps to ze_structure_type_t (selected values)
type ZeStructureType uint32
const (
// ZeStructureTypeInitDriverTypeDesc maps to ZE_STRUCTURE_TYPE_INIT_DRIVER_TYPE_DESC
ZeStructureTypeInitDriverTypeDesc ZeStructureType = 0x00020002
)
// ZeInitDriverTypeFlags maps to ze_init_driver_type_flag_t
type ZeInitDriverTypeFlags uint32
const (
ZeInitDriverTypeGPU ZeInitDriverTypeFlags = 1 << 0
ZeInitDriverTypeNPU ZeInitDriverTypeFlags = 1 << 1
// ZeInitDriverTypeAll selects all driver types (GPU + NPU)
ZeInitDriverTypeAll ZeInitDriverTypeFlags = ZeInitDriverTypeGPU | ZeInitDriverTypeNPU
)
// ZeInitDriverTypeDesc maps to ze_init_driver_type_desc_t
type ZeInitDriverTypeDesc struct {
Stype ZeStructureType
PNext unsafe.Pointer
Flags ZeInitDriverTypeFlags
}
// GPGPUDriverTypeDesc returns a ZeInitDriverTypeDesc configured for GPGPU
// (GPU driver only, correct stype).
func GPGPUDriverTypeDesc() ZeInitDriverTypeDesc {
return ZeInitDriverTypeDesc{
Stype: ZeStructureTypeInitDriverTypeDesc,
Flags: ZeInitDriverTypeGPU,
}
}

37
ze_core_driver_windows.go Normal file
View File

@@ -0,0 +1,37 @@
package gozel
import (
"syscall"
"unsafe"
)
var procZeInitDrivers *syscall.Proc
// InitDrivers calls zeInitDrivers from ze_loader.dll.
// On success pCount contains the number of drivers and phDrivers (if non-nil)
// is filled with driver handles.
func InitDrivers(desc *ZeInitDriverTypeDesc) ([]ZeDriverHandle, error) {
var count uint32
r, _, _ := procZeInitDrivers.Call(
uintptr(unsafe.Pointer(&count)),
0,
uintptr(unsafe.Pointer(desc)),
)
if ZeResult(r) != ZeResultSuccess {
return nil, ZeResult(r)
}
if count == 0 {
return nil, nil
}
handles := make([]ZeDriverHandle, count)
r, _, _ = procZeInitDrivers.Call(
uintptr(unsafe.Pointer(&count)),
uintptr(unsafe.Pointer(&handles[0])),
uintptr(unsafe.Pointer(desc)),
)
if ZeResult(r) != ZeResultSuccess {
return nil, ZeResult(r)
}
return handles, nil
}