面向对象并行图像处理库与分布式计算调度策略
1. 面向对象并行图像处理库
在设计面向对象并行图像处理库时,需要在两种 C++ 参数化机制中做出选择:
- 继承 :通用操作参数是对抽象基类(接口)的引用,该基类具有纯虚 Process()
方法,用于根据当前像素值计算新的像素值;具体算法类从基类派生并覆盖 Process()
方法。
- 模板 :通用操作是一个模板方法,由具体算法类进行参数化。
从性能和通用性考虑,SSCC_PIPL 采用了第二种方法。这种选择将计算模型抽象级别提高所带来的开销从程序执行时间转移到了编译时间。此外,这种方法允许对计算像素值的函数进行所谓的嵌入,即将函数体的副本插入到函数调用的每个位置,而虚函数则不支持这种嵌入。因此,该库必须以源代码形式分发,用户程序的编译时间会变长,但执行速度会更快。
1.1 示例源代码
以下是一个简化的程序,展示了该库的典型用例,定义了用户算法并将其作为参数传递给相应的 Image
模板方法。
class Laplasian {
int LeftMargin() { return 1; }
int RightMargin() { return 1; }
int TopMargin() { return 1; }
int BottomMargin(){ return 1; }
int Process(Neighb