gpt4 book ai didi

java - 如何使用 Apache Thrift 在 Java 和 C++ 之间发送 double[][] 数组数据

转载 作者:太空宇宙 更新时间:2023-11-04 14:11:32 25 4
gpt4 key购买 nike

我正在开发一个 HPC 项目。我的设计由Java和C++大师和 worker 组成。我的基本实验是在用java编写的master端生成一个9000x9000双元素的矩阵,比如double[9000][9000],然后将其发送到一些用C++编写的客户端,进行计算并发送回master。我知道 Thrift 除了基本类型之外还支持列表、集合和容器。我可以执行以下步骤:

  1. 在 master 处将矩阵转换为列表
  2. 使用 Thrift 对其进行序列化
  3. 发送给工作人员
  4. 反序列化列表并转换为矩阵
  5. 进行计算并再次将结果转换为列表
  6. 序列化列表并发回java master
  7. 反序列化列表并转换为矩阵。

我认为这是一个漫长的旅程。有没有更好的方法来完成这个任务?将矩阵表示为二进制怎么样?如果二进制表示是最佳选择,我如何有效地从 double[][] 转换为二进制,反之亦然。

最佳答案

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

关于java - 如何使用 Apache Thrift 在 Java 和 C++ 之间发送 double[][] 数组数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28265335/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com