Cuda是Nivida提供的API,它让C/C使用GPU来处理一些东西,尽管我不知道这些东西是什么,也想知道,从我所看到的来看,收益是显着的。另外cuda只适用于nivida gpus。。
确实有一个nodejs模块,但它只适用于64位版本的windows,但也有32位版本的cuda,所以在c中只缺少nodejs到cuda的绑定/扩展。在github或互联网上没有任何关于该模块的文档。最后一次提交是1/2年前。
如果一切都有可能,那就太好了。因为nodejs将能够使用gpu进行操作,将其置于网络和其他应用程序的全新水平。同时考虑到nodejs的并行特性,它完全符合gpu的并行特性。
假设现在没有模块存在。我的选择是什么。
已经有人做过了http://www.cs.cmu.edu/afs/cs/academic/class/15418-s12/www/competition/r2jitu.com/418/final_report.pdf
4条答案
按热度按时间7ivaypg91#
下面是一个binding.gyp文件,它将使用两个源文件hello.cpp、www.example.com和www.example.com构建节点扩展goodby.cugoodby1.cu
tyky79it2#
正确的方法是使用Nvidia CUDA工具包用C编写cuda应用程序,然后将其作为node的单独进程调用。通过这种方式,您可以从CUDA中获得最大收益,并利用node的强大功能来控制该过程。
例如,如果你有一个cuda应用程序,你想将它扩展到32台计算机,你可以用快速的C或C编写应用程序,然后使用node将其推送到集群中的所有PC,并通过网络处理与每个远程进程的通信。Node在这个领域大放异彩。一旦每个CUDA应用示例完成其工作,您就可以将所有数据与节点连接并将其呈现给用户。
xnifntxz3#
连接CUDA和Node.js最自然的方式是通过“addon”,它允许您将c代码暴露给在node上运行的JavaScript程序。
Node本身是一个建立在v8 javascript引擎之上的c应用程序,而插件是一种让你编写c库的方式,这些库可以被javascript库使用,就像node自己的库一样。
从外部看,插件只是看起来像一个模块。c被编译成一个动态库,然后像其他模块一样暴露给node。例如:my-addon.cc->(compile)-> my-addon.dylib ->(node-gyp)-> my-addon.node ->
var myFoo = require('my-addon').foo()
在插件内部,您可以使用v8和Node API与Javascript环境进行交互,并使用普通的c++ API访问CUDA。
在这一层有很多活动部件。像在一个类型和另一个类型之间传递一个值这样简单的事情意味着,当你将javascript值 Package 到适当的c类型和从适当的c类型中解 Package javascript值时,你需要同时考虑c内存管理和javascript垃圾收集器。
好消息是,大多数问题都很好,有很好的文档和支持库。nan很快就能运行一个 backbone 插件,在CUDA方面,你谈论的是他们正常的C界面,有大量的文档和教程。
vwkv1x7d4#
截至2021年,一种选择是使用官方的https://github.com/rapidsai/node包,为您提供NVidia RAPIDS工具的Node API,以及在https://developer.nvidia.com/blog/gpu-accelerating-node-js-javascript-for-visualization-and-beyond上找到的相关NVidia开发博客文章。
当然,这不会让你“写cuda代码”,但它可以让你 * 使用 * GPU的cuda核心来做你必须写cuda代码的事情。