Garbage collection Racket是否提供了任何东西来实现一种语言,该语言有自己的GC来管理GPU内存?

Garbage collection Racket是否提供了任何东西来实现一种语言,该语言有自己的GC来管理GPU内存?,garbage-collection,racket,Garbage Collection,Racket,我正在工作,我有一些遗憾,我将不得不为GPU内存执行某种基于区域的内存分配方案,因为.NET不允许对其GC进行适当级别的控制 我太天真了。我承认,我确实想过,仅仅因为我在一个有GC的平台上,我就不需要(也不应该)进行手动内存管理,也不需要知道C malloc是如何工作的,也不需要知道它是如何实现的。我想做得更好 Racket在这方面的设施是什么?不。GPU处理器不像CPU,实际上不运行任何GC-ed语言实现,而是运行一些非常低级的代码(例如使用or)。它们并没有真正的通用性,甚至可能没有任何通用

我正在工作,我有一些遗憾,我将不得不为GPU内存执行某种基于区域的内存分配方案,因为.NET不允许对其GC进行适当级别的控制

我太天真了。我承认,我确实想过,仅仅因为我在一个有GC的平台上,我就不需要(也不应该)进行手动内存管理,也不需要知道C malloc是如何工作的,也不需要知道它是如何实现的。我想做得更好


Racket在这方面的设施是什么?

不。GPU处理器不像CPU,实际上不运行任何GC-ed语言实现,而是运行一些非常低级的代码(例如使用or)。它们并没有真正的通用性,甚至可能没有任何通用性。他们的记忆通常是分开的

您可以使用一些现有的库(比如,等等),并使用一些外部函数接口从基于Racket的东西调用该库

您可能需要做大量工作(可能需要几年)才能在OpenCL或CUDA(或)中生成一些内核代码——与管理该内核代码的其他生成代码混合——也就是说,将一个编译器从螺旋语言的一个小子集(需要痛苦地定义)实现为OpenCL或CUDA内核。在这种情况下,缺点就在细节中(您将生成的内核代码取决于特定的GPU型号)。你可以从中寻找灵感

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

比那更糟糕。你需要关注很多底层细节,需要编写特定于操作系统和硬件的代码,理解C malloc比关注所有GPU细节更容易(也就是说,生成“正确”的GPU和粘合代码:深入OpenCL规范了解更多信息)

(我认为,将螺旋编译成GPU内核代码和在CPU中运行的必要粘合代码是不值得的——几年)

您还应该阅读更多关于垃圾收集的内容,例如

我太天真了

你可能仍然是。如果您想要高效且有竞争力的实施,您的主题比您想象的要难。编写一个幼稚的GC(或VM)很容易,但编写一个高效的GC(或VM)很难(需要几年的工作)

我想做得更好


你需要几年的全职工作。

我已经完成了你上一段的工作-GPU内核及其编译不是问题。该语言的效率足以支持F#和Cuda以及我可能需要的任何其他功能。我离在it中创建一个世界级的ML库不远了,除了有一个很好的方法来管理在.NET中无法管理的资源。如果球拍在这方面有一个很好的故事,而我不会马上去做,我会认真考虑的。我在这里没有太多的选择,它将不得不要么是敲诈,要么我将不得不写我自己的虚拟机。你可能不得不写你自己的虚拟机。你当然应该为你的目标预算好几年的全职工作(当你完成后,你的工作可能会过时,因为GPU从那时起就已经进化了)。祝你好运,你需要很多!嗯,我已经花了一年时间,语言本身的大部分工作都完成了。我做的一些东西已经过时了,因为我有一个GTX 970,新的Cuda版本有协作组,但这不是问题,因为一旦我得到一张新卡,重写内核就不会太难了。真的,我在这里要求的是一个可以处理GPU内存的GC。您告诉我的事情需要几年时间才能完成。很好(但您的代码是否健壮且通用?)。OpenCL和AMD GPU呢?然后您需要编写自己的支持GPU的GC,这并不容易。编写一个简单的GC很容易。编写一个有竞争力的内核是很困难的。它是Cuda特有的,但除此之外,内核的通用性达到了任何其他语言都不可能达到的程度。事实上,这正是我最初创建螺旋的原因——必须手工编写包装器并使用文本宏进行通用地图操作,这在我2016年的前一个库中简直是地狱。出于好奇,你的螺旋是一个爱好项目吗,或者你有机会获得资助4到7年的全职工作吗?我想你可以称之为一个爱好项目,但我没有更好的工作,所以我正在全职工作。我真的不在乎它是否被资助或吸引用户。我只有一个目标,就是使用它来创建理想的ML库。最初,我试图用F#创建一个ML库,但该语言只是缺乏强大的功能。Spiral已经足够了,但不幸的是它与.NET的GC绑定在一起,我无法扩展它。有一些方法可以包装非托管资源,但它们不足以处理GPU内存。我想对他们进行全面的GC治疗。你在一些会议上发表过论文吗?看看,让我只是说,我在这里调查球拍的能力,因为它是营销本身作为一个PL的PLs。除了做一些简单的练习和阅读一些关于它的论文外,我在这方面没有太多的经验。也没有,我没有发表过任何论文,也没有写过任何文章。我偶然成为一个PL研究者,我希望在我完成图书馆的时候能做螺旋强化学习。考虑在球拍邮寄列表上问这个问题。名单上有很多知识渊博的人,他们没有参与StackOverflow。