c++ - 不同应用的CUDA设备堆内存

标签 c++ cuda heap-memory

我正在尝试做一个实验。我有两个应用程序。在一个应用程序中,我将堆内存从默认的 8MB 更改为 4MB,然后启动内核,最后我忙着等待。 在另一个应用程序中,我只是查询设备的堆内存大小。有趣的是,对于内核启动后的第一个应用程序,我继续获得 4MB,而对于其他应用程序,我继续获得 8MB。为什么会这样?

应用程序 1 的代码是 -

__global__ void kernelA()
{
    printf("I am running on kernelA\n");
}
int main()
{
    size_t size;
    cudaDeviceSetLimit(cudaLimitMallocHeapSize,100*sizeof(float));
    cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
    printf("Heap size found to be %dn",(int)size);
    kernelA<<<1,10>>>();
    cudaThreadSynchronize();
    while(1)
    {           
        cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
        printf("Heap size found to be %d\n",(int)size); 
    }
}

应用程序 2 的代码是 -

int main()
{
    int k=1;
    size_t size;    
    for(k=1;k<1000000;k++)
    {
        cudaDeviceGetLimit(&size, cudaLimitMallocHeapSize);
        printf("Heap size found to be %d\n",(int)size);     
    }
}

最佳答案

CUDA 运行时 API 调用仅影响与特定设备关联的调用进程中的 CUcontext。 cudaDevice* 不会直接影响可能在同一 CUDA 设备上运行的同一进程中的其他进程或其他 CUcontext 的状态。

关于c++ - 不同应用的CUDA设备堆内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10858288/

相关文章:

python - pytorch CUDA 版本与 Nvidia CUDA 版本

cuda - 这是 CUDA 中的错误吗? (遇到非法内存访问)

java - 30-100GB 大堆的高效 GC 收集

C:如何释放链表中的节点?

c++ - 错误 : ‘IOV_MAX’ undeclared (first use in this function)

c - 将数据从 C 中的 2d 动态数组传输到 CUDA 并返回

c++ - 在 C++ MFC 中使用 EnableMDITabbedGroups 时如何保留文档 Tab 键顺序

java - activeMQ fileQueueCursor(堆大小)

c++ - Qt 5.12 Mac OS X 版本号bug

java - 像Java一样在类内部定义C++方法