{"id":27099477,"url":"https://github.com/puzzlef/graph-csr-openmp","last_synced_at":"2025-08-08T13:15:02.402Z","repository":{"id":209121135,"uuid":"719419740","full_name":"puzzlef/graph-csr-openmp","owner":"puzzlef","description":"Design of high-performance OpenMP-based parallel Graph Edgelist and Compressed Sparse Row (CSR) loader, aka GVEL.","archived":false,"fork":false,"pushed_at":"2025-01-04T09:34:29.000Z","size":76,"stargazers_count":0,"open_issues_count":1,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-01-04T09:38:24.098Z","etag":null,"topics":["algorithm","csr","edgelist","graph","gvel","load","openmp","parallel","parser"],"latest_commit_sha":null,"homepage":"https://arxiv.org/abs/2311.14650","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/puzzlef.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.bib","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2023-11-16T05:56:38.000Z","updated_at":"2025-01-04T09:34:31.000Z","dependencies_parsed_at":"2025-01-04T20:16:46.700Z","dependency_job_id":null,"html_url":"https://github.com/puzzlef/graph-csr-openmp","commit_stats":{"total_commits":38,"total_committers":1,"mean_commits":38.0,"dds":0.0,"last_synced_commit":"8f89fb1dc9f35e1c9ff5d28023d711e74a212889"},"previous_names":["puzzlef/graph-csr-openmp"],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puzzlef%2Fgraph-csr-openmp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puzzlef%2Fgraph-csr-openmp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puzzlef%2Fgraph-csr-openmp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/puzzlef%2Fgraph-csr-openmp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/puzzlef","download_url":"https://codeload.github.com/puzzlef/graph-csr-openmp/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247485270,"owners_count":20946397,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithm","csr","edgelist","graph","gvel","load","openmp","parallel","parser"],"created_at":"2025-04-06T12:35:34.872Z","updated_at":"2025-08-08T13:15:02.394Z","avatar_url":"https://github.com/puzzlef.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"Design of high-performance OpenMP-based parallel Graph CSR loader.\n\nHigh-performance graph processing frameworks like [Gunrock], [Hornet], [Ligra], and [Galois] help accelerate graph analytics tasks. However, graph loading is a major bottleneck in these frameworks. Fast graph loading is crucial for improving response time and reducing system/cloud usage charges. To address this, we introduce **GVEL**, a highly optimized method for *reading Edgelists* from text files and *converting them into Compressed Sparse Row (CSR) format*.\n\nBelow we plot the time taken by Hornet, Gunrock, [PIGO], and GVEL for reading Edgelist and converting it to CSR on 13 different graphs. PIGO and GVEL are not visible on this scale - they are significantly faster than Hornet and Gunrock. The graph loading time for Hornet is not shown for `uk-2002`, `it-2004`, and `sk-2005` graphs as it crashed while loading. GVEL surpasses Hornet, Gunrock, and PIGO in CSR reading by `78×`, `112×`, and `1.8×`, respectively.\n\n[![](https://i.imgur.com/MhLmthh.png)][sheets-compare]\n\nBelow we plot only the time taken by PIGO and GVEL for reading Edgelist and converting it to CSR.\n\n[![](https://i.imgur.com/bCPxAhj.png)][sheets-compare]\n\nNext, we plot the time taken by PIGO and GVEL for reading Edgelist. Here, GVEL outperforms PIGO by `2.6×`, achieving a read rate of `1.9 billion edges/s` with 64 threads.\n\n[![](https://i.imgur.com/HAxVu53.png)][sheets-compare]\n\nFinally, we plot the strong scaling behaviour of GVEL for reading Edgelist, and for reading CSR.\n\n[![](https://i.imgur.com/Qn64Uhn.png)][sheets]\n\nRefer to our technical report for more details: \\\n[GVEL: Fast Graph Loading in Edgelist and Compressed Sparse Row (CSR) formats][report].\n\n\u003cbr\u003e\n\n\u003e [!NOTE]\n\u003e You can just copy `main.sh` to your system and run it. \\\n\u003e For the code, refer to `main.cxx`.\n\n[sheets]: https://docs.google.com/spreadsheets/d/1aN2yq3XLOsUTnHTQ9NWo_xNqAuI_BA_alLI9Uy8B4QY/edit?usp=sharing\n[sheets-compare]: https://docs.google.com/spreadsheets/d/1L8W9iqtDsrUb_ZfCuCD7hxSvzJOXZPkKfvhpE5aNcJ0/edit?usp=sharing\n[report]: https://arxiv.org/abs/2311.14650\n[Gunrock]: https://github.com/gunrock/gunrock\n[Hornet]: https://github.com/rapidsai/cuhornet\n[Ligra]: https://github.com/jshun/ligra\n[Galois]: https://github.com/IntelligentSoftwareSystems/Galois\n[PIGO]: https://github.com/GT-TDAlab/PIGO\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n### Code structure\n\nThe code structure of GVEL is as follows:\n\n```bash\n- inc/_cctype.hxx: Character classification/conversion\n- inc/debug.hxx: Debugging macros (LOG, ASSERT, ...)\n- inc/exception.hxx: Custom exception class (FormatError)\n- inc/_mman.hxx: Memory mapping/allcation functions\n- inc/_openmp.hxx: OpenMP utility functions\n- inc/_string.hxx: Number parsing/string tokenization\n- inc/_utility.hxx: Runtime measurement functions\n- inc/_vector.hxx: Vector utility functions\n- inc/io.hxx: COO/MTX file reading functions\n- main.cxx: Experimentation code\n- process.js: Node.js script for processing output logs\n```\n\nNote that each branch in this repository contains code for a specific experiment. The `main` branch contains code for the final experiment. If the intention of a branch in unclear, or if you have comments on our technical report, feel free to open an issue.\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n## References\n\n### Graph formats\n\n- [Best/more standard graph representation file format? (GraphSON, Gexf, GraphML?) - Stack Overflow](https://stackoverflow.com/questions/31321009/best-more-standard-graph-representation-file-format-graphson-gexf-graphml)\n- [Is there documentation on the structure of MAT-files in MATLAB? - MATLAB Answers - MATLAB Central](https://www.mathworks.com/matlabcentral/answers/93868-is-there-documentation-on-the-structure-of-mat-files-in-matlab)\n\u003c!-- PARAGRAPH --\u003e\n- [Matrix Market: File Formats](https://math.nist.gov/MatrixMarket/formats.html#hb)\n- [Matrix Market exchange formats - Wikipedia](https://en.wikipedia.org/wiki/Matrix_Market_exchange_formats)\n- [Harwell-Boeing file format - Wikipedia](https://en.wikipedia.org/wiki/Harwell-Boeing_file_format)\n- [RB Files - The Rutherford Boeing Sparse Matrix File Format](https://people.math.sc.edu/Burkardt/data/rb/rb.html)\n- [HB Files - The Harwell Boeing Sparse Matrix File Format](https://people.math.sc.edu/Burkardt/data/hb/hb.html)\n- [DIMACS graph format](http://lcs.ios.ac.cn/~caisw/Resource/about_DIMACS_graph_format.txt)\n- [DIMACS-READER - Dimacs-reader](https://www.cs.utexas.edu/users/moore/acl2/manuals/current/manual/index-seo.php/DIMACS-READER____DIMACS-READER)\n\n\n### Graph frameworks\n\n- [GT-TDAlab/PIGO](https://github.com/GT-TDAlab/PIGO)\n- [rapidsai/cuhornet](https://github.com/rapidsai/cuhornet)\n- [gunrock/gunrock](https://github.com/gunrock/gunrock)\n- [the-data-lab/GraphOne](https://github.com/the-data-lab/GraphOne)\n- [rapidsai/cugraph](https://github.com/rapidsai/cugraph)\n- [cmuparlay/pbbsbench](https://github.com/cmuparlay/pbbsbench)\n- [KatanaGraph/katana](https://github.com/KatanaGraph/katana)\n- [GraphIt-DSL/graphit](https://github.com/GraphIt-DSL/graphit)\n\n\n### Memory mapping\n\n- [Why mmap is faster than system calls | by Alexandra (Sasha) Fedorova | Medium](https://sasha-f.medium.com/why-mmap-is-faster-than-system-calls-24718e75ab37)\n- [File Handling Through C++ | How to Open, Save, Read and Close](https://www.mygreatlearning.com/blog/file-handling-in-cpp/)\n- [How to use mmap function in C language?](https://linuxhint.com/using_mmap_function_linux/)\n\u003c!-- PARAGRAPH --\u003e\n- [Efficient Memory Mapped File I/O for In-Memory File Systems](https://www.usenix.org/sites/default/files/conference/protected-files/hotstorage17_slides_choi.pdf)\n- [DI-MMAP—a scalable memory-map runtime for out-of-core data-intensive applications | Cluster Computing](https://link.springer.com/article/10.1007/s10586-013-0309-0)\n- [Optimizing Memory-Access Patterns for Deep Learning Accelerators](https://arxiv.org/pdf/2002.12798.pdf)\n\u003c!-- PARAGRAPH --\u003e\n- [malloc vs mmap in C - Stack Overflow](https://stackoverflow.com/questions/1739296/malloc-vs-mmap-in-c)\n- [memory - Anonymous mmap zero-filled? - Stack Overflow](https://stackoverflow.com/questions/17542601/anonymous-mmap-zero-filled)\n- [Linux mmap() with MAP_POPULATE, man page seems to give wrong info - Stack Overflow](https://stackoverflow.com/questions/23502361/linux-mmap-with-map-populate-man-page-seems-to-give-wrong-info)\n- [Is there really no asynchronous block I/O on Linux? - Stack Overflow](https://stackoverflow.com/questions/13407542/is-there-really-no-asynchronous-block-i-o-on-linux)\n- [c - How to use mmap to allocate a memory in heap? - Stack Overflow](https://stackoverflow.com/questions/4779188/how-to-use-mmap-to-allocate-a-memory-in-heap)\n- [c - When should I use mmap for file access? - Stack Overflow](https://stackoverflow.com/questions/258091/when-should-i-use-mmap-for-file-access)\n- [c - Zero a large memory mapping with `madvise` - Stack Overflow](https://stackoverflow.com/questions/18595123/zero-a-large-memory-mapping-with-madvise)\n- [c - When would one use mmap MAP_FIXED? - Stack Overflow](https://stackoverflow.com/questions/28575893/when-would-one-use-mmap-map-fixed)\n- [c - Overlapping pages with mmap (MAP_FIXED) - Stack Overflow](https://stackoverflow.com/questions/14943990/overlapping-pages-with-mmap-map-fixed)\n- [c++ - Platform independent memory mapped [file] IO - Stack Overflow](https://stackoverflow.com/questions/8215823/platform-independent-memory-mapped-file-io)\n- [c++ - mmap() vs. reading blocks - Stack Overflow](https://stackoverflow.com/questions/45972/mmap-vs-reading-blocks)\n- [c++ - Is mmap + madvise really a form of async I/O? - Stack Overflow](https://stackoverflow.com/questions/31215250/is-mmap-madvise-really-a-form-of-async-i-o)\n- [c++ - Does unique_ptr::release() call the destructor? - Stack Overflow](https://stackoverflow.com/questions/25609457/does-unique-ptrrelease-call-the-destructor)\n\u003c!-- PARAGRAPH --\u003e\n- [Does the OS dispatch to another process when there's a page fault on the current process? - Quora](https://www.quora.com/Does-the-OS-dispatch-to-another-process-when-theres-a-page-fault-on-the-current-process)\n- [memory management - Does a page fault causes the faulting process to reschedule? - Stack Overflow](https://stackoverflow.com/questions/13441732/does-a-page-fault-causes-the-faulting-process-to-reschedule)\n- [memory management - How to get page size programmatically within Linux kernel module code - Stack Overflow](https://stackoverflow.com/questions/4888067/how-to-get-page-size-programmatically-within-linux-kernel-module-code)\n\u003c!-- PARAGRAPH --\u003e\n- [Writing files using O_DIRECT in C](https://www.linuxquestions.org/questions/programming-9/writing-files-using-o_direct-in-c-792203/)\n- [LKML: Linus Torvalds: Re: O_DIRECT question](https://lkml.org/lkml/2007/1/11/129)\n- [file - Portability of open(...O_DIRECT) in C? - Stack Overflow](https://stackoverflow.com/questions/924900/portability-of-open-o-direct-in-c)\n\u003c!-- PARAGRAPH --\u003e\n- [Hugepages - Debian Wiki](https://wiki.debian.org/Hugepages)\n- [open(2) - Linux manual page](https://man7.org/linux/man-pages/man2/open.2.html)\n- [close(2): close file descriptor - Linux man page](https://linux.die.net/man/2/close)\n- [mmap(3): map pages of memory - Linux man page](https://linux.die.net/man/3/mmap)\n- [mmap(2) - Linux manual page](https://man7.org/linux/man-pages/man2/mmap.2.html)\n- [madvise(2): give advice about use of memory - Linux man page](https://linux.die.net/man/2/madvise)\n- [madvise(2) - Linux manual page](https://man7.org/linux/man-pages/man2/madvise.2.html)\n- [msync(2) - Linux manual page](https://man7.org/linux/man-pages/man2/msync.2.html)\n- [mincore(2) - Linux manual page](https://man7.org/linux/man-pages/man2/mincore.2.html)\n- [\u003csys/mman.h\u003e](https://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/mman.h.html)\n\n\n### String tokenization\n\n- [isspace() in C - GeeksforGeeks](https://www.geeksforgeeks.org/isspace-in-c/)\n- [Three reasons to pass `std::string_view` by value – Arthur O'Dwyer – Stuff mostly about C++](https://quuxplusone.github.io/blog/2021/11/09/pass-string-view-by-value/)\n\u003c!-- PARAGRAPH --\u003e\n- [What is vertical tab, form feeds and backspace character? How to use them in JavaScript? - Stack Overflow](https://stackoverflow.com/questions/2377084/what-is-vertical-tab-form-feeds-and-backspace-character-how-to-use-them-in-jav)\n- [c++ - How to efficiently get a `string_view` for a substring of `std::string` - Stack Overflow](https://stackoverflow.com/questions/46032307/how-to-efficiently-get-a-string-view-for-a-substring-of-stdstring)\n- [c++ - Constructing istringstream with string_view doesn't compile - Stack Overflow](https://stackoverflow.com/questions/57259965/constructing-istringstream-with-string-view-doesnt-compile)\n- [c++ - Safely convert std::string_view to int (like stoi or atoi) - Stack Overflow](https://stackoverflow.com/questions/56634507/safely-convert-stdstring-view-to-int-like-stoi-or-atoi)\n- [c++ - Passing std::string_view by reference - Stack Overflow](https://stackoverflow.com/questions/58410793/passing-stdstring-view-by-reference)\n- [c++ - Why is std::string_view faster than const char*? - Stack Overflow](https://stackoverflow.com/questions/60015661/why-is-stdstring-view-faster-than-const-char)\n- [c++ - Why can't I construct a string_view from range iterators? - Stack Overflow](https://stackoverflow.com/questions/66691886/why-cant-i-construct-a-string-view-from-range-iterators)\n- [c++ - How you convert a std::string_view to a const char*? - Stack Overflow](https://stackoverflow.com/questions/48081436/how-you-convert-a-stdstring-view-to-a-const-char)\n- [c++17 - Why is there no implicit conversion from std::string_view to std::string? - Stack Overflow](https://stackoverflow.com/questions/47525238/why-is-there-no-implicit-conversion-from-stdstring-view-to-stdstring)\n- [pointers - Meaning of *\u0026 and **\u0026 in C++ - Stack Overflow](https://stackoverflow.com/questions/5789806/meaning-of-and-in-c)\n\u003c!-- PARAGRAPH --\u003e\n- [std::basic_string_view - cppreference.com](https://en.cppreference.com/w/cpp/string/basic_string_view)\n- [std::basic_string_view\u003cCharT,Traits\u003e::basic_string_view - cppreference.com](https://en.cppreference.com/w/cpp/string/basic_string_view/basic_string_view)\n- [std::basic_string_view\u003cCharT,Traits\u003e::substr - cppreference.com](https://en.cppreference.com/w/cpp/string/basic_string_view/substr)\n- [std::basic_string_view\u003cCharT,Traits\u003e::remove_prefix - cppreference.com](https://en.cppreference.com/w/cpp/string/basic_string_view/remove_prefix)\n- [C++ named requirements: LegacyRandomAccessIterator - cppreference.com](https://en.cppreference.com/w/cpp/named_req/RandomAccessIterator)\n- [memchr - cppreference.com](https://en.cppreference.com/w/c/string/byte/memchr)\n\n\n### Parsing numbers\n\n- [c - converting a string into a double - Stack Overflow](https://stackoverflow.com/questions/4308536/converting-a-string-into-a-double)\n- [c++ - convert string to size_t - Stack Overflow](https://stackoverflow.com/questions/34043894/convert-string-to-size-t)\n- [c++ - Undefined symbol std::from_chars(...) - Stack Overflow](https://stackoverflow.com/questions/73362643/undefined-symbol-stdfrom-chars)\n- [C++ most efficient way to convert string to int (faster than atoi) - Stack Overflow](https://stackoverflow.com/questions/16826422/c-most-efficient-way-to-convert-string-to-int-faster-than-atoi)\n- [c++ - optimal way to convert string to double? - Stack Overflow](https://stackoverflow.com/questions/11471661/optimal-way-to-convert-string-to-double)\n- [c++ - What's the fastest or most efficient way to convert a double value to its most concise string representation? - Stack Overflow](https://stackoverflow.com/questions/49500969/whats-the-fastest-or-most-efficient-way-to-convert-a-double-value-to-its-most-c)\n- [Fastest way to read numerical values from text file in C++ (double in this case) - Stack Overflow](https://stackoverflow.com/questions/5678932/fastest-way-to-read-numerical-values-from-text-file-in-c-double-in-this-case)\n- [c++ - What is more efficient? Using pow to square or just multiply it with itself? - Stack Overflow](https://stackoverflow.com/questions/2940367/what-is-more-efficient-using-pow-to-square-or-just-multiply-it-with-itself)\n\u003c!-- PARAGRAPH --\u003e\n- [Standard library header \u003ccharconv\u003e (C++17) - cppreference.com](https://en.cppreference.com/w/cpp/header/charconv)\n- [std::chars_format - cppreference.com](https://en.cppreference.com/w/cpp/utility/chars_format)\n- [std::from_chars - cppreference.com](https://en.cppreference.com/w/cpp/utility/from_chars)\n- [std::is_integral - cppreference.com](https://en.cppreference.com/w/cpp/types/is_integral)\n- [std::pow, std::powf, std::powl - cppreference.com](https://en.cppreference.com/w/cpp/numeric/math/pow)\n- [strtoull - cplusplus.com](https://cplusplus.com/reference/cstdlib/strtoull/)\n\n\n### Parsing numbers (SIMD)\n\n- [Parsing integers quickly with AVX-512 – Daniel Lemire's blog](https://lemire.me/blog/2023/09/22/parsing-integers-quickly-with-avx-512/?unapproved=655966\u0026moderation-hash=facfd7c3517c4062324e656ae5397261#comment-655966)\n- [Faster Integer Parsing](https://kholdstare.github.io/technical/2020/05/26/faster-integer-parsing.html)\n- [Fast float parsing in practice – Daniel Lemire's blog](https://lemire.me/blog/2020/03/10/fast-float-parsing-in-practice/)\n- [AVX512/VBMI2: A Programmer’s Perspective | Hacker News](https://news.ycombinator.com/item?id=28179111)\n\u003c!-- PARAGRAPH --\u003e\n- [Code-used-on-Daniel-Lemire-s-blog/2023/09/22/src/parse_integer.cpp at master · lemire/Code-used-on-Daniel-Lemire-s-blog · GitHub](https://github.com/lemire/Code-used-on-Daniel-Lemire-s-blog/blob/master/2023/09/22/src/parse_integer.cpp)\n- [GitHub - lemire/fast_double_parser: Fast function to parse strings into double (binary64) floating-point values, enforces the RFC 7159 (JSON standard) grammar: 4x faster than strtod](https://github.com/lemire/fast_double_parser)\n\u003c!-- PARAGRAPH --\u003e\n- [visual c++ - How to write c++ code that the compiler can efficiently compile to SSE or AVX? - Stack Overflow](https://stackoverflow.com/questions/33504003/how-to-write-c-code-that-the-compiler-can-efficiently-compile-to-sse-or-avx)\n- [Header files for x86 SIMD intrinsics - Stack Overflow](https://stackoverflow.com/questions/11228855/header-files-for-x86-simd-intrinsics)\n- [simd - What exactly do the gcc compiler switches (-mavx -mavx2 -mavx512f) do? - Stack Overflow](https://stackoverflow.com/questions/71229343/what-exactly-do-the-gcc-compiler-switches-mavx-mavx2-mavx512f-do)\n- [x86 Options (Using the GNU Compiler Collection (GCC))](https://gcc.gnu.org/onlinedocs/gcc/x86-Options.html)\n- [Improving performance with SIMD intrinsics in three use cases - Stack Overflow](https://stackoverflow.blog/2020/07/08/improving-performance-with-simd-intrinsics-in-three-use-cases/)\n- [How do I define a 512 bit integer in C++? - Stack Overflow](https://stackoverflow.com/questions/47898555/how-do-i-define-a-512-bit-integer-in-c)\n- [c - Is there a 256-bit integer type? - Stack Overflow](https://stackoverflow.com/questions/55802309/is-there-a-256-bit-integer-type)\n- [C++ 128/256-bit fixed size integer types - Stack Overflow](https://stackoverflow.com/questions/5242819/c-128-256-bit-fixed-size-integer-types)\n- [c++ - How to create a left-packed vector of indices of the 0s in one SIMD vector? - Stack Overflow](https://stackoverflow.com/questions/72098296/how-to-create-a-left-packed-vector-of-indices-of-the-0s-in-one-simd-vector)\n- [c++ - Can I use SIMD for speeding up string manipulation? - Stack Overflow](https://stackoverflow.com/questions/64975030/can-i-use-simd-for-speeding-up-string-manipulation)\n- [c++ - SSE and AVX intrinsics mixture - Stack Overflow](https://stackoverflow.com/questions/18319488/sse-and-avx-intrinsics-mixture)\n- [c++ - Why is transforming an array using AVX-512 instructions significantly slower when transforming it in batches of 8 compared to 7 or 9? - Stack Overflow](https://stackoverflow.com/questions/74069410/why-is-transforming-an-array-using-avx-512-instructions-significantly-slower-whe)\n- [c++ - Compiling legacy GCC code with AVX vector warnings - Stack Overflow](https://stackoverflow.com/questions/39383193/compiling-legacy-gcc-code-with-avx-vector-warnings)\n- [c - inlining failed in call to always_inline ‘_mm_mullo_epi32’: target specific option mismatch - Stack Overflow](https://stackoverflow.com/questions/43128698/inlining-failed-in-call-to-always-inline-mm-mullo-epi32-target-specific-opti)\n- [android - What causes signal 'SIGILL'? - Stack Overflow](https://stackoverflow.com/questions/7901867/what-causes-signal-sigill)\n\u003c!-- PARAGRAPH --\u003e\n- [Intel® Intrinsics Guide](https://www.intel.com/content/www/us/en/docs/intrinsics-guide/index.html#!=undefined\u0026expand=7\u0026cats=Convert\u0026text=_mm256_cvtepi16_epi8\u0026ig_expand=1616)\n- [EPYC Offers x86 Compatibility](https://www.amd.com/content/dam/amd/en/documents/epyc-business-docs/white-papers/EPYC-Offers-x86-Compatibility.pdf)\n- [AVX-512 - Wikipedia](https://en.wikipedia.org/wiki/AVX-512)\n\n\n### Stringifying numbers\n\n- [Convert double to string in scientific notation faster than sprintf in c++ - Stack Overflow](https://stackoverflow.com/questions/28260412/convert-double-to-string-in-scientific-notation-faster-than-sprintf-in-c)\n- [std::to_chars - cppreference.com](https://en.cppreference.com/w/cpp/utility/to_chars)\n\n\n### Performance optimization\n\n- [c++ - efficient push_back in std::vector - Stack Overflow](https://stackoverflow.com/questions/15411641/efficient-push-back-in-stdvector)\n- [Optimizing C++ vector for 2x performance ! - DEV Community](https://dev.to/adwaitthattey/optimizing-c-vector-for-2x-performance--1691)\n- [c++ - How to reserve a multi-dimensional Vector without increasing the vector size? - Stack Overflow](https://stackoverflow.com/questions/57542919/how-to-reserve-a-multi-dimensional-vector-without-increasing-the-vector-size)\n- [c++ - What is gsl::multi_span to be used for? - Stack Overflow](https://stackoverflow.com/questions/45201524/what-is-gslmulti-span-to-be-used-for)\n- [c++ - The difference between vector and deque - Stack Overflow](https://stackoverflow.com/questions/22068188/the-difference-between-vector-and-deque)\n- [c++ - How is sort for std::deque implemented? - Stack Overflow](https://stackoverflow.com/questions/24199421/how-is-sort-for-stddeque-implemented)\n- [performance - What does gcc's ffast-math actually do? - Stack Overflow](https://stackoverflow.com/questions/7420665/what-does-gccs-ffast-math-actually-do)\n\u003c!-- PARAGRAPH --\u003e\n- [std::deque\u003cT,Allocator\u003e::operator[] - cppreference.com](https://en.cppreference.com/w/cpp/container/deque/operator_at)\n- [std::deque - cppreference.com](https://en.cppreference.com/w/cpp/container/deque)\n\u003c!-- PARAGRAPH --\u003e\n- [Compiler Explorer](https://godbolt.org/)\n\n\n### Smart pointers\n\n- [How to: Create and use unique_ptr instances | Microsoft Learn](https://learn.microsoft.com/en-us/cpp/cpp/how-to-create-and-use-unique-ptr-instances?view=msvc-170)\n- [Smart pointers (Modern C++) | Microsoft Learn](https://learn.microsoft.com/en-us/cpp/cpp/smart-pointers-modern-cpp?view=msvc-170)\n- [c++ - Why can I not push_back a unique_ptr into a vector? - Stack Overflow](https://stackoverflow.com/questions/3283778/why-can-i-not-push-back-a-unique-ptr-into-a-vector)\n\u003c!-- PARAGRAPH --\u003e\n- [std::unique_ptr - cppreference.com](https://en.cppreference.com/w/cpp/memory/unique_ptr)\n- [std::make_unique, std::make_unique_for_overwrite - cppreference.com](https://en.cppreference.com/w/cpp/memory/unique_ptr/make_unique)\n\n\n### Exception handling\n\n- [What are the best practices when implementing C++ error handling? - Software Engineering Stack Exchange](https://softwareengineering.stackexchange.com/questions/430984/what-are-the-best-practices-when-implementing-c-error-handling)\n- [How to throw dynamic string in custom exception? I can't throw string created on stack! : r/cpp_questions](https://www.reddit.com/r/cpp_questions/comments/pq0ezf/how_to_throw_dynamic_string_in_custom_exception_i/)\n- [C++ Exception Handling (With Examples)](https://www.programiz.com/cpp-programming/exception-handling)\n- [Modern C++ best practices for exceptions and error handling | Microsoft Learn](https://learn.microsoft.com/en-us/cpp/cpp/errors-and-exception-handling-modern-cpp?view=msvc-170)\n- [Zero-cost exceptions aren't actually zero cost - The Old New Thing](https://devblogs.microsoft.com/oldnewthing/20220228-00/?p=106296)\n\u003c!-- PARAGRAPH --\u003e\n- [Should I return TRUE / FALSE values from a C function? - Stack Overflow](https://stackoverflow.com/questions/559061/should-i-return-true-false-values-from-a-c-function)\n- [error handling - C++ custom exception class - Code Review Stack Exchange](https://codereview.stackexchange.com/questions/244124/c-custom-exception-class)\n- [c++11 - Exception propagation and context - Stack Overflow](https://stackoverflow.com/questions/58208792/exception-propagation-and-context)\n- [c++ - throw an exception from a lambda expression, bad habit? - Stack Overflow](https://stackoverflow.com/questions/37092596/throw-an-exception-from-a-lambda-expression-bad-habit)\n- [c++ - Augment a thrown exception with some contextual information - Software Engineering Stack Exchange](https://softwareengineering.stackexchange.com/questions/349830/augment-a-thrown-exception-with-some-contextual-information)\n- [c++ - throw new std::exception vs throw std::exception - Stack Overflow](https://stackoverflow.com/questions/10948316/throw-new-stdexception-vs-throw-stdexception)\n- [c++ - Use throw_with_nested and catch nested exception - Stack Overflow](https://stackoverflow.com/questions/18108314/use-throw-with-nested-and-catch-nested-exception)\n- [c++ - What is the correct way for exception handling with OpenMP tasks? - Stack Overflow](https://stackoverflow.com/questions/69889899/what-is-the-correct-way-for-exception-handling-with-openmp-tasks)\n\u003c!-- PARAGRAPH --\u003e\n- [Standard library header \u003cexception\u003e - cppreference.com](https://en.cppreference.com/w/cpp/header/exception)\n- [noexcept specifier (since C++11) - cppreference.com](https://en.cppreference.com/w/cpp/language/noexcept_spec)\n- [std::perror - cppreference.com](https://en.cppreference.com/w/cpp/io/c/perror)\n- [std::exception::exception - cppreference.com](https://en.cppreference.com/w/cpp/error/exception/exception)\n- [std::current_exception - cppreference.com](https://en.cppreference.com/w/cpp/error/current_exception)\n- [std::nested_exception::nested_exception - cppreference.com](https://en.cppreference.com/w/cpp/error/nested_exception/nested_exception)\n- [std::nested_exception - cppreference.com](https://en.cppreference.com/w/cpp/error/nested_exception)\n\n\n### Basics\n\n- [OpenMP - Scheduling(static, dynamic, guided, runtime, auto) - Yiling's Tech Zone](https://610yilingliu.github.io/2020/07/15/ScheduleinOpenMP/)\n- [c++ - OPenMP loop increment - Stack Overflow](https://stackoverflow.com/questions/7448812/openmp-loop-increment)\n- [c++ - Atomic Minimum on x86 using OpenMP - Stack Overflow](https://stackoverflow.com/questions/12255266/atomic-minimum-on-x86-using-openmp)\n- [Class method and variable with same name, compile error in C++ not in Java? - Stack Overflow](https://stackoverflow.com/questions/467815/class-method-and-variable-with-same-name-compile-error-in-c-not-in-java)\n- [c++ - Do the \u0026= and |= operators for bool short-circuit? - Stack Overflow](https://stackoverflow.com/questions/23107162/do-the-and-operators-for-bool-short-circuit)\n- [c++ - What is the purpose of std::make_pair vs the constructor of std::pair? - Stack Overflow](https://stackoverflow.com/questions/9270563/what-is-the-purpose-of-stdmake-pair-vs-the-constructor-of-stdpair)\n- [c++ - What is the reason for `std::make_tuple`? - Stack Overflow](https://stackoverflow.com/questions/34180636/what-is-the-reason-for-stdmake-tuple)\n- [c++ - Pass an array as template type - Stack Overflow](https://stackoverflow.com/questions/10128159/pass-an-array-as-template-type)\n- [Multiple typename arguments in c++ template? (variadic templates) - Stack Overflow](https://stackoverflow.com/questions/19923353/multiple-typename-arguments-in-c-template-variadic-templates)\n- [What does 'const static' mean in C and C++? - Stack Overflow](https://stackoverflow.com/questions/177437/what-does-const-static-mean-in-c-and-c)\n- [c++ - Should I use size_t or ssize_t? - Stack Overflow](https://stackoverflow.com/questions/15739490/should-i-use-size-t-or-ssize-t)\n\u003c!-- PARAGRAPH --\u003e\n- [Parameter pack(since C++11) - cppreference.com](https://en.cppreference.com/w/cpp/language/parameter_pack)\n- [std::tie - cppreference.com](https://en.cppreference.com/w/cpp/utility/tuple/tie)\n- [std::pair - cplusplus.com](https://cplusplus.com/reference/utility/pair/pair/)\n- [std::array - cppreference.com](https://en.cppreference.com/w/cpp/container/array)\n- [std::size_t - cppreference.com](https://en.cppreference.com/w/cpp/types/size_t)\n\u003c!-- PARAGRAPH --\u003e\n- [Reduction Clauses and Directives](https://www.openmp.org/spec-html/5.0/openmpsu107.html)\n- [ASCII Table - ASCII Character Codes, HTML, Octal, Hex, Decimal](https://www.asciitable.com/)\n\n\n### Testing\n\n- [Remove First n Lines of a Large Text File - Ask Ubuntu](https://askubuntu.com/questions/410196/remove-first-n-lines-of-a-large-text-file/410209#410209)\n- [javascript - How to append to a file in Node? - Stack Overflow](https://stackoverflow.com/questions/3459476/how-to-append-to-a-file-in-node)\n- [git - Pushing code from one branch of a repo to another branch of another repo - Stack Overflow](https://stackoverflow.com/questions/35939308/pushing-code-from-one-branch-of-a-repo-to-another-branch-of-another-repo)\n\n\u003cbr\u003e\n\u003cbr\u003e\n\n\n[![](https://img.youtube.com/vi/yqO7wVBTuLw/maxresdefault.jpg)](https://www.youtube.com/watch?v=yqO7wVBTuLw)\u003cbr\u003e\n[![ORG](https://img.shields.io/badge/org-puzzlef-green?logo=Org)](https://puzzlef.github.io)\n[![DOI](https://zenodo.org/badge/719419740.svg)](https://zenodo.org/doi/10.5281/zenodo.10226820)\n![](https://ga-beacon.deno.dev/G-KD28SG54JQ:hbAybl6nQFOtmVxW4if3xw/github.com/puzzlef/graph-csr-openmp)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuzzlef%2Fgraph-csr-openmp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpuzzlef%2Fgraph-csr-openmp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpuzzlef%2Fgraph-csr-openmp/lists"}