多核协会发布了最新的多核管理api。第一个这样的API他们释放MCAPI沟通,它允许数据在一个潜在的复杂的异构嵌入式多核环境。下一个是MRAPI处理资源的管理,使虚拟的延伸范围超出了一个操作系统将提供在一个单一的过程。
这一次是MTAPI管理任务。现在…你可能会问:“我们为什么需要另一个任务管理能力当我们pthreads OpenMP和MPI ?“有两个原因:
- Pthreads和OpenMP只在一个给定的工作过程和/或承担一定程度的同质性。异构的安保系统不能使用它们。换句话说,你不能调用任务different-ISA一些核心管理的一个完全不同的一个操作系统实例(或任何操作系统)。
- MPI太重量级的嵌入式应用程序有成千上万或更多任务管理。
虽然你可能认为扩展类似pthreads跨越进程边界的一个安静的小运行时可能会简单的程序员,MTAPI,事实上,介绍了一些抽象概念的我不得不挣扎有点了解。没有整体的高级描述关系的例子,所以我拼在一起通过阅读不同的标准,决定我想我知道发生了什么事情。(危险!)
这是我承担。我们习惯于简单地调用一个任务(通常是一个线程)。但是在复杂的系统中,可能有任意数量的不同的实现这一任务的“候选人”。
- 你可能有多个核心,每一个都有一个函数,可以实现任务。
- 这些核心可能是也可能不是相同的——一个可能是CPU,另一个可能是一个DSP。
- 你可能有专用硬件实现的功能。
- 你可能有一个核心和专用硬件加速器,任何给定的可选择执行。
所以他们已经包括了额外的抽象层,产生三个不同的概念:
- 一个行动执行一个任务是“潜在的”。假设CRC生成是你需要做的,和你有一个CRC加速器和四个不同的核心,每一个都有一个“GenerateCRC”功能。加速器和GenerateCRC函数就是一切行动。软件版本与当地MTAPI运行时注册;系统内置的硬件版本。这些与潜在的候选人执行一个特定的运行与一组特定的数据。
- 一个工作是一个可用的所有不同的抽象行为对于一个给定的事情需要做。所以你可能会有一个“CRC_job”代表了五种不同的方法生成一个CRC。这支持使用队列或负载平衡。当你真正需要CRC,你别叫的一个特定的行动功能/硬件;你所说的工作,系统决定哪些行为会选择运行特定的实例。
- 一个任务是一个特定的实例或执行…需要做的东西。(真的很难描述这个东西随便不使用“任务”和“工作”,具有特定的含义在这种情况下…这就是为什么你的头可以旋转。)任务的具体实际运行时你打电话;它使引用的工作,通过工作,被分配到一个相关工作执行的操作(说,软件实现的核心)。它可以在跑步时被取消;它也可以作为阻止运行(非阻塞是假定典型用法)。也可以“分离”,这意味着它“无花车”,不再可访问调用代码,在这种情况下,它不能被取消或配置为阻止——这在我看来类似于终端的线程。任务也可以分组,与整个集团作为一个阻塞机制。
MTAPI的其他方面给我的印象是更容易。它涵盖了如何处理的细节,以及等方面是否内存是共享的,参数,result-passing状态检查,等等。