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(需要有输入参数分别为本地节点号与需要建立通信的节点号)。
效果如下:
- MCAPI学习笔记<一>——简介与Linux下示例程序测试
- MCAPI学习笔记<二>——数据类型与属性定义
- (一)OpenCV学习笔记——Linux下编译运行opencv程序
- MCAPI in Bfin Linux
- 【opencv学习笔记一】opencv2.4.3在vs2008下的配置(包括测试程序)
- VS2017下OpenCV3.2学习笔记(一)安装配置、测试程序
- Linux 下C语言学习(一)——C语言的简介
- linux下的学习笔记——通配符与特殊符号
- j2me学习笔记【1】——helloworld程序示例
- D3D角色动画学习笔记(一)——角色动画简介与初步规划
- Maven学习笔记(一)——Maven简介、下载与安装
- 应用统计学与R语言实现学习笔记(一)——简介
- Hibernate学习笔记(一) — hibernate的配置文件简介与执行原理
- Lucene学习笔记(一)——入门示例
- Kotlin学习笔记(二)——示例篇一
- Linux学习笔记 - 程序的执行(一)
- sencha touch学习笔记一:web工程下的示例
- 学习笔记一、简介
- 通过shell脚本操作mysql数据库
- c# 配置文件 从外部路径获取程序集
- Java实现二叉搜索树
- 为程序员准备的7个网站
- 设置聊天泡泡颜色以及添加描边的方式
- MCAPI学习笔记<一>——简介与Linux下示例程序测试
- Coursera Algorithm, Part2 Week2: Minimum Spanning Trees & Shortest Paths
- oracle存储过程简单实例 变量赋值 游标遍历
- 2014.11.22 差分约束学习笔记
- HEVC标准概览(翻译)
- datagrid改变url参数值
- C++标准库---智能指针auto_ptr初探
- OpenGL简单绘制游戏角色阴影
- 设置闹钟等本地通知的中级使用