MCAPI学习笔记<一>——简介与Linux下示例程序测试

来源:互联网 发布:fc2最新域名2016 编辑:程序博客网 时间:2024/05/21 20:30

MCAPI是由MulticoreAssociation定义的一项分布式IPC的标准。MCAPI标准中定义了应用层消息API而不是内核通信协议(例如:它不包含套接字)。相比于专门的IPC系统,使用用MCAPI标准的应用代码相比硬件、物理传输、操作系统有更好的可移植性。

OpenMCAPI是由MentorGraphics创建的一个开源的MCAPI的实现,其中大多数的代码是基于BSD协议,除了Linux内核驱动——它基于GPL/BSD双重协议。

 

一、MCAPI简介

MCAPI提供三种不同的通信方式:

1.        Message——最灵活的一种通信方式。

特点:

l  面向无连接。

l  类似UNIX网络编程中的UDP数据报。

l  以data buffer作为数据载体进行进程间通信。

l  显示指定通信双方的endpoint对(send endpoint和receive endpoint)。

l  收、发消息以及消息令牌的优先级动态变化。

l  通常用来实现同步、初始化、动态平衡。

 

2.        Channel(包括:packet channel和scalar channel)

特点:

l  面向连接。

l  提供的单向的FIFO流传输(packetchannel与scalar channel不同的是,packet使用data buffer而scalar使用的特定的scalar value)。

l  channel在初始化时进行创建,这个连接使用显示握手来建立,一旦建立连接将保持通信直到任意一个endpoint发出终止请求。

 

MCAPI中常用术语概念简介:

 

DOMAIN(域):

类似于UNIX网络通信中的子网,在整个通信过程中起到“路由”功效,其范围可以是单片多核SoC,也可以是板上多核芯片。

         每一个DOMAIN由Domain_ID唯一标识(初始化时确立)。

NODE(节点):

         MCAPI的node是一个独立的控制线程,比如一个进程、线程、处理器,硬件加速器,或者操作系统实例。给定的MCAPI实现明确了哪些东西构成了一个节点。MCAPI在node之间定义了一个传输层,它保证MCAPI的标准适用于不论是面向过程系统还是面向对象的系统。node_id用来标识一个Node,通过调用mcapi_initialize()来确认。

ENDPOINT(端点):

类似于UNIX网络编程中的Socket的通信节点,通过mcapi_end_point_create()创建,一个endpoint由一个三元组<domain_id,node_id,port_id>进行标识。其中port_id需要显示创建而node_id是当创建到node 的引用时被隐式创建(通过调用mcapi_endpoint_get()来获取这个引用)。与此同时,endpoint具有一些QoS相关的属性,这些属性在mcapi.h中定义。

 

 

注:

1)        MCAPI不支持多播与广播。

2)        在一个MCAPI的通信拓扑中不同的端点可能跑在不同的CPU上(可能是异构也可能是同构),这要求应用程序内部消息的结构需要定义明确:比如内容的端序(大小端)、字段大小、字段对齐。

 

 



二、MCAPI在linux下的例程测试——简单的进程间通信:

通过./waf进行平台,内核等配置后,直接在/mcapi/openmcapi/build/demo目录下执行可执行程序hi(需要有输入参数分别为本地节点号与需要建立通信的节点号)。

效果如下:


0 0
原创粉丝点击