All Projects → DLTcollab → dcurl

DLTcollab / dcurl

Licence: MIT license
Hardware-accelerated Multi-threaded IOTA PoW, drop-in replacement for ccurl

Programming Languages

c
50402 projects - #5 most used programming language
C++
36643 projects - #6 most used programming language
Makefile
30231 projects
go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to dcurl

John
John the Ripper jumbo - advanced offline password cracker, which supports hundreds of hash and cipher types, and runs on many operating systems, CPUs, GPUs, and even some FPGAs
Stars: ✭ 5,656 (+14402.56%)
Mutual labels:  fpga, opencl, simd
Tf2
An Open Source Deep Learning Inference Engine Based on FPGA
Stars: ✭ 113 (+189.74%)
Mutual labels:  fpga, opencl
IOTA-MAM.lib.js-PoC
Working Proof of Concept of IOTA's MAM technology using Live Nodes to push and receive messages inside tangle
Stars: ✭ 19 (-51.28%)
Mutual labels:  iota, tangle
meta-iota
OpenEmbedded layer for the IOTA Distributed Ledger
Stars: ✭ 41 (+5.13%)
Mutual labels:  iota, tangle
Tornadovm
TornadoVM: A practical and efficient heterogeneous programming framework for managed languages
Stars: ✭ 479 (+1128.21%)
Mutual labels:  fpga, opencl
Pipecnn
An OpenCL-based FPGA Accelerator for Convolutional Neural Networks
Stars: ✭ 775 (+1887.18%)
Mutual labels:  fpga, opencl
iota-python
A Pure-Python implementation of IOTA node
Stars: ✭ 30 (-23.08%)
Mutual labels:  iota, tangle
spector
Spector: An OpenCL FPGA Benchmark Suite
Stars: ✭ 38 (-2.56%)
Mutual labels:  fpga, opencl
SensorNode
SensorNode-client application for IOTA.
Stars: ✭ 35 (-10.26%)
Mutual labels:  iota, tangle
Amplifier.NET
Amplifier allows .NET developers to easily run complex applications with intensive mathematical computation on Intel CPU/GPU, NVIDIA, AMD without writing any additional C kernel code. Write your function in .NET and Amplifier will take care of running it on your favorite hardware.
Stars: ✭ 142 (+264.1%)
Mutual labels:  opencl, simd
Tanglestash
IOTA meets BitTorrent: An algorithm to persist any file onto the tangle of IOTA
Stars: ✭ 46 (+17.95%)
Mutual labels:  iota, tangle
Trisycl
Generic system-wide modern C++ for heterogeneous platforms with SYCL from Khronos Group
Stars: ✭ 354 (+807.69%)
Mutual labels:  fpga, opencl
Sdaccel examples
SDAccel Examples
Stars: ✭ 325 (+733.33%)
Mutual labels:  fpga, opencl
Fastor
A lightweight high performance tensor algebra framework for modern C++
Stars: ✭ 280 (+617.95%)
Mutual labels:  fpga, simd
opencl-hls-cnn-accelerator
OpenCL HLS based CNN Accelerator on Intel DE10 Nano FPGA.
Stars: ✭ 49 (+25.64%)
Mutual labels:  fpga, opencl
leaderboard-example
IOTA Proof of Concept Application example. With tutorial.
Stars: ✭ 64 (+64.1%)
Mutual labels:  iota, tangle
Compactcnncascade
A binary library for very fast face detection using compact CNNs.
Stars: ✭ 152 (+289.74%)
Mutual labels:  opencl, simd
Computelibrary
The Compute Library is a set of computer vision and machine learning functions optimised for both Arm CPUs and GPUs using SIMD technologies.
Stars: ✭ 2,123 (+5343.59%)
Mutual labels:  opencl, simd
hpc
Learning and practice of high performance computing (CUDA, Vulkan, OpenCL, OpenMP, TBB, SSE/AVX, NEON, MPI, coroutines, etc. )
Stars: ✭ 39 (+0%)
Mutual labels:  opencl, simd
penguinV
Simple and fast C++ image processing library with focus on heterogeneous systems
Stars: ✭ 110 (+182.05%)
Mutual labels:  opencl, simd

dcurl - Multi-threaded Curl implementation

Build Status Supported IRI version Release version

Hardware-accelerated implementation for IOTA PearlDiver, which utilizes multi-threaded SIMD, FPGA and GPU.

Introduction

dcurl exploits SIMD instructions on CPU and OpenCL on GPU. Both CPU and GPU accelerations can be enabled in multi-threaded execuction fashion, resulting in much faster proof-of-work (PoW) for IOTA. In addition, dcurl supports FPGA-accelerated PoW, described in docs/fpga-accelerator.md. dcurl can be regarded as the drop-in replacement for ccurl. IOTA Reference Implementation (IRI) adaptation is available to benefit from hardware-accelerated PoW.

Build Instructions

Check docs/build-n-test.md for details.

Source Code Naming Convention

Check docs/naming-convention.md for details.

Generate Document

$ make doc

Performance

After integrating dcurl into IRI, performance of attachToTangle is measured as the following.

  • Setting: MWM = 14, 200 attachToTangle API requests with each containing 2 transactions
  • Local CPU:
    • AMD Ryzen Threadripper 2990WX 32-Core Processor
    • 2 PoW tasks at the same time
    • Each task uses 32 CPU threads to find nonce
    • SIMD enabled
  • Remote worker:
    • The board with Intel/Altera Cyclone V SoC
    • 1 PoW task at the same time in a board
    • FPGA acceleration enabled
    • Connected with local network

Conclusion

Except the original IRI, the other instances use the DLTcollab/IRI instead of iotaledger/IRI.

IRI version attachToTangle API behavior Effect
IOTA IRI One transaction bundle at the same time (Synchronized) Transactions of a bundle are calculated one by one
DLTCollab IRI Multiple transaction bundles at the same time Transactions of different bundles compete for the PoW calculation resources

The original IRI should be the slowest one since it does not contain any PoW acceleration. However, the graph is different from the expectation. This is caused by 2 factors:

  • The graph shows the execution time of each API request instead of the overall throughput.
  • The table shows that there are competition of the PoW resources, which means the execution time would be longer than expected.

And from the graph we can see that 4 remote workers would be a good choice to accelerate PoW.

IRI Adaptation

Modified IRI accepting external PoW Library Supported IRI version: 1.7.0

Load the external dcurl shared library from the installed JAR file

  • $ cd ~/iri && make check
  • $ java -jar target/iri.jar -p <port> --pearldiver-exlib dcurl

Adoptions

Here is a partial list of open source projects that have adopted dcurl. If you are using dcurl and would like your projects added to the list, please send pull requests to dcurl.

  1. iota-gpu-pow: IOTA PoW node
  • You can construct a IOTA PoW node, which uses ccurl by default
  • Generate a drop-in replacement for ccurl and acquire performance boost.
    • $ make BUILD_COMPAT=1 check
    • $ cp ./build/libdcurl.so <iota-gpu-pow>/libccurl.so
  1. iota.keccak.pow.node.js: IOTA PoW node using the iota.keccak.js implementation
  • iota.keccak.js can be used to build high performance node-js spammers but is also capable of signing inputs for value bundles. Using a smart implementation and remote PoW, it is capable of performing > 100 TPS for IRI.
  1. IOTA PoW Hardware Accelerator FPGA for Raspberry Pi took dcurl for prototyping.
  1. tangle-accelerator: caching proxy server for IOTA, which can cache API requests and rewrite their responses as needed to be routed through full nodes.
  • An instance of Tangle-accelerator can serve thousands of Tangle requests at once without accessing remote full nodes frequently.
  • As an intermediate server accelerateing interactions with the Tangle, it faciliates dcurl to perform hardware-accelerated PoW operations on edge devices.

FAQ

  • What is binary encoded ternary?

    It is a skill to transform the ternary trit value to two separate bits value.
    Hence multiple trits can be compressed to two separate data of the same data type and fully utilize the space.

  • Can the project Batch Binary Encoded Ternary Curl be applied to dcurl?

    The answer is no.
    They both use the same skill, binary encoded ternary.
    However, their purpose are totally different.

    • bct_curl:

      Focus on hashing the multiple data of the same length at the same time.
      It ends when the hashing is finished.

    • dcurl:

      Focus on trying the different values of one transaction at the same time to find the nonce value.
      The procedure of finding the nonce value also does the hashing.
      However, it ends when the nonce value is found, which means one of the values is acceptable.

Licensing

dcurl is freely redistributable under the MIT License. Use of this source code is governed by a MIT-style license that can be found in the LICENSE file.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].