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:
16
cmd/gemm/main.go
Normal file
16
cmd/gemm/main.go
Normal 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))
|
||||
}
|
||||
27
init_windows.go
Normal file
27
init_windows.go
Normal 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
74
types.go
Normal 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
37
ze_core_driver_windows.go
Normal 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
|
||||
}
|
||||
Reference in New Issue
Block a user