写点什么

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:002682

评论

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

如何利用极狐GitLab CI提高生产力?

极狐GitLab

ci

百度交易中台之商品推广流程构建以及实现

百度Geek说

中台 软件架构 电商 交易

华为云薛浩:媒体业务进入全面云化时代,云原生成为必然选择

华为云开发者联盟

云原生 媒体 音视频 华为云

Go 学习笔记之 数组

架构精进之路

Go 语言 7月日更

什么?C语言也能try...catch!

实力程序员

打造中国数字军人 数军科技携黑科技亮相军博会

科技热闻

吹水、面试、进阶齐飞!Github霸榜的阿里分布式设计实录也太香了

Java架构师迁哥

网安行业这几个熟悉又陌生的名词,啥帽子都清楚啦?

郑州埃文科技

RTC为何这么火?

anyRTC开发者

音视频 WebRTC RTC 实时通讯

4轮技术面+1轮HR面,成功拿到腾讯40k*16的Offer ,详解面试流程和真题解析

Java 程序员 架构 面试

在数据库中如何查询表的创建时间?

华为云开发者联盟

数据库 日志 视图 GaussDB(DWS) 查找对象

拖延背后的故事

卢卡多多

拖延症 7月日更

Python 绑定:从 Python 调用 C 或 C++

华为云开发者联盟

c c++ Python 函数 Python 绑定

统一缓存帝国 - 实战 Spring Cache

悟空聊架构

缓存 passjava 悟空聊架构 7月日更 Spring Cache

我给我讲GIT,并成功把我得罪了

加百利

git 7月日更

我还是没有忍住,于是乎我开通了lua语言学习专栏!

李阿柯

lua 专栏

我删库跑路失败了

程序员鱼皮

Java c++ Python Linux 服务器

DolphinDB插件开发深度解析

DolphinDB

数据库 大数据 时序数据库 插件开发 DolphinDB

互联网公司的「敏捷开发」流程是怎么样的?每个职位的角色和分工是什么?

万事ONES

使用tar 命令进行文件的归档和压缩

学神来啦

云计算 Linux 运维 linux运维

底层技术支撑智慧出行,汽车智能化发展下区块链大放异彩

旺链科技

区块链产业

研发管理和项目管理有哪些痛点?

万事ONES

研发管理 ONES 项目管理工具

多媒体技术(一)之图形图像

轻口味

android 音视频 计算机图形学 图形图像处理

union 分页/group/join 复杂查询(.net core/framework)

Spook

sql ORM

替换 Spring Cloud,使用基于 Cloud Native 的服务治理

火山引擎开发者社区

云原生 后端 Service Mesh 服务网格

DataWorks赋能企业一站式数据开发治理能力

阿里云大数据AI技术

Redisson 分布式锁源码 06:公平锁排队加锁

程序员小航

Java redis 分布式锁 redisson

并发王者课-铂金9:互通有无-Exchanger如何完成线程间的数据交换

MetaThoughts

Java 多线程 并发

银行业智能运维的探索与实践

云智慧AIOps社区

银行数字化转型 智能运维

腾讯二面:Linux操作系统里一个进程最多可以创建多少个线程?

白亦杨

小马哥的Java项目训练营-毕业总结

姑射仙人

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