mirror of
https://github.com/fumiama/gozel.git
synced 2026-06-22 11:30:29 +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