AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

Boost 1.61 发布,带来了新的 CPU/CPU 计算、插件管理和其他程序库

  • 2016-06-14
  • 本文字数:1444 字

    阅读完需:约 5 分钟

在 1.60 版本发布的 5 个月后,Boost 发布了 1.61 版本,增加了一些新程序库,同时更新了许多程序库。

Boost 1.61 包括 4 个新程序库:

  • Compute ,使用 OpenCL 为多核 CPU 和 GPU 运算平台提供 C++ 接口。OpenCL 是一个开放标准,它允许创建运行在异构运算设备(如 CPU 和 GPU)上的应用程序。该程序库提供管理 OpenCL 对象的类,例如设备(device)、内核(kernel)和命令队列(command_queues),同时也提供了允许开发者处理计算设备、与计算设备传输数据、迭代和转换计算设备的函数。这使得我们可以将数据传输到默认计算设备上,对数据进行转换,最后复制回宿主机:
复制代码
std::vector<float> host_vector(10000);
// 定义宿主机内容向量
// 获取默认设备,并且设置上下文
compute::device device = compute::system::default_device();
compute::context context(device);
compute::command_queue queue(context, device);
// 在设备上创建向量
compute::vector<float> device_vector(host_vector.size(), context);
// 将数据从宿主机传输到设备上
compute::copy(
host_vector.begin(), host_vector.end(), device_vector.begin(), queue
);
// 就地计算每个元素的平方根
compute::transform(
device_vector.begin(),
device_vector.end(),
device_vector.begin(),
compute::sqrt<float>(),
queue
);
// 将数据复制回宿主机
compute::copy(
device_vector.begin(), device_vector.end(), host_vector.begin(), queue
);</float></float></float>
  • DLL ,一个旨在开发跨平台、可移植插件的程序库。DLL 允许开发者加载其他程序库、导入本地函数和变量、查询程序库的段和符号表等。DLL 插件可以通过 extern “C”和 BOOST_SYMBOL_EXPORT 定义。客户端应用程序可以通过执行 DLL 插件的 import 函数加载动态链接库:
复制代码
// 持有指向插件变量指针的变量
boost::shared_ptr<my_plugin_api> plugin;
plugin = dll::import<my_plugin_api>(
full_path_to_library,
name_of_symbol_to_import,
dll::load_mode::append_decorations
);</my_plugin_api></my_plugin_api>

DLL 也支持动态链接库的引用计数,以更好的控制已加载插件的生命周期、在插件卸载时执行回调函数和其他一些功能。

  • Hana ,一个元编程库,它能够提供操作异构序列的高级算法。对比现有元编程库,例如 Boost.MPL Boost.Fusion ,Hana 统一了类型和值的操作。Hana 提供了一系列容器类型,例如元组(tuple)、含无效值容器(optional)、映射(map)等,还有操作这些容器的算法集合,例如折叠(fold)、压缩(zip)、扁平化(flatten)等。
  • Metaparse ,一个用于生成解析器的程序库,它能够在编译时解析文本或代码,并且可以返回一个类型、一个常量和一个运行时调用的 C++ 函数等。Metaparse 特别倾向用于创建一种嵌入式领域特定语言。Metaparse 允许使用类似EBNF 范式的语法定义上下文无关语法。它和另一个著名的元编程库 Boost.Spirit 的主要区别是后者产生运行时解析器,而 Metaparse 产生编译时解析器。

前文提到过,Boost 1.61 也更新了许多现有程序库,包括 Multiprecision (多倍精度数值库)、 Optional (含无效值容器库)、 Geometry (几何库)、 Fusion (容器库)等等。

查看英文原文: Boost 1.61 Brings New Libraries for CPU/CPU Computation, Plugin Management, and More


感谢张龙对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-06-14 19:002504

评论

发布
暂无评论
发现更多内容

Block底层原理探析

Damien

ios 源码分析

容器日志采集利器:Filebeat深度剖析与实践

傅轶

Kubernetes 容器 云原生 日志 Filebeat

Web3极客日报 #133

谢锐 | Frozen

区块链 技术社区 Rebase

消息队列Kafka - 原理分析

Java收录阁

kafka

如何成为一个靠谱的人

熊斌

个人成长 团队协作

HTTP的德性

十三

以物理学思维破解分布式系统的本质

常平

分布式

程序员陪娃漫画系列——喂药

孙苏勇

程序员 生活 陪伴 漫画

为什么开源是基础软件的未来

顾钧

开源 基础软件

思考如何节省时间,节省出时间进行思考

伯薇

思考 时间管理 思考力 工作效率 提升效率

万字破解云原生可观测性

谭建

云原生 APM 可观测性 链路追踪 Skywalking

改变

一把梭

生活 随笔

Web3极客日报#130

谢锐 | Frozen

区块链 创业 独立开发者 技术社区 Rebase

消息队列Kafka - 基本应用

Java收录阁

kafka

论十三

十三

面向兴趣编程 - 一条微博和一个小程序的故事

遇见

小程序 微信小程序 副业 面向兴趣编程

Disruptor 高效的秘密-Sequencer

Rayjun

Java 并发编程 Disruptor

没有了手机的诺基亚,过得远比你想象的要好

赵新龙

微软 手机 上市 诺基亚

苟富贵,勿相忘

十三

Web3极客日报#131

谢锐 | Frozen

区块链 创业 独立开发者 技术社区 Rebase

OKR实践中的痛点(3):破3旧,迎3新!

大叔杨

OKR Scrum 敏捷 敏捷开发 绩效

游戏夜读 | 2020周记(4.10-4.17)

game1night

为什么最该祝自己劳动节快乐

石君

劳动 劳动节 励志

张小龙 的 22 年和微信的 8 年

池建强

微信 张小龙

如何表达自己的感情?

zkh

Web3极客日报 #132

谢锐 | Frozen

区块链 创业 独立开发者 技术社区 Rebase

我所想的跨平台开发:小程序+App+Web

曾伟@喵先森

flutter 小程序 微信小程序 跨平台

重要:Kafka第3篇之一条消息如何被存储到Broker上

z小赵

kafka

科技 vs 隐私:瘟疫下“以健康为名”会将我们推向何方?

陶乐思

《我是余欢水》与《一个叫欧维的男人决定去死》

十三

Java并发编程系列——常用并发工具类

孙苏勇

Java Java并发 并发编程 多线程

Boost 1.61发布,带来了新的CPU/CPU计算、插件管理和其他程序库_C++_Sergio De Simone_InfoQ精选文章