Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RCPP或C+的RCPP供应商的基准测试+;还是Java调用R脚本?_Java_C++_Linux_R_Rcpp - Fatal编程技术网

RCPP或C+的RCPP供应商的基准测试+;还是Java调用R脚本?

RCPP或C+的RCPP供应商的基准测试+;还是Java调用R脚本?,java,c++,linux,r,rcpp,Java,C++,Linux,R,Rcpp,我到处寻找这个答案,所以我在这里发帖。如果我有Linux C++程序调用一个类似RCpp的R脚本/函数,有没有任何预期的延迟?这是意料之中的,甚至听起来合理吗?如果我从JavaJAR文件中使用类似RCaller的东西会怎么样?如果C++调用相同的脚本/函数,你认为C++仍然比java快吗?有什么不同吗? 谢谢我对R外部功能接口或RCpp没有专门的知识,但我曾与许多其他人合作过。你的问题不能肯定地回答。这里只有一些经验法则。FFI的工作是满足呼叫和被呼叫环境的假设。这通常是通过从一种语言复制到另一

我到处寻找这个答案,所以我在这里发帖。如果我有Linux C++程序调用一个类似RCpp的R脚本/函数,有没有任何预期的延迟?这是意料之中的,甚至听起来合理吗?如果我从JavaJAR文件中使用类似RCaller的东西会怎么样?如果C++调用相同的脚本/函数,你认为C++仍然比java快吗?有什么不同吗?
谢谢

我对R外部功能接口或RCpp没有专门的知识,但我曾与许多其他人合作过。你的问题不能肯定地回答。这里只有一些经验法则。FFI的工作是满足呼叫和被呼叫环境的假设。这通常是通过从一种语言复制到另一种语言来匹配两种语言的数据布局。(这就是RCpp的全部内容。)或者你可以非常幸运地让他们匹配。如果运行时环境相似,或者跨语言边界移动的数据很小,这可能非常有效:不会比自函数调用花费太多。因此,从Fortran调用C通常非常快。如果环境非常不同,则必须复制大型数据结构。拷贝会消耗资源:内存和处理器周期。垃圾收集是环境之间差异的典型代表:独立的收集器很少(读不到)合作。因此,R和Java(都是垃圾收集的)可能需要复制。如果您正在编写C++专门调用R,那么您可以在RCPP结构中设置数据,从而不需要复制。p> 我会写一些小的测试,从C++开始,模拟你必须通过接口移动的数据量。运行并计时,以获得间接成本。你可以做出真正的决定。

我想你想让它很容易在你的C++应用程序中嵌入R。它附带了四个目录中的许多示例,包括一些与Qt、Wt(用于webapps)和MPI一起使用的示例

在该框架中,您在启动时实例化R一次,然后拥有自己的实例。往返延迟将是您向R实例发送命令所需的任何时间,加上R所需的时间(这可能占主导地位)加上返回时间


RInside使用,所以您可以获得整个对象传输和所有其他细节。看一看RInside示例,并在rcpp-devel列表上发布问题。

回答正确。非常感谢你把数据保存在C++中,并使用R。对于java的垃圾回收器,这也是一个真正的问题,因为我从来没有真正关心过它,所以C++可能是明智的选择。