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更新到6v=[0,0,3.1,0,0]
乘以a
,然后返回结果我的缺省是如果有人能和这些人说话,就有一个Python、C++或Char配对。
AS,布瑞恩,ZrOMQ不是问题。 让我们先尝试重新包装问题公式:使用ZMQ代码>将提供
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'