Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.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
如何使用Apache节约从java到C++发送双倍[] ][]数组数据_Java_Rpc_Thrift - Fatal编程技术网

如何使用Apache节约从java到C++发送双倍[] ][]数组数据

如何使用Apache节约从java到C++发送双倍[] ][]数组数据,java,rpc,thrift,Java,Rpc,Thrift,我正在做一个HPC项目。我的设计包括java和C++的大师和工人。我的基本实验是生成一个9000x9000双元素矩阵,比如双(9000)[9000 ],在java中用主方写,然后发送给C++编写的一些客户端,做计算并发送回主。我知道Thrift在基本类型旁边支持列表、集合和容器。我可以采取以下步骤: 在master中将矩阵转换为列表 使用节俭序列化它 把它寄给工人 反序列化列表并转换为矩阵 进行计算并再次将结果转换为列表 序列化列表并发送回java主机 对列表进行去序列化并转换为矩阵。 我认为这

我正在做一个HPC项目。我的设计包括java和C++的大师和工人。我的基本实验是生成一个9000x9000双元素矩阵,比如双(9000)[9000 ],在java中用主方写,然后发送给C++编写的一些客户端,做计算并发送回主。我知道Thrift在基本类型旁边支持列表、集合和容器。我可以采取以下步骤:

在master中将矩阵转换为列表 使用节俭序列化它 把它寄给工人 反序列化列表并转换为矩阵 进行计算并再次将结果转换为列表 序列化列表并发送回java主机 对列表进行去序列化并转换为矩阵。 我认为这是一个漫长的旅程。有没有更好的方法来完成这项任务?
把矩阵表示成二进制怎么样?如果二进制表示是最好的选择,我如何有效地将double[]]转换为二进制,反之亦然。

节俭允许嵌套容器,因此类似这样的操作应该可以:

typedef list< list< double>>  Matrix

service Nebukadnezar {
   void EnterTheMatrix( 1: Matrix matrix);
}
然而,最大的问题是,这是否是一个好主意。您必须测试这是否满足您的需要,包括用于转换数据的时间和/或内存

如果矩阵是稀疏的,我建议只发送使用过的数据,如下所示:

struct MatrixCell {
  1: i16 x
  2: i16 y
  3: double data
}

typedef list< MatrixCell>  SparseMatrix

这实际上是我在问题中提出的解决办法。矩阵不是稀疏的。我可以使用它进行序列化。它非常快,可以轻松地将几乎任何内容转换为字节数组。不幸的是,它只适用于java。如果有一些高效的序列化,既适用于java语言又适用于C++语言,我可以使用它来序列化,并使用节约来进行跨语言通信。1只要给出一个镜头,看看它是否快,等等。如果它确实按计划工作,就不需要投入更多宝贵的时间。2如果不行,那么您可以构建自己的二进制格式,如果必要的话,为两端手工制作一个序列化程序。IEEE浮点数是标准化的,所以不成问题。注意不同的字节顺序。其他一切都很容易。然后将其作为二进制元素发送。如果它不是一个公共API,你可以做任何你想做的事情。
struct MatrixCell {
  1: i16 x
  2: i16 y
  3: double data
}

typedef list< MatrixCell>  SparseMatrix