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

Matrix 如何通过ZeroMQ发送稀疏向量和矩阵?,matrix,sparse-matrix,zeromq,chapel,python,Matrix,Sparse Matrix,Zeromq,Chapel,Python,我有一个矩阵a(有多少故事是这样开始的?) [ [0, 0, 0, 1.2, 0] [0, 0, 0, 0, 0] [3.5, 0, 0, 0, 0] [0 7, 0, 0, 0] ] 我想使用ZeroMQ在进程之间来回发送这种变体。假设客户机和服务器使用不同的语言,没有通用的序列化格式。以下是一些任务 创建A。由于需要发送矩阵的“帧”,这很复杂,这里是(4,5) 将A[4,2]从7更新到6 取一个稀疏向量v=[0,0,3.1,0,0]乘以a,然后返回结果 有人告诉我

我有一个矩阵
a
(有多少故事是这样开始的?)

[
[0,   0, 0, 1.2, 0]
[0,   0, 0, 0,   0]
[3.5, 0, 0, 0,   0]
[0    7, 0, 0,   0]
]
我想使用ZeroMQ在进程之间来回发送这种变体。假设客户机和服务器使用不同的语言,没有通用的序列化格式。以下是一些任务

  • 创建
    A
    。由于需要发送矩阵的“帧”,这很复杂,这里是
    (4,5)
  • A[4,2]
    从7更新到6
  • 取一个稀疏向量
    v=[0,0,3.1,0,0]
    乘以
    a
    ,然后返回结果
  • 有人告诉我,发送字节流可能是最好的解决方案,但我找不到不同库之间以及稀疏格式的任何示例

    我的缺省是如果有人能和这些人说话,就有一个Python、C++或Char配对。

    AS,布瑞恩,ZrOMQ不是问题。 让我们先尝试重新包装问题公式:

  • 将获得所有功能a
    使用ZMQ将提供

  • <0 >从零开始,不是发端的那一面,但是(或C++,正如你上面提到的)目标环境将决定最佳串行化策略提供者的最佳选择,因为DESER显然必须在特定的目标语言实现中工作。(是的,ZeroMQ将尽最大努力一个字节接一个字节地承载所有必要的有效载荷,因此这里没有危险,即使最近正在审查
    ZMQ
    -模块问题的当前状态),但一旦数据进来,数据管理员就会做出决定(正如我的许多ZeroMQ答案中所说的,ZMQ要么提供完整的原始消息,要么根本不提供任何消息——这立即停止了一种危险的不可尝试的策略,即试图同时移动整个庞大的矩阵…)

  • 对稀疏矩阵工具的极度关注还意味着,更需要“传达”稀疏矩阵(重新)表示,而不是“发送”(如果不仅仅是因为发起者节点上没有可用的
    [SPACE]
    ,那么可能是因为稀疏矩阵内容的表示非常不同)

  • 可能解决方案的概念: 这就是说,我的选择是创建一个基于智能分布式代理的系统转换,这将允许目标环境要求发起者方(大规模稀疏矩阵的组装地)开始将大规模稀疏矩阵重新表示到目标环境中的过程,如果这样的话“通过智能通信内容的复制”将为
    {Matrix | sparseMatrix}
    类型的此类内容重新表示做好准备,即为
    使用linearegebra;


    只需忘记寻找迄今为止提供的任何悬而未决的成果,
    [SPACE]
    将杀死任何大小重新包装的原始海量矩阵中生长的JSON,1st将很难适应RAM内存占用中的同一节点,2nd将再次崩溃,即使是零拷贝(因为将有这样的数据Peta BLOB的副本试图放入O/S和内核网络缓冲区等)由于设计非常简单,我决定使用带有预设分隔符的字符串表示法。没有protobuf之类的东西,很容易就得到一个可理解的协议。我使用了以下格式:

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

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

    如果你用python发送和接收,你可能可以使用pickle对其进行序列化。如果不是,可能可以选择类似JSON表示的东西,可以由不同的库创建和解析。有人告诉我JSON效率低下,但我不熟悉这一点。这是我的退路。而且,我不能指望“另一个”"Python方面。可能是,很难说不测试它。这取决于矩阵的大小等。稀疏矩阵的HashMap/字典表示应该很容易在不同的语言中解析/序列化。你没有一个例子,是吗?使用类似
    mu这样的消息主题有意义吗t使用一个
    ,然后发送一个
    (int,int,float)的ByTestStream
    triples让服务器解包?我想你需要前两个整数作为向量的帧。但是,你需要为每个操作提供一个消息类型。不,ZeroMQ肯定不是这里的问题,我只是在学习如何有效地使用它。ATM,当Chapel ZMQ模块正在进行全面检查/修复时(由于本说明范围之外的原因)我的经验将驱使我走向智能dFSA设计。如果dFSA状态/规则分析完成(有合理的支持,预计不会出现意外情况(如“…嘿,我们还需要这个,有时需要那个…”:o)…可以使用多个(如果不是很多的话)专用通道-一个:int哈希dFSA CMD、使用(工作)推拉、next int-transport-DATA1、int-transport-DATA2、real-transport-DATA3、int校验和CRC等。
    msg = '0:2:0.8^0:5:1.4'