精华内容
下载资源
问答
  • 并行方式
    千次阅读
    2019-09-26 18:42:15

    FPGA结构

    1. FPGA与GPU 并行方式的不同点

    FPGA相比GPU的核心优势在于延迟

    FPGA的并行有两种:数据并行(GPU 也有)和流水线并行

    因为FPGA 在烧录的时候,假设每个数据包有10个步骤,FPGA可以直接搭建一个10级的流水线。每个处理完的数据包可以直接输出。
    联系CPU 和GPU的执行特点,都是取指,译指,执行。
    数据并行的方式是做10个计算单元。每个计算单元在处理不同的数据包,但是所有计算单元必须按照统一的步调,做相同的事情(SIMD)。例如做矩阵乘法,事情都是相同的,数据不同。这就要求10个数据包必须同进同出。

    因此,当任务是逐个而非成批到达的时候,流水线并行比数据并行可实现更低的延迟
    对与流水式计算的任务,FPGA比GPU天生有延迟方面的优势

    2. FPGA的kernel结构

    FPGA中的OpenCL有两种kernel结构:NDRange 和 Single-Work-Item
    NDRange核函数中由多个workitem并行执行,并且workitem间通过global memory 或 local memory进行共享数据。一个节拍会启动一个work item,这些work item以一种流水线的方式进行数据处理。这种结构的核函数代码风格类似GPU上的,但是实际的执行方式很不同。GPU上的workitem是以一种SIMD的方式执行,而FPGA上是MIMD,各级流水线对不同的数据包进行不同的处理。这里如果有数据依赖,那么执行的时候需要设置barrier function。在一个work group中的work item在继续往后执行时,必须先执行这个函数。因为FPGA的流水线结构,有数据依赖时,各个work item等待执行barrier function的开销比GPU 要大得多

    __kernel void vector_add(__global const float *a, 
                             __global const float *b, 
                             __global float *c)
    {
       int tid = get_global_id(0);
       c[tid] = a[tid] + b[tid];
    }
    
    

    Single-Work-Item类型的核函数结构类似CPU,核函数包含循环,并且循环的各个迭代间通过private memory进行共享数据。虽然只有一个work-item,但是各个循环迭代之间同样会以流水线的方式并行起来,就好像一个迭代对应于一级流水线。我们还是会利用FPGA的硬件条件做流水线并行。这里对循环展开的前提同样是各个迭代之前没有数据依赖。

    __kernel void vector_add(__global const float *a, 
                             __global const float *b, 
                             __global float *c)
    {
       for(int i = 0; i < SIZE; i++){
       		c[i] = a[i] + b[i];
       }
    }
    
    更多相关内容
  • 模型并行需要根据不同模型设计不同的并行方式,其主要原理是将模型中不同计算节点放在不同硬件资源上运算。比较通用且能简便地实现大规模并行的方式是数据并行,同时使用多个硬件资源来计算不同batch的数据梯度,...
  • 用微机多核CPU并行方式运转WRF模式.pdf
  • GrepWithMapReduce 使用自定义map-reduce框架以并行方式实现Grep功能的Python项目
  • msp430单片机用并行方式数据传输在液晶LCD12864上综合显示字符、文字和图形。
  • 前沿 idea2021好像没有那个以并行方式运行的checkbox了 2021-idea-使用方法 Modify Options -> 选中 Allow multiple instances

    前沿

    idea2021好像没有那个以并行方式运行的checkbox了

    2021-idea-使用方法

    Modify Options -> 选中 Allow multiple instances

    在这里插入图片描述
    在这里插入图片描述

    展开全文
  • GPS测试程序12864液晶(并行方式).zip,GPS测试程序12864液晶(并行方式),main.OBJ,GPS test_Opt.Bak,GPS test.plg,GPS test.lnp,GPS test.opt.bak,12864.hex,GPS test.uvopt,LCD.OBJ,GPS test_Uv2.Bak,main.c,...
  • 利用msp430169的模块进行AD和DA转换,按键次数为DA的输入值,对应的电压可以自己修改,然后将装换的A给AD进行AD转换。12864是利用并行方式显示的数据。
  • MCS51单片机驱动12864并行方式,有详细的说明,
  • 本文这里所指并行信号和串行信号,包括了传输(通信)方式,又有接口类型,同时还有数据本身的协议特点,信号、协议、总线和接口。
  • 并行EEPROM

    2020-11-14 18:49:35
    DIP式的引脚配置如图所示:与AMD闪速存储器命名信号名称的方式不同,DU等同于NC,其他W,G,E分别等同于WE,OE和GE。我们知道引脚配置本身具各兼容性。  图 M2801O的引脚配置  并行EEPROM的内部也同闪速存储器...
  • 036、DS1302的时钟电路(并行传输显示方式).zip
  • 并行计算与MPI

    万次阅读 多人点赞 2019-06-01 16:54:08
    并行计算 1.1. 相关背景 (1)从1986年到2002年,微处理器的性能以平均50%的速度不断提升。但从2002年开始,单处理器的性能提升速度下降到每年大约20%,这个差距是巨大的。所以,从2005年起,大部分主流的CPU制造商...

    1. 并行计算

    1.1. 相关背景

    (1)从1986年到2002年,微处理器的性能以平均50%的速度不断提升。但从2002年开始,单处理器的性能提升速度下降到每年大约20%,这个差距是巨大的。所以,从2005年起,大部分主流的CPU制造商决定通过并行处理来快速提升微处理器的性能。
    (2)单处理器性能大幅度提升的主要原因之一是日益增加的集成电路晶体管密度。随着晶体管尺寸减小,传递速度增快,集成电路整体的速度也加快,它们的能耗也相应增加,而在21世纪的前10年中,用空气冷却的集成电路的散热能力已经达到极限了,所以,集成电脑制造商的决策是:与其构建更快、更复杂的单处理器,不如在芯片上放置多个相对简单的处理器,这样的有多个处理器的集成电脑称之为多核处理器。
    (3)通常我们传统单核处理器上编写的程序无法利用多核处理器,我们需要使得程序充分利用处理器更快的运行程序,更加及时与逼真的模拟现实世界。为了达到这一目的,需要软件开发工程师将串行程序改写为并行程序。

    1.2. 什么是并行计算

    在这里插入图片描述
    并行计算(Parallel Computing)是指同时使用多种计算资源解决计算问题的过程,是提高计算机系统计算速度和处理能力的一种有效手段。它的基本思想是用多个处理器来协同求解同一问题,即将被求解的问题分解成若干个部分,各部分均由一个独立的处理机来并行计算。并行计算系统既可以是专门设计的、含有多个处理器的超级计算机,也可以是以某种方式互连的若干台的独立计算机构成的集群。通过并行计算集群完成数据的处理,再将处理的结果返回给用户。
    并行计算或称平行计算是相对于串行计算来说的。所谓并行计算可分为时间上的并行和空间上的并行。时间上的并行就是指流水线技术,而空间上的并行则是指用多个处理器并发的执行计算。
    在这里插入图片描述
    并行计算科学中主要研究的是空间上的并行问题。从程序和算法设计人员的角度来看,并行计算又可分为数据并行和任务并行。空间上的并行导致了两类并行机的产生,按照Flynn(弗林)分类法为:单指令流多数据流(SIMD)和多指令流多数据流(MIMD)。我们常用的串行机也叫做单指令流单数据流(SISD)。
    在这里插入图片描述
    图1 弗林分类法划分的四类计算机
    MIMD类的机器又可分为以下常见的五类:并行向量处理机(PVP)、对称多处理机(SMP)、大规模并行处理机(MPP)、工作站机群(COW)、分布式共享存储处理机(DSM)。

    1.3. 主要目的

    并行计算(parallel computing)是在并行机上,将一个应用分解成多个子任务,分配给不同的处理器,各个处理器之间相互协同,并行地执行子任务,实现如下两个主要目的:
    (1)加速求解问题的速度。
    (2)提高求解问题的规模。

    1.4. 并行计算与分布式计算

    并行计算不同于分布式计算(distributedcomputing)。分布式计算主要是指,通过网络相互连接的两个以上的处理机相互协调,各自执行相互依赖的不同应用,从而达到协调资源访问,提高资源使用效率的目的。但是,它无法达到并行计算所倡导的提高求解同一个应用的速度,或者提高求解同一个应用的问题规模的目的。对于一些复杂应用系统,分布式计算和并行计算通常相互配合,既要通过分布式计算协调不同应用之间的关系,又要通过并行计算提高求解单个应用的能力。

    1.5. 并行的基本条件

    并行计算是在并行机上,将一个应用分解成多个子任务,分配给不同的处理器,各个处理器之间相互协同,并行地执行子任务,从而达到加速求解速度,或者求解应用问题规模的目的。由此,为了成功开展并行计算,必须具备三个基本条件:
    (1)并行机。并行机至少包含两台或两台以上处理机,这些处理机通过互连网络相互连接,相互通信。
    (2)应用问题必须具有并行度。也就是说,应用可以分解为多个子任务,这些子任务可以并行地执行。将一个应用分解为多个子任务的过程,称为并行算法的设计。
    (3)并行编程。在并行机提供的并行编程环境上,具体实现并行算法,编制并行程序,并运行该程序,从而达到并行求解应用问题的目的。

    1.6. 主要的并行系统

    1.6.1. 共享内存模型

    共享内存系统即单机并行,在一台机器上运行程序时分配多个进程或线程来达到加速的目的。比如用OpenMP和Pthreads进行共享内存编程,在程序中加入相关并行语句实现线程的创建和销毁。

    OpenMP是由OpenMP Architecture Review Board牵头提出的,并已被广泛接受的,用于共享内存并行系统的多线程程序设计的一套指导性的编译处理方案(Compiler Directive)。OpenMP支持的编程语言包括C语言、C++和Fortran;而支持OpenMp的编译器包括Sun Compiler,GNU Compiler和Intel Compiler等。OpenMp提供了对并行算法的高层的抽象描述,程序员通过在源代码中加入专用的#pragma来指明自己的意图,由此编译器可以自动将程序进行并行化,并在必要之处加入同步互斥以及通信。当选择忽略这些#pragma,或者编译器不支持OpenMP时,程序又可退化为通常的程序(一般为串行),代码仍然可以正常运作,只是不能利用多线程来加速程序执行。
    每台电脑的核数,是一个程序中同时运行的最大线程数或进程数(这里的同时指同一时刻,注意区分并行和并发的概念)。例如用OpenMP进行编程,一般情况下如果设置的线程数大于电脑核数是毫无意义的,因为同时运行的线程数只能等于核数,此时多余的线程变为并发运行,这样在线程切换上会浪费更多的时间。
    共享内存模型具有如下特性:
    (1)在共享编程模型中,任务间共享统一的可以异步读写的地址空间。
    (2)共享内存的访问控制机制可能使用锁或信号量。
    (3)这个模型的优点是对于程序员来说数据没有身份的区分,不需要特别清楚任务简单数据通信,程序开发也相应的得以简化。
    (4)在性能上有个很突出的缺点是很难理解和管理数据的本地性问题。

    1.6.2. 消息传递模型

    消息传递模型有以下特征:
    (1)计算时任务集可以用他们自己的内存。多任务可以在相同的物理处理器上,同时可以访问任意数量的处理器。
    (2)任务之间通过接收和发送消息来进行数据通信。
    (3)数据传输通常需要每个处理器协调操作来完成。例如,发送操作有一个接受操作来配合。

    1.6.3. 数据并行模型

    数据并行模型有以下特性:
    (1) 并行工作主要是操纵数据集。数据集一般都是像数组一样典型的通用的数据结构。
    (2)任务集都使用相同的数据结构,但是,每个任务都有自己的数据。
    (3)每个任务的工作都是相同的,例如,给每个数组元素加4。
    (4)在共享内存体系结构上,所有的任务都是在全局存储空间中访问数据。在分布式存储体系结构上数据都是从任务的本地存储空间中分离出来的。

    1.6.4. 对比分析

    在当前并行机上,比较流行的并行编程环境的典型代表、可移植性、并行粒度、并行操作方式、数据存储模式、数据分配方式、学习难度、可扩展性等方面的比较在下表中给出。
    表1 两种并行编程环境主要特征一览表
    特征 典型代表 可移植性 并行粒度 并行操作方式 数据存储模式 数据分配方式 学习入门难度 可扩展性
    消息传递 MPI、PVM 所有流行并行机 进程级大粒度 异步 分布式存储 显式 较难 好
    共享存储 OpenMP SMP﹑DSM 线程级细粒度 异步 共享存储 隐式 容易 较差
    数据并行 HPF SMP﹑DSM﹑MPP 进程级细粒度 松散同步 共享存储 半隐式 偏易 一般
    由该表可以看出:
    (1)共享存储并行编程基于线程级细粒度并行,仅被SMP 和DSM并行机所支持,可移植性不如消息传递并行编程。但是,由于它们支持数据的共享存储,所以并行编程的难度较小,但一般情形下,当处理机个数较多时,其并行性能明显不如消息传递编程。
    (2)消息传递并行编程基于大粒度的进程级并行,具有最好的可移植性,几乎被当前流行的各类并行机所支持,且具有很好的可扩展性。但是,消息传递并行编程只能支持进程间的分布存储模式,即各个进程只能直接访问其局部内存空间,而对其他进程的局部内存空间的访问只能通过消息传递来实现。因此,学习和使用消息传递并行编程的难度均大于共享存储和数据并行两种编程模式。

    2. MPI

    2.1. 什么是MPI

    多线程是一种便捷的模型,当中每一个线程都能够訪问其他线程的存储空间。因此,这样的模型仅仅能在共享存储系统之间移植。一般来讲,并行机不一定在各处理器之间共享存储,当面向非共享存储系统开发并行程序时,程序的各部分之间通过来回传递消息的方式通信。要使得消息传递方式可移植,就须要采用标准的消息传递库。这就促成的消息传递接口(Message Passing Interface, MPI)的面世,MPI是一种被广泛采用的消息传递标准。
    MPI是一种基于消息传递的跨语言的并行编程技术,支持点对点通信和广播通信。消息传递接口是一种编程接口标准,而不是一种详细的编程语言。简而言之,MPI标准定义了一组具有可移植性的编程接口。各个厂商或组织遵循这些标准实现自己的MPI软件包(如链接库等形式),典型的实现包含开放源码的MPICH、LAM MPI以及不开放源码的Intel MPI。因为MPI提供了统一的编程接口,程序员仅仅须要设计好并行算法,使用对应的MPI库就能够实现基于消息传递的并行计算。MPI支持多种操作系统,包含大多数的类UNIX和Windows系统。
    MPI概念的要点如下:
    (1)MPI是指Message Passing Interface,消息传递接口,是一个由专家、工业界和学术界组成的大型的委员会定义的一套标准;
    (2)MPI 1.0 版于1994 年推出,并同时获得了各并行机产商的具体实现;MPI 2.0 版于1998 年10 月推出;
    (3)MPI是一种消息传递编程模型,MPI的实现为并行应用提供消息传递或者相关的服务,并且成为了消息传递编程模型的代表和事实上的标准;
    (4)MPI是一种标准或者规范,目前存在对多种MPI标准的实现;
    (5)MPI标准定义了一组接口函数,使应用程序可以将消息从一个MPI进程送到另一个MPI进程。 MPI实际上定义了比消息传递更多的服务,但是其核心和灵魂还是MPI进程间的消息传递。

    剩余内容详见

    https://download.csdn.net/download/tomjchan/11221152

    展开全文
  • CRC的实现方式分为串行方式和并行方式,由于并行方式一个时钟周期内可以处理8个bit,与千兆以太网的GMII接口协议相符合,故千兆以太网的CRC校验码的生成和校验中常使用并行算法实现。本文研究了CRC校验码的串行实现...
  • 通过利用多种群实现多种优化策略,并采用并行方式,使得算法可以采用不同的优化策略进行搜索,更加节省 计算时间。数值实验结果表明,该算法在求解不同类型的优化问题时都具有良好的计算能力和效率。 ...
  • 基于FPGA的并行PRBS实现方法

    千次阅读 2021-05-11 10:20:30
    为什么要并行 简单来说,串行PRBS的产生在高速时极不可靠。 因为构成寄存器的触发器运行速度在串行...采用并行方式,以字节的方式产生伪随机码,即每个时钟脉冲输出并 行8位数据信号,形成8路低速伪随机序列。可以将工

    为什么要并行

    简单来说,串行PRBS的产生在高速时极不可靠。
    因为构成寄存器的触发器运行速度在串行时必须与传输速度一致,其运算速度的提高完全依靠于时钟的速度。当信号速率高达上GHz时,每比特的宽度要小于1 ns。而已商品化的高速GaAs器件在2GHz的触发时钟到输出的延时仍有0.7ns,普通的高速器件延时更大。电路中连接器件的印制线路也会产生传输延时,若传输延时超过时钟周期,触发器就会产生误触发。
    采用并行方式,以字节的方式产生伪随机码,即每个时钟脉冲输出并行8位数据信号,形成8路低速伪随机序列。可以将工作时钟频率降低到串行产生伪随机码的时钟频率的1/8,也就是说要产生1GHz时钟频率的伪随机序列,只需125MHz的时钟驱动即可。

    并行实现思路

    以生成16位的prbs15信号为例,本原多项式是X15+X14+1
    PRBS发生器通常是由线性反馈移位寄存器(linear feedback shift registers,LFSR)和异或电路组成。
    串行实现思路:将寄存器的第14位和第13位做异或运算后,输入到寄存器的第0位,寄存器的第14位同时也是PRBS15发生器的输出。
    并行实现思路:给定初始的15位shift,做异或后的结果存入fb,输出的16位如图所示;下一个clk,fb的低15位构成新的shift,再做异或运算。
    在这里插入图片描述

    代码

    module prbs15( //16位并行的prbs15 
    	input		wire				clk,
    	input		wire				rst,
    	input		wire	[14:0]	prbs_ini,
    	output	wire	[15:0]	prbs_out	
    );
    
    reg [14:0] shift; //移位寄存器
    wire [15:0] data_fb; //xor feedback
    //移位寄存
    always@(posedge clk) begin
    	if(rst)
    		shift <= prbs_ini;
    	else begin
    		shift <= data_fb[14:0]; 
    	end
    end
    //异或
    assign data_fb[15:2] = shift[14:1]^shift[13:0];
    assign data_fb[1] = shift[0]^data_fb[15];
    assign data_fb[0] = data_fb[15]^data_fb[14];
    //移位寄存器中的结果是输出
    assign prbs_out = {shift[14:0],data_fb[15]};
    endmodule
    

    仿真

    testbench

    module test_vlg_tst();
    reg clk;
    reg [14:0] prbs_ini;
    reg rst;                                             
    wire [15:0]  prbs_out;
                              
    test i1 ( 
    	.clk(clk),
    	.prbs_ini(prbs_ini),
    	.prbs_out(prbs_out),
    	.rst(rst)
    );
       
    initial begin
    clk = 0;
    rst = 1;
    prbs_ini = 15'd2;
    #20 rst = 0;
    #10000 $stop;
    end
    //注意rst复位至少要留够一个clk,否则会没有复位,信号仿真结果xxxx
    always #10 clk = ~clk;
    endmodule
    

    在这里插入图片描述
    与串行prbs15的结果一致

    串行PRBS15
    outxorprbs更新
    00000_0000_0000_0100
    0000 0000 0000 0100 0
    000 0000 0000 0100 00
    000000 0000 0100 000
    00000 0000 0100 0000
    0000 0000 0100 0000 0
    000 0000 0100 0000 00
    000000 0100 0000 000
    00000 0100 0000 0000
    0000 0100 0000 0000 0
    000 0100 0000 0000 00
    000100 0000 0000 000
    01100 0000 0000 0001
    1100 0000 0000 0001 1
    000 0000 0000 0001 10
    000000 0000 0001 100
    00000 0000 0001 1000
    0000 0000 0001 1000 0
    000 0000 0001 1000 00
    000000 0001 1000 000
    00000 0001 1000 0000
    0000 0001 1000 0000 0
    000 0001 1000 0000 00
    000001 1000 0000 000
    00001 1000 0000 0000
    0001 1000 0000 0000 0
    011 1000 0000 0000 01
    101000 0000 0000 010
    11000 0000 0000 0101
    0000 0000 0000 0101 0
    000 0000 0000 0101 00
    000000 0000 0101 000

    新写法

    这样写思路更清晰
    在这里插入图片描述

    module prbs15_gen( //64bit
    input clk,
    input rst,
    output [63:0] prbs_out
    );
    
    parameter DATA_INI = 15'd2;
    reg [14:0] shift1;
    wire [14:0] shift2,shift3,shift4;
    wire [3:0] shift5;
    
    always@(posedge clk or posedge rst) begin
    	if(rst)
    		shift1 <= DATA_INI;
    	else begin
    		shift1 <= prbs_out1[14:0]; 
    	end
    end
    	
    assign shift2[14:1] = shift1[14:1] ^ shift1[13:0];
    assign shift2[0] = shift1[0] ^ shift2[14];
    assign shift3[14:1] = shift2[14:1] ^ shift2[13:0];
    assign shift3[0] = shift2[0] ^ shift3[14];
    assign shift4[14:1] = shift3[14:1] ^ shift3[13:0];
    assign shift4[0] = shift3[0] ^ shift4[14];
    assign shift5[3:0] = shift4[14:11] ^ shift4[13:0];
    
    assign prbs_out = {shift1,shift2,shift3,shift4,shift5};
    endmodule
    
    展开全文
  • 数据并行又可以根据其更新参数的方式分为同步数据并行和异步数据并行,同步的数据并行方式如图所示,tensorflow图有着很多的部分图模型计算副本,单一的客户端线程驱动整个训练图,来自不同的设备的数据需要进行同步...
  • 并行计算及并行算法

    万次阅读 多人点赞 2018-06-13 22:27:31
    一、并行计算  简单地说,并行计算就是在并行计算机上所做的计算。从普通意义上讲,它和常说的高性能计算、超级计算等是同义词。并行计算的初衷是为了努力仿真自然世界中一个序列中含有众多同时发生的、复杂且相关...
  • 在本文中,我们将介绍一个对JUnit的扩展,从而使得我们可以方便的用并行方式进行单元测试。测试并行程序与以往有什么不同?随着多核的普及,并行程序的开发已经提上日程。相对串行程序而言,并行程序更有可能出错...
  • 我们都知道源同步方式的典型代表是DDRx信号,本文就来介绍源同步方式是怎样改善系统同步的先天不足的。
  • 本文主要讲了单片机串行口和并行口的区别,希望对你的学习有所帮助。
  • 使用R并行方式对数值型数据离散化

    千次阅读 2016-08-21 22:51:57
    使用R并行方式对数值型数据离散化 数据的特征按照其取值可以分为连续型和离散型。离散数值属性在数据挖掘的过程中具有重要的作用。比如在信用卡评分模型中,当自变量很多时,并非所有字段对于目标字段来说都是有效...
  • 本文记录了使用MPI与OpenMP两种并行计算方法实现蒙特卡洛计算圆周率,题目是专业实验课上老师给的,主要分享一下自己的做法,希望大家不吝赐教(使用的语言是C语言)。 蒙特卡洛方法求圆周率 蒙特卡洛方法的原理 该...
  • 注:两种并行方式结果虽然不等价,但不影响本问题分析的重点。 2 实验结果 实验平台:GTX 260 取M,N,I,J为256. 时间取10次运行平均值.粗细粒度并行运行时间相差1.7倍。 表1 实验结果(复杂运算pow, ...
  • 分布式机器学习——模型并行训练

    千次阅读 2021-08-05 10:56:08
    首先还是来介绍一下分布式系统中的并行方式,分为数据并行和模型并行,其实还有一种并行方式:Pipeline并行。 Pipeline并行方式有的时候会单独存在,有的时候又归为模型并行。这篇文章重点就介绍一下模型并行,关于...
  • 环境:ABAQUS6.3+8 IntelXeon 700MHz CPU+4G Ram+Win2k AdvServer SP3在命令行模式下,abaqus命令的下面三个参数进行并行计算的控制:[cpus=number-of-cpus][parallel={loop | domain | supernode | tree}][domains=...
  • 数据 并行

    千次阅读 2022-02-18 22:38:31
    含义是计算机内包含一组处理单元(PE),每一个处理单元存储一个(或多个)数据元素。当机器执行顺序程序时,可对应于...在这种并行模式中,被划分的是数据,所以这种并行方式叫数据并行。 数据并行的实例运用(PyTorch)
  • 12864液晶并行方式显示

    千次阅读 2014-07-18 15:42:37
    与外部CPU接口采用并行或串行两种控制方式。 在12864上显示0-9的随机数 第二行显示www.csdn.blog 第三行显示“求是07的博客” 第四行显示“欢迎光临” 以下是主要的代码: #include <reg52.h> #...
  • ad7606模块8通道,ad7606模块程序并行方式采集

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 553,808
精华内容 221,523
关键字:

并行方式