example/cuda-mps/cuda_mem_and_sm_count.c (51 lines of code) (raw):
#include <cuda.h>
#include <cuda_runtime.h>
#include <dlfcn.h>
#include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define CHECK(x, err, errcode) do { \
int retval = (x); \
if (retval != 1) { \
fprintf(stderr, "Error: %s returned %d at %s:%d\n", #x, retval, __FILE__, __LINE__); \
return(errcode); \
} \
} while (0)
int main(int argc, const char **argv)
{
int deviceCount = 0;
cudaError_t error_id = cudaGetDeviceCount(&deviceCount);
if (error_id != cudaSuccess)
{
fprintf(stderr, "cudaGetDeviceCount returned: %s\n", cudaGetErrorString(error_id));
return 1;
}
if (deviceCount == 0)
{
printf("No GPU devices found\n");
return 1;
}
for (int i = 0; i < deviceCount; i++)
{
cudaSetDevice(i);
// Get memory info, total memory and the memory can be used in this client.
size_t freeMem = 0;
size_t totalMem = 0;
error_id = cudaMemGetInfo(&freeMem, &totalMem);
if (error_id != cudaSuccess)
{
fprintf(stderr, "cudaMemGetInfo returned: %s\n", cudaGetErrorString(error_id));
return error_id;
}
printf("For device %d: Free memory: %ld M, Total memory: %ld M\n", i, freeMem/(1024*1024), totalMem/(1024*1024));
// Get device info, the multi process count can be used in this client.
int numProcs;
error_id = cudaDeviceGetAttribute(&numProcs, cudaDevAttrMultiProcessorCount, i);
if (error_id != cudaSuccess)
{
fprintf(stderr, "cudaGetDeviceProperties returned: %s\n", cudaGetErrorString(error_id));
return error_id;
}
printf("For device %d: multiProcessorCount: %d\n", i, numProcs);
}
return 0;
}