作者:雾月,极客web3
在Blockchain技术迭代越来越快的今天,针对性能的优化已然成为了一个关键议题,Ethereum路线图已经非常明确以Rollup为中心,而EVM串行处理交易的特性是一种桎梏,无法满足未来的高并发计算场景。
在之前的文章——《从Reddio看并行EVM的优化之路》中,我们曾对Reddio的并行EVM设计思路进行了简要概述,而在今天的文章中,我们将对其技术方案,以及其和AI的结合场景进行更深入的解读。
由于Reddio的技术方案采用了CuEVM,这是一个利用GPU提升EVM执行效率的项目,我们将先从CuEVM开始说起。CUDA概览
CuEVM是一个用GPU对EVM进行加速的项目,它将EthereumEVM的操作码转换为CUDAKernels,以在NVIDIAGPU上并行执行。通过GPU的并行计算能力,来提高EVM指令的执行效率。可能N卡用户会常听到CUDA这个词——
ComputeUnifiedDeviceArchitecture,这其实是NVIDIA开发的一种并行计算平台和编程模型。它允许开发者利用GPU的并行计算能力进行通用计算(例如Crypto中的Mining、ZK运算等),而不仅限于图形处理。
作为一个开放的并行计算框架,CUDA本质是C/C++语言的扩展,任何熟悉C/C++的底层程序员都可以快速上手。而在CUDA中一个很重要的概念是Kernel(核函数),它也是一种C++函数。
CUDA的每个线程都被分配了独立的threadID,并且采用线程层次结构,将线程分配为块(block)和网格(grid),以便于管理大量的并行线程。通过NVIDIA的nvcc编译器,我们就可以将CUDA代码编译为可在GPU上运行的程序。
CuEVM的基础工作流程
在理解了CUDA的一系列基础概念后,就可以看下CuEVM的工作流了。
CuEVM的主入口为run_interpreter,从这里以json文件的形式,输入要并行处理的交易。从项目用例中可以看出,输入的都是标准的EVM内容,无需开发者另行处理、翻译等。
在run_interpreter()中可以看到,它使用CUDA定义的<<…>>语法调用了kernel_evm()核函数。我们上文提到过,核函数是会在GPU中并行调用。
在kernel_evm()方法中会调用到evm->run(),我们可以看到这里面有大量的分支判断来将EVM操作码转换为CUDA操作。
以EVM中的加法操作码OP_ADD为例,可以看到它将ADD转化为了cgbn_add。而CGBN(CooperativeGroupsBigNumbers)就是CUDA高性能的多精度整数算术运算库。
这两步将EVM操作码转化为了CUDA操作。可以说,CuEVM也是对所有EVM操作在CUDA上的实现。最后,run_interpreter()方法返回运算结果,也即世界状态及其他信息即可。
至此CuEVM的基本运行逻辑已经介绍完毕。
CuEVM是有并行处理交易的能力,但CuEVM立项的目的(或者说主要展示的用例)是用来做Fuzzing测试的:Fuzzing是一种自动化的软件测试技术,它通过向程序输入大量无效、意外或随机的数据,以观察程序的响应,从而识别潜在的错误和安全问题。
我们可以看出Fuzzing非常适合并行处理。而CuEVM并不处理交易冲突等问题,那并不是它所关心的问题。如果想要集成CuEVM,那么还需对冲突交易进行处理。
我们在之前的文章 2小时之前
Copyright © 2021.Company 元宇宙weizhangshensu.cn All rights reserved.元宇宙weizhangshensu.cn