opencl fix for no gpu, harmonytask fix gpu sched

This commit is contained in:
Andrew Jackson (Ajax) 2023-08-28 17:16:56 -05:00
parent a94223c129
commit 3d60a65906
3 changed files with 10 additions and 63 deletions

View File

@ -323,8 +323,8 @@ func (e *TaskEngine) ApplyHttpHandlers(root gin.IRouter) {
s := root.Group("/scheduler")
f := s.Group("/follows")
b := s.Group("/bump")
for name, vsTmp := range e.follows {
vs := vsTmp
for name, vs := range e.follows {
name, vs := name, vs
f.GET("/"+name+"/:tID", func(c *gin.Context) {
tIDString := c.Param("tID")
tID, err := strconv.Atoi(tIDString)
@ -402,7 +402,7 @@ func (e *TaskEngine) resourcesInUse() resources.Resources {
for i := int32(0); i < ct; i++ {
for grIdx, j := range tmp.GpuRam {
if j > t.Cost.GpuRam[0] {
tmp.GpuRam[grIdx] = j - t.Cost.GpuRam[0]
tmp.GpuRam[grIdx] = 0 // Only 1 per GPU. j - t.Cost.GpuRam[0]
break
}
}

View File

@ -5,7 +5,6 @@ package cl
// #include "cl.h"
import "C"
import (
"errors"
"fmt"
"unsafe"
)
@ -20,7 +19,11 @@ type Platform struct {
func GetPlatforms() ([]*Platform, error) {
var platformIds [maxPlatforms]C.cl_platform_id
var nPlatforms C.cl_uint
if err := C.clGetPlatformIDs(C.cl_uint(maxPlatforms), &platformIds[0], &nPlatforms); err != C.CL_SUCCESS {
err := C.clGetPlatformIDs(C.cl_uint(maxPlatforms), &platformIds[0], &nPlatforms)
if err == -1001 { // No platforms found
return nil, nil
}
if err != C.CL_SUCCESS {
return nil, toError(err)
}
platforms := make([]*Platform, nPlatforms)
@ -62,70 +65,14 @@ func (p *Platform) GetAllDevices() ([]*Device, error) {
return devices, nil
}
var errorMap = map[C.cl_int]string{
C.CL_SUCCESS: "nil",
C.CL_DEVICE_NOT_FOUND: "ErrDeviceNotFound",
C.CL_DEVICE_NOT_AVAILABLE: "ErrDeviceNotAvailable",
C.CL_COMPILER_NOT_AVAILABLE: "ErrCompilerNotAvailable",
C.CL_MEM_OBJECT_ALLOCATION_FAILURE: "ErrMemObjectAllocationFailure",
C.CL_OUT_OF_RESOURCES: "ErrOutOfResources",
C.CL_OUT_OF_HOST_MEMORY: "ErrOutOfHostMemory",
C.CL_PROFILING_INFO_NOT_AVAILABLE: "ErrProfilingInfoNotAvailable",
C.CL_MEM_COPY_OVERLAP: "ErrMemCopyOverlap",
C.CL_IMAGE_FORMAT_MISMATCH: "ErrImageFormatMismatch",
C.CL_IMAGE_FORMAT_NOT_SUPPORTED: "ErrImageFormatNotSupported",
C.CL_BUILD_PROGRAM_FAILURE: "ErrBuildProgramFailure",
C.CL_MAP_FAILURE: "ErrMapFailure",
C.CL_MISALIGNED_SUB_BUFFER_OFFSET: "ErrMisalignedSubBufferOffset",
C.CL_EXEC_STATUS_ERROR_FOR_EVENTS_IN_WAIT_LIST: "ErrExecStatusErrorForEventsInWaitList",
C.CL_INVALID_VALUE: "ErrInvalidValue",
C.CL_INVALID_DEVICE_TYPE: "ErrInvalidDeviceType",
C.CL_INVALID_PLATFORM: "ErrInvalidPlatform",
C.CL_INVALID_DEVICE: "ErrInvalidDevice",
C.CL_INVALID_CONTEXT: "ErrInvalidContext",
C.CL_INVALID_QUEUE_PROPERTIES: "ErrInvalidQueueProperties",
C.CL_INVALID_COMMAND_QUEUE: "ErrInvalidCommandQueue",
C.CL_INVALID_HOST_PTR: "ErrInvalidHostPtr",
C.CL_INVALID_MEM_OBJECT: "ErrInvalidMemObject",
C.CL_INVALID_IMAGE_FORMAT_DESCRIPTOR: "ErrInvalidImageFormatDescriptor",
C.CL_INVALID_IMAGE_SIZE: "ErrInvalidImageSize",
C.CL_INVALID_SAMPLER: "ErrInvalidSampler",
C.CL_INVALID_BINARY: "ErrInvalidBinary",
C.CL_INVALID_BUILD_OPTIONS: "ErrInvalidBuildOptions",
C.CL_INVALID_PROGRAM: "ErrInvalidProgram",
C.CL_INVALID_PROGRAM_EXECUTABLE: "ErrInvalidProgramExecutable",
C.CL_INVALID_KERNEL_NAME: "ErrInvalidKernelName",
C.CL_INVALID_KERNEL_DEFINITION: "ErrInvalidKernelDefinition",
C.CL_INVALID_KERNEL: "ErrInvalidKernel",
C.CL_INVALID_ARG_INDEX: "ErrInvalidArgIndex",
C.CL_INVALID_ARG_VALUE: "ErrInvalidArgValue",
C.CL_INVALID_ARG_SIZE: "ErrInvalidArgSize",
C.CL_INVALID_KERNEL_ARGS: "ErrInvalidKernelArgs",
C.CL_INVALID_WORK_DIMENSION: "ErrInvalidWorkDimension",
C.CL_INVALID_WORK_GROUP_SIZE: "ErrInvalidWorkGroupSize",
C.CL_INVALID_WORK_ITEM_SIZE: "ErrInvalidWorkItemSize",
C.CL_INVALID_GLOBAL_OFFSET: "ErrInvalidGlobalOffset",
C.CL_INVALID_EVENT_WAIT_LIST: "ErrInvalidEventWaitList",
C.CL_INVALID_EVENT: "ErrInvalidEvent",
C.CL_INVALID_OPERATION: "ErrInvalidOperation",
C.CL_INVALID_GL_OBJECT: "ErrInvalidGlObject",
C.CL_INVALID_BUFFER_SIZE: "ErrInvalidBufferSize",
C.CL_INVALID_MIP_LEVEL: "ErrInvalidMipLevel",
C.CL_INVALID_GLOBAL_WORK_SIZE: "ErrInvalidGlobalWorkSize",
C.CL_INVALID_PROPERTY: "ErrInvalidProperty",
}
func toError(code C.cl_int) error {
if err, ok := errorMap[code]; ok {
return errors.New(err)
}
return ErrOther(code)
}
type ErrOther int
func (e ErrOther) Error() string {
return fmt.Sprintf("cl: error %d", int(e))
return fmt.Sprintf("OpenCL: error %d", int(e))
}
// Size of global device memory in bytes.

View File

@ -132,7 +132,7 @@ func getResources() (res Resources, err error) {
}
all := strings.ToLower(strings.Join(gpus, ","))
if len(gpus) > 1 || strings.Contains(all, "ati") || strings.Contains(all, "nvidia") {
res.Gpu = 1
res.Gpu = float64(len(gpus))
}
}