mirror of
				https://github.com/NVIDIA/cuda-samples.git
				synced 2025-11-04 07:27:49 +08:00 
			
		
		
		
	Bug4914019 & 4191696: Append pid in shmName for MIG multiple thread scenario
This commit is contained in:
		
							parent
							
								
									952d6edf92
								
							
						
					
					
						commit
						ad9908e32b
					
				@ -99,8 +99,18 @@ static void childProcess(int id)
 | 
			
		||||
    std::vector<void *>      ptrs;
 | 
			
		||||
    std::vector<cudaEvent_t> events;
 | 
			
		||||
    std::vector<char>        verification_buffer(DATA_SIZE);
 | 
			
		||||
    pid_t                    pid;
 | 
			
		||||
    char                     pidString[20] = {0};
 | 
			
		||||
    char                     lshmName[40] = {0};
 | 
			
		||||
 | 
			
		||||
    if (sharedMemoryOpen(shmName, sizeof(shmStruct), &info) != 0) {
 | 
			
		||||
    pid = getppid();
 | 
			
		||||
    snprintf(pidString, sizeof(pidString), "%d", pid);
 | 
			
		||||
    strcat(lshmName, shmName);
 | 
			
		||||
    strcat(lshmName, pidString);
 | 
			
		||||
 | 
			
		||||
    printf("CP: lshmName = %s\n", lshmName);
 | 
			
		||||
 | 
			
		||||
    if (sharedMemoryOpen(lshmName, sizeof(shmStruct), &info) != 0) {
 | 
			
		||||
        printf("Failed to create shared memory slab\n");
 | 
			
		||||
        exit(EXIT_FAILURE);
 | 
			
		||||
    }
 | 
			
		||||
@ -195,10 +205,20 @@ static void parentProcess(char *app)
 | 
			
		||||
    std::vector<void *>      ptrs;
 | 
			
		||||
    std::vector<cudaEvent_t> events;
 | 
			
		||||
    std::vector<Process>     processes;
 | 
			
		||||
    pid_t                    pid;
 | 
			
		||||
    char                     pidString[20] = {0};
 | 
			
		||||
    char                     lshmName[40] = {0};
 | 
			
		||||
 | 
			
		||||
    pid = getpid();
 | 
			
		||||
    snprintf(pidString, sizeof(pidString), "%d", pid);
 | 
			
		||||
    strcat(lshmName, shmName);
 | 
			
		||||
    strcat(lshmName, pidString);
 | 
			
		||||
 | 
			
		||||
    printf("PP: lshmName = %s\n", lshmName);
 | 
			
		||||
 | 
			
		||||
    checkCudaErrors(cudaGetDeviceCount(&devCount));
 | 
			
		||||
 | 
			
		||||
    if (sharedMemoryCreate(shmName, sizeof(*shm), &info) != 0) {
 | 
			
		||||
    if (sharedMemoryCreate(lshmName, sizeof(*shm), &info) != 0) {
 | 
			
		||||
        printf("Failed to create shared memory slab\n");
 | 
			
		||||
        exit(EXIT_FAILURE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -102,13 +102,23 @@ static void childProcess(int id)
 | 
			
		||||
    int                 threads = 128;
 | 
			
		||||
    cudaDeviceProp      prop;
 | 
			
		||||
    std::vector<void *> ptrs;
 | 
			
		||||
    pid_t               pid;
 | 
			
		||||
    char                pidString[20] = {0};
 | 
			
		||||
    char                lshmName[40] = {0};
 | 
			
		||||
 | 
			
		||||
    std::vector<char> verification_buffer(DATA_SIZE);
 | 
			
		||||
 | 
			
		||||
    pid = getppid();
 | 
			
		||||
    snprintf(pidString, sizeof(pidString), "%d", pid);
 | 
			
		||||
    strcat(lshmName, shmName);
 | 
			
		||||
    strcat(lshmName, pidString);
 | 
			
		||||
 | 
			
		||||
    printf("CP: lshmName = %s\n", lshmName);
 | 
			
		||||
 | 
			
		||||
    ipcHandle *ipcChildHandle = NULL;
 | 
			
		||||
    checkIpcErrors(ipcOpenSocket(ipcChildHandle));
 | 
			
		||||
 | 
			
		||||
    if (sharedMemoryOpen(shmName, sizeof(shmStruct), &info) != 0) {
 | 
			
		||||
    if (sharedMemoryOpen(lshmName, sizeof(shmStruct), &info) != 0) {
 | 
			
		||||
        printf("Failed to create shared memory slab\n");
 | 
			
		||||
        exit(EXIT_FAILURE);
 | 
			
		||||
    }
 | 
			
		||||
@ -245,6 +255,16 @@ static void parentProcess(char *app)
 | 
			
		||||
    std::vector<void *>         ptrs;
 | 
			
		||||
    std::vector<Process>        processes;
 | 
			
		||||
    cudaMemAllocationHandleType handleType = cudaMemHandleTypeNone;
 | 
			
		||||
    pid_t                       pid;
 | 
			
		||||
    char                        pidString[20] = {0};
 | 
			
		||||
    char                        lshmName[40] = {0};
 | 
			
		||||
 | 
			
		||||
    pid = getpid();
 | 
			
		||||
    snprintf(pidString, sizeof(pidString), "%d", pid);
 | 
			
		||||
    strcat(lshmName, shmName);
 | 
			
		||||
    strcat(lshmName, pidString);
 | 
			
		||||
 | 
			
		||||
    printf("PP: lshmName = %s\n", lshmName);
 | 
			
		||||
 | 
			
		||||
    checkCudaErrors(cudaGetDeviceCount(&devCount));
 | 
			
		||||
    std::vector<CUdevice> devices(devCount);
 | 
			
		||||
@ -252,7 +272,7 @@ static void parentProcess(char *app)
 | 
			
		||||
        cuDeviceGet(&devices[i], i);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    if (sharedMemoryCreate(shmName, sizeof(*shm), &info) != 0) {
 | 
			
		||||
    if (sharedMemoryCreate(lshmName, sizeof(*shm), &info) != 0) {
 | 
			
		||||
        printf("Failed to create shared memory slab\n");
 | 
			
		||||
        exit(EXIT_FAILURE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -310,10 +310,20 @@ static void childProcess(int devId, int id, char **argv)
 | 
			
		||||
    ipcHandle          *ipcChildHandle = NULL;
 | 
			
		||||
    int                 blocks         = 0;
 | 
			
		||||
    int                 threads        = 128;
 | 
			
		||||
    pid_t               pid;
 | 
			
		||||
    char                pidString[20]  = {0};
 | 
			
		||||
    char                lshmName[40]   = {0};
 | 
			
		||||
 | 
			
		||||
    pid = getppid();
 | 
			
		||||
    snprintf(pidString, sizeof(pidString), "%d", pid);
 | 
			
		||||
    strcat(lshmName, shmName);
 | 
			
		||||
    strcat(lshmName, pidString);
 | 
			
		||||
 | 
			
		||||
    printf("CP: lshmName = %s\n", lshmName);
 | 
			
		||||
 | 
			
		||||
    checkIpcErrors(ipcOpenSocket(ipcChildHandle));
 | 
			
		||||
 | 
			
		||||
    if (sharedMemoryOpen(shmName, sizeof(shmStruct), &info) != 0) {
 | 
			
		||||
    if (sharedMemoryOpen(lshmName, sizeof(shmStruct), &info) != 0) {
 | 
			
		||||
        printf("Failed to create shared memory slab\n");
 | 
			
		||||
        exit(EXIT_FAILURE);
 | 
			
		||||
    }
 | 
			
		||||
@ -421,11 +431,20 @@ static void parentProcess(char *app)
 | 
			
		||||
    volatile shmStruct  *shm = NULL;
 | 
			
		||||
    sharedMemoryInfo     info;
 | 
			
		||||
    std::vector<Process> processes;
 | 
			
		||||
    pid_t                pid;
 | 
			
		||||
    char                 pidString[20] = {0};
 | 
			
		||||
    char                 lshmName[40]  = {0};
 | 
			
		||||
 | 
			
		||||
    pid = getpid();
 | 
			
		||||
    snprintf(pidString, sizeof(pidString), "%d", pid);
 | 
			
		||||
    strcat(lshmName, shmName);
 | 
			
		||||
    strcat(lshmName, pidString);
 | 
			
		||||
 | 
			
		||||
    printf("PP: lshmName = %s\n", lshmName);
 | 
			
		||||
    checkCudaErrors(cuDeviceGetCount(&devCount));
 | 
			
		||||
    std::vector<CUdevice> devices(devCount);
 | 
			
		||||
 | 
			
		||||
    if (sharedMemoryCreate(shmName, sizeof(*shm), &info) != 0) {
 | 
			
		||||
    if (sharedMemoryCreate(lshmName, sizeof(*shm), &info) != 0) {
 | 
			
		||||
        printf("Failed to create shared memory slab\n");
 | 
			
		||||
        exit(EXIT_FAILURE);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user