副问题[/!--empirenews.page--]
JSON文档在Internet上无处不在,处事器耗费大量时刻来理会这些文档。我们但愿在举办完全验证(包罗字符编码)时尽也许行使常用的SIMD指令来加快JSON自己的理会。
示意功效
simdjson行使的指令比最先辈的理会器RapidJSON少四分之三,比sajson少百分之五十。据我们所知,simdjson是第一个在商用处理赏罚器上以每秒千兆字节运行的完全验证的JSON理会器。

在Skylake处理赏罚器上,twitter.json文件上各类处理赏罚器的理会速率(以GB / s为单元)如下。
要求
我们通过Visual Studio 2017或更高版本支持Linux或macOS等平台以及Windows;
带有AVX2的处理赏罚器(即,2013年宣布的Haswell微系统布局的Intel处理赏罚器和2017年宣布的Zen微系统布局的AMD处理赏罚器);
最近的C ++编译器(譬喻,GNU GCC或LLVM CLANG或Visual Studio 2017),我们假设C ++ 17。GNU GCC 7或更高版本或LLVM的clang 6或更高版本。
License
此代码在Apache License 2.0下提供。
在Windows下,我们行使 windows/dirent_portable.h 文件(在我们的库代码之外)构建一些器材
代码示例
- #include "simdjson/jsonparser.h"
-
- /...
-
- const char * filename = ... //
-
- //行使您想要的任何方法获取JSON文档的字符串
- std::string_view p = get_corpus(filename);
- ParsedJson pj;
- pj.allocateCapacity(p.size());//分派内存以理会p.size()字节
- const int res = json_parse(p, pj); //举办理会,乐成时返回0
- //理会完成!
- if(res!= 0){
- //您可以行使“simdjson / simdjson.h”标头来会见错误动静
- std::cout << "Error parsing:" << simdjson::errorMsg(res) << std::endl;
- }
- //你可以安详地删除字符串内容
- free((void*)p.data());
- //可以在这里行使ParsedJson文档
- // js可以与其他json_parse挪用一路行使。
假如您不介怀为每个新的JSON文档分派内存开销,也可以行使更简朴的API:
- #include "simdjson/jsonparser.h"
-
- / ...
-
- const char * filename = ... //
- std::string_view p = get_corpus(filename);
- ParsedJson pj = build_parsed_json(p); //举办理会
- //此时你不再必要p,可以执行aligned_free((void *)p.data())
- if( ! pj.isValid() ) {
- //堕落了
- }
用法:简朴的版本
有关用法,请参阅“singleheader”存储库的文件“amalgamation_demo.cpp”。这不必要特定的构建体系:只需在包括路径中复制项目中的文件即可。然后,您可以很是简朴地包括它们:
- #include <iostream>
- #include "simdjson.h"
- #include "simdjson.cpp"
- int main(int argc, char *argv[]) {
- const char * filename = argv[1];
- std::string_view p = get_corpus(filename);
- ParsedJson pj = build_parsed_json(p); // do the parsing
- if( ! pj.isValid() ) {
- std::cout << "not valid" << std::endl;
- } else {
- std::cout << "valid" << std::endl;
- }
- return EXIT_SUCCESS;
- }
我们必要AVX2指令的硬件支持。您必需确保指示编译器按照必要行使这些声名。在GNU GCC或LLVM clang等编译器下, -march=native 最近的Intel处理赏罚器(Haswell或更好)上行使的符号就足够了。为了便于二进制文件的可移植性,您还可以直接指定Haswell处理赏罚器( -march=haswell )。您也可以行使符号 -mavx2 -mbmi2 。在Visual Studio下,您必要定位x64并添加符号 /arch:AVX2 。
留意:在某些配置中,也许必要预编译 simdjson.cpp 而不是包括它。
用法(在Linux或macOS等平台上行使旧版Makefile)
要求:最近的clang或gcc,和make。我们提议至少行使GNU GCC / G ++ 7或LLVM clang 6.必要像Linux或macOS这样的体系。
测试:
- make
- make test
要运行基准测试:
- make parse
- ./parse jsonexamples/twitter.json
在Linux下,该 parse 呼吁提供了机能计数器的具体说明。
运行较量基准测试(与其他理会器):
- make benchmark
用法(在Linux或macOS等平台上行使CMake)
要求:我们必要最新版本的cmake。在macOS上,安装cmake的最简朴要领也许是行使 brew然后键入
- brew install cmake
在Linux上 有一个 沟通的Brew也可以以沟通的方法事变 。
(编辑:湖南网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|