在 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 )关注我们。
评论