{"id":2798,"date":"2024-02-13T06:53:25","date_gmt":"2024-02-13T06:53:25","guid":{"rendered":"https:\/\/blogs.qub.ac.uk\/dipsa\/?page_id=2798"},"modified":"2025-11-12T09:31:49","modified_gmt":"2025-11-12T09:31:49","slug":"paragrapher","status":"publish","type":"page","link":"https:\/\/blogs.qub.ac.uk\/dipsa\/paragrapher\/","title":{"rendered":"ParaGrapher: Graph Loading API and Library"},"content":{"rendered":"\n<h2 class=\"wp-block-heading has-text-align-justify has-medium-font-size\"><strong>Project Statement<\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-justify\">Several graph frameworks exist and each one optimizes particular graph algorithms for different optimization metrics and is implemented in a different programming language using different parallelization libraries\/techniques. As each framework has implemented its own format of graphs, it becomes time-consuming, inaccurate, and sometimes impossible to compare the execution of graph algorithms across different frameworks for a wide range of graph datasets. Moreover, designing a new graph framework requires investing time for implementing solutions for loading the graphs (as input datasets to the algorithms), while it is the execution of graph algorithms that is the main optimization target of the graph frameworks and not loading the graphs.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">It may be better to separate the process of loading graphs from designing high-performance graph algorithms. We present ParaGrapher, an API and a library for loading graphs. ParaGrapher supports (i) synchronous (blocking) and asynchronous (non-blocking) loading of (ii) simple, vertex- and edge-weighted graphs (iii) in different formats including WebGraph and MatrixMarket. In this way, ParaGrapher helps progressing High-Performance Graph Processing by simplifying the evaluation and refinement of new (and previous) falsifiable contributions on a wider range of datasets.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>ParaGrapher in a Few Bullet Points<\/strong><\/h2>\n\n\n\n<p class=\"has-text-align-justify\">ParaGrapher <br>(i) provides an API for reading different graph formats from storage and<br>(ii) implements a library for this API for accessing graphs.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">This allows new graph processing frameworks<br>(i) to have immediate access for reading graphs and<br>(ii) to evaluate the new\/previous contributions on a wide range of graph datasets.<\/p>\n\n\n\n<p class=\"has-text-align-justify\">Asynchronous reading of a graph in ParaGrapher:<br>(i) the user asks reading a range of vertices (and their edges),<br>(ii) ParaGrapher calls the callback function defined by the user upon completing each block of requested vertices, and<br>(iii) the user (in callback function) informs ParaGrapher when no further access to a block (i.e., its buffer) is required.<\/p>\n\n\n\n<p>ParaGrapher library<br>(i) is not responsible for allocating, releasing, or managing memory and is just responsible for loading block(s) of edges,<br>(ii) returns the read data  as read-only buffers to the user or by populating memory allocated by the user, and<br>(iii) parallelizes reading and passes blocks of read data to a user-defined callback function on a new thread.<\/p>\n\n\n\n<p>For now, ParaGrapher supports <br>(i) WebGraph format by implementing a C-consumser Java-producer algorithm using the shared-memory interface (\/dev\/shm). For more details please refer to its post.<br>(ii) Other formats: on its way.<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>Source Code<\/strong><\/h2>\n\n\n\n<p style=\"font-size:16px\"><strong><a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\">https:\/\/github.com\/DIPSA-QUB\/ParaGrapher<\/a><\/strong><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>API Documentation<\/strong><\/h2>\n\n\n\n<p>Please refer to the Wiki, <a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/wiki\/API-Documentation\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/wiki\/API-Documentation<\/a>, or download the PDF file using <a href=\"https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/raw\/main\/doc\/api.pdf\" target=\"_blank\" rel=\"noreferrer noopener\">https:\/\/github.com\/DIPSA-QUB\/ParaGrapher\/raw\/main\/doc\/api.pdf<\/a> .<\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><\/h2>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>Publications<\/strong><\/h2>\n\n\n<ul class=\"wp-block-latest-posts__list has-dates wp-block-latest-posts\"><li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2025\/11\/1-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/paragrapher-a-parallel-and-distributed-graph-loading-library-for-large-scale-compressed-graphs-bigdata25\/\">ParaGrapher: A Parallel and Distributed Graph Loading Library for Large-Scale Compressed Graphs &#8211; BigData&#8217;25 (Short Paper)<\/a><time datetime=\"2025-11-08T12:02:51+00:00\" class=\"wp-block-latest-posts__post-date\">8 November 2025<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/12\/1-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/accelerating-loading-webgraphs-in-paragrapher\/\">Accelerating Loading WebGraphs in ParaGrapher<\/a><time datetime=\"2024-12-02T05:51:29+00:00\" class=\"wp-block-latest-posts__post-date\">2 December 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/05\/fern-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/selective-parallel-loading-of-large-scale-compressed-graphs-with-paragrapher\/\">Selective Parallel Loading of Large-Scale Compressed Graphs with ParaGrapher &#8211; arXiv Version<\/a><time datetime=\"2024-05-01T05:44:14+01:00\" class=\"wp-block-latest-posts__post-date\">1 May 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/04\/passerine-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/an-evaluation-of-bandwidth-of-different-storage-types-hdd-vs-ssd-vs-lustrefs-for-different-block-sizes-and-different-read-methods-mmap-vs-pread-vs-read\/\">An Evaluation of Bandwidth of Different Storage Types (HDD vs. SSD vs. LustreFS) for Different Block Sizes and Different Parallel Read Methods (mmap vs pread vs read)<\/a><time datetime=\"2024-04-20T09:48:10+01:00\" class=\"wp-block-latest-posts__post-date\">20 April 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/02\/loriini-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/paragrapher-integrated-to-laganlighter\/\">ParaGrapher Integrated to LaganLighter<\/a><time datetime=\"2024-02-16T08:29:26+00:00\" class=\"wp-block-latest-posts__post-date\">16 February 2024<\/time><\/li>\n<li><div class=\"wp-block-latest-posts__featured-image alignleft\"><img loading=\"lazy\" decoding=\"async\" width=\"150\" height=\"150\" src=\"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-content\/uploads\/sites\/14\/2024\/02\/poplar2-150x150.jpg\" class=\"attachment-thumbnail size-thumbnail wp-post-image\" alt=\"\" style=\"max-width:75px;max-height:75px;\" \/><\/div><a class=\"wp-block-latest-posts__post-title\" href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/paragrapher-source-code-for-webgraph-types\/\">ParaGrapher Source Code For WebGraph Types<\/a><time datetime=\"2024-02-16T08:13:13+00:00\" class=\"wp-block-latest-posts__post-date\">16 February 2024<\/time><\/li>\n<\/ul>\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><br><strong>Project Members<\/strong> <\/h2>\n\n\n\n<p>&#8211; <a href=\"https:\/\/orcid.org\/0000-0002-7465-8003\" target=\"_blank\" rel=\"noreferrer noopener\">Mohsen Koohi Esfahani<\/a><br>&#8211; <a href=\"https:\/\/blogs.qub.ac.uk\/dipsa\/personal-page-hans-vandierendonck\/\" target=\"_blank\" rel=\"noreferrer noopener\">Hans Vandierendonck<\/a><br>&#8211; <a href=\"https:\/\/orcid.org\/0000-0003-2265-2838\">Syed Ibtisam Tauhidi<\/a><br>&#8211; <a href=\"https:\/\/orcid.org\/0009-0002-7399-7705\" target=\"_blank\" rel=\"noreferrer noopener\">Marco D&#8217;Antonio<\/a><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>Grants and Funding<\/strong><\/h2>\n\n\n\n<p>\u2013 Horizon Europe under grant agreement 101072456 (RELAX)<br>\u2013 The Engineering and Physical Sciences Research Council under grant agreement EP\/X01794X\/1 (ASCCED), EP\/X029174\/1 (RELAX), EP\/Z531054\/1 (the Kelvin Living Lab), and EP\/T022175\/1 (Kelvin-2 Tier-2 HPC)<br>\u2013 A grant from the Ministry of Education, India, under a collaborative project between Tezpur University, India and QUB<br><\/p>\n\n\n\n<h2 class=\"wp-block-heading has-medium-font-size\"><strong>Acknowledgements<\/strong><\/h2>\n\n\n\n<p>We are grateful to<br>\u2013 Tony Lindsay, our cluster administrator<br>\u2013 Vaughan Purnell, Head of NI-HPC and his team<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Project Statement Several graph frameworks exist and each one optimizes particular graph algorithms for different optimization metrics and is implemented in a different programming language using different parallelization libraries\/techniques. As each framework has implemented its own format of graphs, it becomes time-consuming, inaccurate, and sometimes impossible to compare the execution of graph algorithms across different [&hellip;]<\/p>\n","protected":false},"author":1315,"featured_media":2802,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"footnotes":""},"class_list":["post-2798","page","type-page","status-publish","has-post-thumbnail","czr-hentry"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/pages\/2798","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/users\/1315"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/comments?post=2798"}],"version-history":[{"count":52,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/pages\/2798\/revisions"}],"predecessor-version":[{"id":3641,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/pages\/2798\/revisions\/3641"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/media\/2802"}],"wp:attachment":[{"href":"https:\/\/blogs.qub.ac.uk\/dipsa\/wp-json\/wp\/v2\/media?parent=2798"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}