如何通过ZeroMQ发送稀疏向量和矩阵?

时间:2017-08-20 17:56:10

标签: matrix sparse-matrix zeromq chapel

我有一个矩阵A(有多少故事以这种方式开始?),这是稀疏的。

[
[0,   0, 0, 1.2, 0]
[0,   0, 0, 0,   0]
[3.5, 0, 0, 0,   0]
[0    7, 0, 0,   0]
]

我想使用ZeroMQ在进程之间来回发送这些变体。假设客户端和服务器具有不同的语言,没有通用的序列化格式。这是一些任务。

  1. 创建A。这需要发送矩阵的“框架”,这里(4,5)
  2. ,这很复杂
  3. A[4,2]从7更新为6.
  4. 使用稀疏向量v=[0,0,3.1,0,0]并将其乘以A并获得结果。
  5. 我被告知发送字节流可能是最好的解决方案,但我找不到不同库和稀疏格式之间的任何示例。

    我的默认设置是,如果有人可以与他们交谈,可以使用Python,C ++或Chapel配对。

2 个答案:

答案 0 :(得分:1)

作为you already know,Brian,ZeroMQ不是问题

让我们首先尝试重新包装问题表达式:

  1. 将获得use ZMQ;将提供的所有功能

  2. 从ZeroMQ的角度来看,不是发起人的,但是(或C ++,正如你上面提到的那样)目标环境将决定在最好的序列化策略提供者的最佳选择上,因为de-ser显然必须在特定的目标语言实现中工作(是的,ZeroMQ将尽力携带所有必要的有效载荷,逐字节,所以没有这里很危险,即使目前状态为ZMQ - 模块问题,最近正在审查中),但de-ser决定,一旦数据进入(正如我的ZeroMQ的许多答案中所提到的那样, ZMQ要么提供完整的原始信息,要么根本不提供 - 这会立即停止作为一种危险的禁止策略,试图立即移动整个大型矩阵......)。

  3. 对稀疏矩阵工具的极度关注也意味着,需要“沟通”#34;稀疏矩阵(重新)表示,而不是"发送" -it(如果不仅仅是由于发起者节点上不可用[SPACE],那么最有可能稀疏矩阵内容的非常不同的表示)

  4. 可能解决方案的概念:

    这就是说,我的选择是创建一个基于智能分布式代理的系统转换,这将允许目标环境询问发起者的一方(大规模稀疏矩阵组装的地方)来启动该过程将大规模稀疏矩阵重新表示到目标环境中,其中“复制 - 通过 - 智能 - 通信内容”#34;将为{ Matrix | sparseMatrix }此类内容重新表示中的做好准备,已准备好use LinearAlgebra;

    只是忘记寻找目前为止提供的任何低悬的水果,[SPACE]会杀死任何JSON大小重新包裹的原始Massive矩阵, 1st < / strong>很难适应相同的节点内存占用空间,第二下一次会崩溃,即使是零拷贝(因为这些数据的副本 - Peta-BLOB试图放入O中/ S&amp;内核网络缓冲区等)和不会飞

答案 1 :(得分:1)

由于设计非常简单,我决定使用带预设分隔符的字符串表示法。没有像protobuf这样的东西,很容易就能有一个理解的协议。我使用的格式是:

msg = '<i_index>:<j_index>:<value>^<i_index>:<j_index>:<value>`

就我而言,服务器已经知道矩阵的框架。所以发送矢量[0 0 0.8 0 0 1.4 0 0]我会做

msg = '0:2:0.8^0:5:1.4'

只要我不必发送大量矩阵,它就可以工作。