2016-05-10 30 views
0

我想要做的事(奇怪)在C++中有如下一些主要的想法:并行解析C++

  1. 接收命令的字符串(SCPI命令)用于控制仪器。可以在矢量或缓冲区中接收。
  2. 解析字符串并提取单个命令(如果字符串包含多个命令)
  3. 解析单个命令以提取助记符和参数(SCPI命令的元素)。
  4. 匹配的助记符与已经可用的解析器表

有趣的是,我已经有一个有效的解决方案,但它是如此缓慢,当谈到命令的批量处理/分析。

我期待着这样做的开销减少。我的一个想法是从串行方式转为多线程方式(就像上面在不同线程中提到的不同的东西,并最大限度地利用CPU核心)。

因此,我需要关于如何以及从哪里开始的建议和提示?

+2

不是真的了解SCPI,而是所有收到相同长度的“命令”?命令之间是否存在任何关系? (这意味着某些命令必须在其他命令之前运行。)从这些问题开始,查看代码的哪些部分可能会被拆分为线程。 –

+0

['std :: thread'](http://en.cppreference.com/ w/cpp/thread/thread):-) – Zereges

+0

什么意思是“慢”? – ZDF

回答

0

并行处理命令是分离解析命令并在它自己的线程上运行它的逻辑的一个问题,当它们从解析器进入时,它会对它进行管道传输。

然而,并行解析串行流是另一回事。为了有效地批量执行命令解析,您需要能够在不知道其内容的情况下分割命令。

一种方法可以是利用数据包结构将命令块关联在一起,并确保并行解析器接收构建命令所需的所有块。

struct CommandPacket 
{ 
    uint8_t commandID; 
    uint8_t dataLength; 
    uint8_t data[MAX_PACKET_SIZE]; 
} 

您可能只需使用id的模数将数据包传送到解析器以均匀分布负载。

int parserIndex = packet.commandID % parserCount;