01 2014 档案

(原创)发布一个c++11开发的轻量级的并行Task库TaskCpp
摘要:TaskCpp简介 TaskCpp是c++11开发的一个跨平台的并行task库,它的设计思路来源于微软的并行计算库ppl和intel的并行计算库tbb,关于ppl和tbb我在前面有介绍。既然已经有了这两个大公司开发的并行计算库,我为什么还要开发自己的并行计算库。有两个原因:ppl只能在window... 阅读全文

posted @ 2014-01-27 16:04 qicosmos(江南) 阅读(12348) 评论(12) 推荐(13)

(原创)用C++11的std::async代替线程的创建
摘要:c++11中增加了线程,使得我们可以非常方便的创建线程,它的基本用法是这样的:void f(int n);std::thread t(f, n + 1);t.join(); 但是线程毕竟是属于比较低层次的东西,有时候使用有些不便,比如我希望获取线程函数的返回结果的时候,我就不能直接通过thread.join()得到结果,这时就必须定义一个变量,在线程函数中去给这个变量赋值,然后join,最后得到结果,这个过程是比较繁琐的。c++11还提供了异步接口std::async,通过这个异步接口可以很方便的获取线程函数的执行结果。std::async会自动创建一个线程去调用线程函数,它返回一个st... 阅读全文

posted @ 2014-01-26 16:40 qicosmos(江南) 阅读(57989) 评论(16) 推荐(24)

(原创)c++11中 function/lamda的链式调用
摘要:关于链式调用,比较典型的例子是c#中的linq,不过c#中的linq还只是一些特定函数的链式调用。c++中的链式调用更少见因为实现起来比较复杂。c++11支持了lamda和function,在一些延迟计算的场景下,这个链式调用的需求更强烈了。链式调用要实现的目是,将多个函数按照前一个的输出作为下一个输入串起来,然后再推迟到某个时刻计算。c++中,目前看到PPL中有这样的用法。PPL中链式调用的例子:int wmain(){ auto t = create_task([]() -> int { return 0; }); // Create a lam... 阅读全文

posted @ 2014-01-15 22:30 qicosmos(江南) 阅读(6835) 评论(13) 推荐(1)

c++并行计算库TBB和PPL的基本用法
摘要:并行库充分利用多核的优势,通过并行运算提高程序效率,本文主要介绍c++中两个知名的并行库,一个是intel开发的TBB,一个是微软开发的PPL。本文只介绍其基本的常用用法:并行算法和任务。TBB(Intel® Threading Building Blocks)TBB是intel用标准c++写的一个开源的并行计算库。它的目的是提升数据并行计算的能力,可以在他的官网上下载最新的库和文档。TBB主要功能:并行算法任务调度并行容器同步原语内存分配器TBB并行算法parallel_for:并行方式遍历一个区间。parallel_for(1, 20000, [](int i){cout (0, 阅读全文

posted @ 2014-01-13 11:39 qicosmos(江南) 阅读(36895) 评论(1) 推荐(7)

导航