我正在研究HPC项目。我的设计包括Java和C ++主人和工人。我的基本实验是生成一个9000x9000双元素的矩阵,比如双[9000] [9000],在java中用master编写,然后将它发送给用C ++编写的一些客户端,进行计算并发送回master。我知道Thrift支持基本类型旁边的列表,集合和容器。我可以做这些步骤:
我认为这是一段漫长的旅程。有没有更好的方法来完成这项任务?
如何将矩阵表示为二进制?如果二进制表示是最佳选择,我怎样才能有效地从double [] []转换为二进制,反之亦然。
答案 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