如何使用Apache Thrift从/向Java和C ++发送double [] []数组数据

时间:2015-02-01 17:07:45

标签: java rpc thrift

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

  1. 将矩阵转换为主列表
  2. 使用Thrift序列化它
  3. 将其发送给工作人员
  4. 反序列化列表并转换为矩阵
  5. 进行计算并再次将结果转换为列表
  6. 序列化列表并发送回java master
  7. 将列表解析并转换为矩阵。
  8. 我认为这是一段漫长的旅程。有没有更好的方法来完成这项任务? 如何将矩阵表示为二进制?如果二进制表示是最佳选择,我怎样才能有效地从double [] []转换为二进制,反之亦然。

1 个答案:

答案 0 :(得分:0)

Thrift允许嵌套容器,所以这样的事情应该这样做:

typedef list< list< double>>  Matrix

service Nebukadnezar {
   void EnterTheMatrix( 1: Matrix matrix);
}

如果使用thrift -gen java yourfile.thrift进行调用,则会显示

public interface Iface {
    public void EnterTheMatrix(List<List<Double>> matrix) 
      throws org.apache.thrift.TException;
}
然而,最重要的问题是,这是否是一个好主意。您将不得不测试是否满足您的需求,无论是用于转换数据的时间和/或内存。

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

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

typedef list< MatrixCell>  SparseMatrix