Racket是否提供任何用于实现具有自己的GC的语言来管理GPU内存?

时间:2018-02-11 08:41:19

标签: garbage-collection racket

我正在研究this,我有一些遗憾,我将不得不为GPU内存做一些基于区域的内存分配方案,因为.NET不允许对其进行足够的控制。 GC。

我太天真了。我承认它确实让我想到了,因为我在GC平台上,我(并且应该)不必进行手动内存管理,也不需要知道C malloc如何工作以及如何实现。我想做得比这更好。

Racket在这个领域的设施是什么?

1 个答案:

答案 0 :(得分:2)

没有。 GPU处理器与CPU不同,实际上并不运行任何GC语言实现,而是运行一些非常低级的代码(例如使用OpenCLCUDAOpenACC或{ {3}})。它们实际上没有一些通用SPIR,甚至可能没有任何dynamic memory allocationvirtual memory。他们的记忆通常是分开的。

你可以做的是使用一些现有库,其中有一些MMU(如GPU compute kernelsTensorFlow等...)并从中调用该库基于Racket的东西使用一些外部功能界面。

你可以用做很多工作(可能好几年),在OpenCL或CUDA(或OpenCV)中生成一些内核代码 - 与其他一些生成的代码管理混合内核代码 - 即从Spiral语言的一个小子集(很难定义)到OpenCL或CUDA内核中实现编译器。在这种情况下,邪恶存在于细节中(并且您将生成的内核代码将取决于特定的GPU 模型)。您可以查看SPIR的灵感。

  

我也不需要知道C malloc是如何工作的,也不知道它是如何实现的。

比这更糟糕。你需要关注 lot 的低级细节,你需要编写特定于你的操作系统和硬件的东西,并且理解C malloc比处理所有GPU细节更容易(也就是说,生成“正确”的GPU和粘合代码:深入了解OpenCL的规范以获取更多信息。

(我相信将Spiral编译成GPU内核代码以及在CPU中运行必要的胶水代码是不值得的 - 几年 -

您还应该阅读有关垃圾收集的更多信息,例如: SPOC

  

我太天真了。

你可能还是。如果您想要有效且有竞争力的实施,您的主题比您的想法更难。编写一个简单的GC(或VM)很容易,但编写一个有效的GC很难(需要几年的工作)。

  

我想做得比这更好。

你需要几年的全职工作。