Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions src/cuda/device.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,6 +90,10 @@ CUresult cuDeviceGetLuid(char *luid, unsigned int *deviceNodeMask,
CUresult cuDeviceTotalMem_v2 ( size_t* bytes, CUdevice dev ) {
LOG_DEBUG("into cuDeviceTotalMem");
ENSURE_INITIALIZED();
if (dev < 0 || dev >= CUDA_DEVICE_MAX_COUNT) {
LOG_ERROR("Illegal device id: %d", dev);
return CUDA_ERROR_INVALID_DEVICE;
}
size_t limit = get_current_device_memory_limit(dev);
*bytes = limit;
return CUDA_SUCCESS;
Expand Down
34 changes: 23 additions & 11 deletions src/multiprocess/multiprocess_memory_limit.c
Original file line number Diff line number Diff line change
Expand Up @@ -1121,10 +1121,18 @@
if (init_flag != MULTIPROCESS_SHARED_REGION_MAGIC_FLAG) {
region->major_version = MAJOR_VERSION;
region->minor_version = MINOR_VERSION;
do_init_device_memory_limits(
region->limit, CUDA_DEVICE_MAX_COUNT);
do_init_device_sm_limits(
region->sm_limit,CUDA_DEVICE_MAX_COUNT);
{
uint64_t init_limits[CUDA_DEVICE_MAX_COUNT];
int i;
do_init_device_memory_limits(init_limits, CUDA_DEVICE_MAX_COUNT);
for (i = 0; i < CUDA_DEVICE_MAX_COUNT; ++i) {
atomic_store_explicit(&region->limit[i], init_limits[i], memory_order_relaxed);
}

Check failure on line 1130 in src/multiprocess/multiprocess_memory_limit.c

View workflow job for this annotation

GitHub Actions / cpplint

[cpplint] reported by reviewdog 🐶 Missing space before { [whitespace/braces] [5] Raw Output: src/multiprocess/multiprocess_memory_limit.c:1130: Missing space before { [whitespace/braces] [5]

Check failure on line 1130 in src/multiprocess/multiprocess_memory_limit.c

View workflow job for this annotation

GitHub Actions / cpplint

[cpplint] reported by reviewdog 🐶 Missing spaces around != [whitespace/operators] [3] Raw Output: src/multiprocess/multiprocess_memory_limit.c:1130: Missing spaces around != [whitespace/operators] [3]
do_init_device_sm_limits(init_limits, CUDA_DEVICE_MAX_COUNT);

Check failure on line 1131 in src/multiprocess/multiprocess_memory_limit.c

View workflow job for this annotation

GitHub Actions / cpplint

[cpplint] reported by reviewdog 🐶 Missing space after , [whitespace/comma] [3] Raw Output: src/multiprocess/multiprocess_memory_limit.c:1131: Missing space after , [whitespace/comma] [3]
for (i = 0; i < CUDA_DEVICE_MAX_COUNT; ++i) {
atomic_store_explicit(&region->sm_limit[i], init_limits[i], memory_order_relaxed);

Check failure on line 1133 in src/multiprocess/multiprocess_memory_limit.c

View workflow job for this annotation

GitHub Actions / cpplint

[cpplint] reported by reviewdog 🐶 Missing space after , [whitespace/comma] [3] Raw Output: src/multiprocess/multiprocess_memory_limit.c:1133: Missing space after , [whitespace/comma] [3]
}
}

Check failure on line 1135 in src/multiprocess/multiprocess_memory_limit.c

View workflow job for this annotation

GitHub Actions / cpplint

[cpplint] reported by reviewdog 🐶 Missing space after , [whitespace/comma] [3] Raw Output: src/multiprocess/multiprocess_memory_limit.c:1135: Missing space after , [whitespace/comma] [3]

Check failure on line 1135 in src/multiprocess/multiprocess_memory_limit.c

View workflow job for this annotation

GitHub Actions / cpplint

[cpplint] reported by reviewdog 🐶 Missing spaces around == [whitespace/operators] [3] Raw Output: src/multiprocess/multiprocess_memory_limit.c:1135: Missing spaces around == [whitespace/operators] [3]
if (sem_init(&region->sem, 1, 1) != 0) {
LOG_ERROR("Fail to init sem %s: errno=%d", shr_reg_file, errno);
}
Expand Down Expand Up @@ -1237,12 +1245,13 @@

int set_current_device_sm_limit_scale(int dev, int scale) {
ensure_initialized();
if (region_info.shared_region->sm_init_flag==1) return 0;
if (dev < 0 || dev >= CUDA_DEVICE_MAX_COUNT) {
LOG_ERROR("Illegal device id: %d", dev);
return -1;
}
LOG_INFO("dev %d new sm limit set mul by %d",dev,scale);
region_info.shared_region->sm_limit[dev]=region_info.shared_region->sm_limit[dev]*scale;
if (region_info.shared_region->sm_init_flag == 1) return 0;
LOG_INFO("dev %d new sm limit set mul by %d", dev, scale);
region_info.shared_region->sm_limit[dev] = region_info.shared_region->sm_limit[dev] * scale;
region_info.shared_region->sm_init_flag = 1;
return 0;
}
Expand All @@ -1251,26 +1260,29 @@
ensure_initialized();
if (dev < 0 || dev >= CUDA_DEVICE_MAX_COUNT) {
LOG_ERROR("Illegal device id: %d", dev);
return -1;
}
return region_info.shared_region->sm_limit[dev];
return atomic_load_explicit(&region_info.shared_region->sm_limit[dev], memory_order_acquire);
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}

int set_current_device_memory_limit(const int dev,size_t newlimit) {
ensure_initialized();
if (dev < 0 || dev >= CUDA_DEVICE_MAX_COUNT) {
LOG_ERROR("Illegal device id: %d", dev);
return -1;
}
LOG_INFO("dev %d new limit set to %ld",dev,newlimit);
region_info.shared_region->limit[dev]=newlimit;
return 0;
atomic_store_explicit(&region_info.shared_region->limit[dev], newlimit, memory_order_release);
return 0;
}

uint64_t get_current_device_memory_limit(const int dev) {
ensure_initialized();
if (dev < 0 || dev >= CUDA_DEVICE_MAX_COUNT) {
LOG_ERROR("Illegal device id: %d", dev);
return 0;
}
return region_info.shared_region->limit[dev];
return atomic_load_explicit(&region_info.shared_region->limit[dev], memory_order_acquire);
}

uint64_t get_current_device_memory_monitor(const int dev) {
Expand Down
4 changes: 2 additions & 2 deletions src/multiprocess/multiprocess_memory_limit.h
Original file line number Diff line number Diff line change
Expand Up @@ -97,8 +97,8 @@ typedef struct {
sem_t sem; // Only for process slot add/remove
uint64_t device_num;
uuid uuids[CUDA_DEVICE_MAX_COUNT];
uint64_t limit[CUDA_DEVICE_MAX_COUNT];
uint64_t sm_limit[CUDA_DEVICE_MAX_COUNT];
_Atomic uint64_t limit[CUDA_DEVICE_MAX_COUNT];
_Atomic uint64_t sm_limit[CUDA_DEVICE_MAX_COUNT];
shrreg_proc_slot_t procs[SHARED_REGION_MAX_PROCESS_NUM];
_Atomic int proc_num;
_Atomic int utilization_switch;
Expand Down
Loading