我在.NET中通过P/Invoke使用CUDA。在CUDA中,它们提供了一种特殊的内存分配方法,它可以在GPU上分配内存,同时可以从主机访问它们(当然,从.NET角度来看,这是非托管内存)。这被称为CUDA的统一存储器,它模糊CPU和GPU内存之间的板卡。是否有可能改变.NET数组的分配方法?
那么,是否有可能将默认的.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);
}
};
我不认为这是可能的,但你可以处理指针和[''stackalloc''](https://msdn.microsoft.com/en-US/library/cx9s2sy4.aspx)在[ ''unsafe''](https://msdn.microsoft.com/en-US/library/chfa2zb8.aspx)上下文。 –