zoukankan      html  css  js  c++  java
  • 并行编程架构(指令流水、进程、线程、多核,Pipe and Filter)

    最近在进行DSP软件优化时,查阅文献,看到了几种并行机制,下面予以总结:

    关键词一:指令流水


    关键词二:多进程

    关键词三:多线程

    关键词四:多核(多处理器、超线程结构、多核结构、多核超线程架构)

    在体系架构中,Pipe and Filter(管道过滤器架构),如下图所示,所有的Filter并行执行,Pump 或者Producer是data sources,可以是静态的文本文件,也可以是任何输入(比如键盘、网络数据等等); Sink 或者 Consumer是数据目标(data,target),可以是另一个文本文件,或者是数据库、计算机屏幕等。Pipe即是connector,在filter之间传递数据,应当具有data buffer(数据缓存)的作用,以匹配适应filter的处理速度;而Filter则是一个个处理单元,它接收来自pipe的数据,并进行处理(filter or transform),Filter可以有N多个input Pipes,也可以由N多个output Pipes。

    典型的应用案例:

    Unix编程:一个程序的输出linked to(connected)另一个程序的输入;

    DSP6678:一种数据流(data stream)的架构,每个core(内核)可以作为一个Filter,而共享内存等可以作为Pipes。这是DSP多核编程的一种常用架构。

    编译器:连贯的过滤器进行词汇分析、语法分析、语义分析和代码生成等。


    基于这样的架构(software architecture),所有的filter都可以在不同的线程(thread)、coroutines或者不同的机器上执行,可以是软件上或者是硬件上(FPGA)实现。

    缺点:

    1. 很明显,当Filter在等待它接收到所有的data并开始执行前,Pipe的有可能data buffer 溢出或者发生死锁。

    2. 管道的数据类型可能会使得过滤器需要进行解析,这将slow down processing speed。如果构建了不同数据类型的管道,则该管道将不能链接到任何的过滤器上。


    这里主要对Pipe/Filter架构进行总结。因为上面几种都比较简单,也最常见,所以就没有进行总结。

    最后,讲一个在DSP应用开发中的采用此架构进行开发的一个案例:在进行ARM到DSP通过以太网口传图处理的一个开发中,ARM负责从USB摄像头读取图像数据,然后通过以太网口发送至DSP处理。为了保证实时性处理,在验证了DSP算法处理的速度之后,发现如果采用ARM发送来一帧,DSP处理一帧,DSP处理完,ARM再进行下一帧采集和发送这样的串行机制,实时处理几乎是不现实的。最后采用了多级PingPong操作,ARM和DSP管道缓存均设置为5个图像大小,在DSP处理的时候,ARM依然进行图像采集和处理,直到DSP 管道Buffer 满为止。进行过这样的处理,最后实现了整个嵌入式开发的实时性处理。其实就是类似操作系统中著名的生产者-消费者模型。今天总结的Pipe/Filter实质上都与此思想相近。


    参考文献:

    1. 操作系统之哲学原理

    2. http://www.dossier-andreas.net/software_architecture/pipe_and_filter.html

  • 相关阅读:
    spark 之 UDF的两种方式
    hive到hive数据迁移
    离线数据分析之 人物兴趣取向分析(2-3) 使用pyspark构建Kmeans/随机森林完成分类预测
    python 之sparkSQL连接hive
    hive面试题之 统计最近七天内连续登陆3天的用户数量
    离线数据分析之 人物兴趣取向分析(2-2)离线/实时项目架构|项目流程|数仓构建(进阶篇)
    离线数据分析之 人物兴趣取向分析(2-1)数据探索
    hive 和 hbase的联系
    linux常用命令
    centos8联网问题
  • 原文地址:https://www.cnblogs.com/huty/p/8519354.html
Copyright © 2011-2022 走看看