免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2539 | 回复: 0

想写点东西,一个适合异构并行计算的library,有图有真像 [复制链接]

论坛徽章:
0
发表于 2011-08-23 12:11 |显示全部楼层
sparrow.png
这是一个设计中的东西, 还没有完工. 但是我己做了一些准备工作, 并且这个东东的爹和妈是正在服役的.
期望大家能提一些意见

最上是ensure, 其实就是一个异常体系. 我觉得C++的异常太复杂,也太简单, 我用的异常是这样的:

  1. class errbase;
  2. template<typename etype>class errinfo: public errbase{...};
复制代码
自己可以定义好多的etype(错误码类型), 再定义这个错误码的信息函数,eid2str(etype),
之后就可以使用异常errinfo<etype>了.

比如数学异常的etype,就可以:
enum ec_math{
   EMATH_SUCCESS
   EMATH_SIZE_CHECK,
   EMATH_VALUE_RANGE;
   ...
};
再实现函数:
const char* eid2str(ec_math eid);


左边是cuda的一系列东西, 虽然cuda包含的东西不少, 其实可以认为有2大方面,一个是存储, 一个是数据并行.
memory是实现一堆存储管理函数,比如分配回收什么device memory, texture, symbol, const memory等等.
下面实现一个block, 就是管理一块显存罢了. 用这个block, 实现了vector和matrix类.

嗯,下一个是并行, CUDA的并行是数据并行体系, 用起来的时候, 也不是很方便.
我需要实现这样的东西:

  1. void helloworld(int id){
  2.    printf("\e[3%dmhello world\n", id%8+1);
  3. }
  4. cuda::parallel( 100, helloworld);
复制代码
当然,这个是1维的, 还要实现2维. 或许,还要实现其它类型的并行方式.

还有几个东东, 比如vector, matrix, complex.
cuda很挑剔, 很多类型是不能传入kernel的, 要自己实现的, 而且要考虑效率.
标准库里很多的东西, 实现得太复杂了, 从设计原则上讲就不适合cuda.

好了, 准备这么多了, 可以实现一些函数库了, 函数库就以常用的blas, lapack, fft开始做吧, 再做一些信号处理里用得到的函数, 比如雷达成像等.


右边是posix的一大堆东西.
分线程,事件, IO三大块.

线程就是包装一下pthreads, 包装风格类似于boost(做这么蛋疼的事, 一方面的原因是boost太臃肿, 另一方面是boost里的东西在cuda里用不起来), 实现什么线程,锁,同步等东西. 包装完,应该有很多非常简单的语法.

接下来,实现个线程池, 功能类似于glib里的threadpool, 虽然glib里的threadpool不错了, 但那种方式太单调了.
再做一个能在多线程下工作的map和queue.
这个queue是实现线程池的关键.  如果把任务扔进这个线程安全的queue里, 多个线程从这个queue里取任务并执行,这就是线程池了(还要加一些特性)

事件,就是一个事件产生池. 无论是select, epool, 还是计时器, 都是一种能产生事件的东西. 做一个抽象的事件池, 也是不错的. 从设计上讲, 允许多个事件池叠加.  这样, 就可以用一个计时器, 一个epool加在一起, 这是很有意思的事件.

事件池是产生事件, 而线程安全的queue可以把事件投入进去.  如果用多个线程从queue里取事件执行呢, 这就是一个事件分发机制, 我称之为dispacher.

最后边是IO一些东西, 主要封装了UDP和TCP, 有些硬件, 是没有arp协议的, 在实现这些东西里, 需要考虑进去. 有些地方, 不仅是带宽, 对实时性也有较高的要求, 设计时也需要考虑. 接口么,一定要简单, 简单的东西, 不容易出问题.
这两个类, 其实都是继承自IO,  IO可以实现一个msg_queue(消息队列, 此消息非彼消息), 用来实现网络通信, 这样可以方便写出多机并行程序.

通过udp, tcp, 还能实现信号处理里用得到的source, sink...

此library暂时命名为sparrow, 即麻雀.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP