DOL是什么?
分布式操作层DOL是一个编程框架,用于自动将应用自动映射到多处理器SHAPES框架平台上,主要由3个部分组成:
(1)DOL应用编程接口
定义了一系列的编程接口,让编程人员可以在不了解底层硬件的情况下进行编程。使用相关的API可以完成SHAPES平台上的分布式、并行应用。
(2)DOL功能仿真
为编程提供了测试应用的功能。另外还可以在应用层面获得性能参数。
(3)DOL映射优化
探索从应用到SHAPES平台的最优映射,可以用XML文件在抽象层面描述一个映射关系。
DOL编程流程
(1)定义功能节点
(2)定义每个节点的通信端口
(3)节点代码实现
(4)节点-处理器映射
DOL编程结构
一个功能节点的实现分为一个.h文件和一个.c文件。
.h文件包含如下内容:
#ifndef CONSUMER_H
#define CONSUMER_H
#include <dol.h>
#include "global.h"
//定义数据传输端口
#define PORT_IN 1
//定义存储节点运行状态的结构体
typedef struct _local_states {
char name[10];
int index;
int len;
} Consumer_State;
//定义节点的初始化函数init和运行函数fire
void consumer_init(DOLProcess *);
int consumer_fire(DOLProcess *);
#endif
.c文件包含以下内容:
#include <stdio.h>
//初始化函数init函数实现
#include "consumer.h"
void consumer_init(DOLProcess *p) {
sprintf(p->local->name, "consumer");
p->local->index = 0;
p->local->len = LENGTH;
}
//运行函数fire函数实现
int consumer_fire(DOLProcess *p) {
float c;
if (p->local->index < p->local->len) {
DOL_read((void*)PORT_IN, &c, sizeof(float), p);
printf("%s: %f\n", p->local->name, c);
p->local->index++;
}
if (p->local->index >= p->local->len) {
DOL_detach(p);
return -1;
}
return 0;
}