用于不同应用程序的 CUDA 设备堆内存
CUDA device heap memory for different applications
我正在尝试做一个实验。我有两个应用程序。在一个应用程序中,我将堆内存从默认的 8MB 更改为 4MB,然后启动内核,最后我忙于等待。在另一个应用程序中,我只是查询设备的堆内存大小。有趣的是,对于内核启动后的第一个应用程序,我继续获得 4MB,而对于其他应用程序,我继续获得 8MB。为什么会这样?
应用程序 1 的代码是 -
__global__ void kernelA()
{
printf("I am running on kernelAn");
}
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 %dn",(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 %dn",(int)size);
}
}
CUDA 运行时 API 调用仅影响与特定设备关联的调用进程中的 CUcontext。 cudaDevice* 不会直接影响同一进程中可能在同一 CUDA 设备上运行的其他进程或其他 CUcontext 的状态。
相关文章:
- CUDA:统一内存和指针地址的更改
- CUDA 使用共享内存平铺 3D 卷积实现
- 在统一内存 CUDA C/C++ 中分配 2D 向量
- CUDA非法访问内核内存
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- CUDA 数组如何存储在 GPU 内存中?它们在物理上是线性的吗?
- 越界访问 CUDA 共享内存
- 矩阵矢量产品 CUDA 通过平铺和共享内存提高性能
- CUDA - 统一内存(至少是帕斯卡)
- CUDA 中的递归返回非法内存访问
- CUDA:来自不同翘曲但相同块的 2 个线程尝试写入相同的共享内存位置:危险?
- GPU 内存访问和使用 (CUDA)
- CUDA我的共享内存代码不起作用,我缺少什么
- 支持 CUDA 统一内存的系统分配器的操作系统版本
- 降低CUDA内核运行时:内核中矩阵的动态内存分配
- 在类中声明 CUDA __constant__内存
- CUDA:共享内存的超载以用多个数组实现还原方法
- 为什么CUDA共享内存比瓷砖矩阵乘法中的全局内存慢
- Mvapich在内核运行时在CUDA内存上僵局
- 我可以在CUDA设备上为包含浮点数数组的对象分配内存吗