39928a42e8
This switches darwin to dynamic loading, and refactors the code now that no static linking of the library is used on any platform
54 lines
1.1 KiB
Go
54 lines
1.1 KiB
Go
//go:build darwin
|
|
|
|
package gpu
|
|
|
|
import "C"
|
|
import (
|
|
"runtime"
|
|
|
|
"github.com/pbnjay/memory"
|
|
)
|
|
|
|
// CheckVRAM returns the free VRAM in bytes on Linux machines with NVIDIA GPUs
|
|
func CheckVRAM() (int64, error) {
|
|
if runtime.GOARCH == "amd64" {
|
|
// gpu not supported, this may not be metal
|
|
return 0, nil
|
|
}
|
|
|
|
// on macOS, there's already buffer for available vram (see below) so just return the total
|
|
systemMemory := int64(memory.TotalMemory())
|
|
|
|
// macOS limits how much memory is available to the GPU based on the amount of system memory
|
|
// TODO: handle case where iogpu.wired_limit_mb is set to a higher value
|
|
if systemMemory <= 36*1024*1024*1024 {
|
|
systemMemory = systemMemory * 2 / 3
|
|
} else {
|
|
systemMemory = systemMemory * 3 / 4
|
|
}
|
|
|
|
return systemMemory, nil
|
|
}
|
|
|
|
func GetGPUInfo() GpuInfo {
|
|
mem, _ := getCPUMem()
|
|
if runtime.GOARCH == "amd64" {
|
|
return GpuInfo{
|
|
Library: "default",
|
|
Variant: GetCPUVariant(),
|
|
memInfo: mem,
|
|
}
|
|
}
|
|
return GpuInfo{
|
|
Library: "metal",
|
|
memInfo: mem,
|
|
}
|
|
}
|
|
|
|
func getCPUMem() (memInfo, error) {
|
|
return memInfo{
|
|
TotalMemory: 0,
|
|
FreeMemory: 0,
|
|
DeviceCount: 0,
|
|
}, nil
|
|
}
|