1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859 |
- //go:build darwin
- package gpu
- /*
- #cgo CFLAGS: -x objective-c
- #cgo LDFLAGS: -framework Foundation -framework CoreGraphics -framework Metal
- #include "gpu_info_darwin.h"
- */
- import "C"
- import (
- "fmt"
- "log/slog"
- "os"
- "runtime"
- "strconv"
- )
- // CheckVRAM returns the free VRAM in bytes on Linux machines with NVIDIA GPUs
- func CheckVRAM() (uint64, error) {
- userLimit := os.Getenv("OLLAMA_MAX_VRAM")
- if userLimit != "" {
- avail, err := strconv.ParseInt(userLimit, 10, 64)
- if err != nil {
- return 0, fmt.Errorf("Invalid OLLAMA_MAX_VRAM setting %s: %s", userLimit, err)
- }
- slog.Info(fmt.Sprintf("user override OLLAMA_MAX_VRAM=%d", avail))
- return uint64(avail), nil
- }
- if runtime.GOARCH == "amd64" {
- // gpu not supported, this may not be metal
- return 0, nil
- }
- return uint64(C.getRecommendedMaxVRAM()), nil
- }
- func GetGPUInfo() GpuInfo {
- mem, _ := getCPUMem()
- if runtime.GOARCH == "amd64" {
- return GpuInfo{
- Library: "cpu",
- Variant: GetCPUVariant(),
- memInfo: mem,
- }
- }
- return GpuInfo{
- Library: "metal",
- memInfo: mem,
- }
- }
- func getCPUMem() (memInfo, error) {
- return memInfo{
- TotalMemory: 0,
- FreeMemory: 0,
- DeviceCount: 0,
- }, nil
- }
|