【发布时间】:2015-09-14 15:40:49
【问题描述】:
我在 .NET 中通过 P/Invoke 使用 CUDA。在 CUDA 中,它们提供了一种特殊的内存分配方法,可以在 GPU 上分配内存,同时您可以从主机访问它们(当然,从 .NET 角度来看,非托管内存)。这被称为CUDA的统一内存,它模糊了CPU和GPU内存之间的板。
那么,是否可以将默认的 .NET 数组内存分配方法更改为自定义的非托管内存分配?在那个数组中,我只需要存储非常简单的原始类型,例如 int、double。
例如,在 CUDA C++ 中,它们会覆盖 new 运算符,以使 CPU 和 GPU 都能看到该类:
class Managed {
public:
void *operator new(size_t len) {
void *ptr;
cudaMallocManaged(&ptr, len);
cudaDeviceSynchronize();
return ptr;
}
void operator delete(void *ptr) {
cudaDeviceSynchronize();
cudaFree(ptr);
}
};
【问题讨论】:
-
我认为这是不可能的,但您可以在
unsafe上下文中处理指针和stackalloc。
标签: c# .net memory-management cuda