benchmark woa wsl arm64 go

2023-11-03

code

利用比特币的pow算法的简易版本对woa arm64 与 woa wsl arm64 版本的go进行benchmark测试

源码随便从网上摘的,这个东西学习过比特币区块链的人都写过,大同小异。

package main

import (
	"crypto/sha256"
	"encoding/hex"
	"encoding/json"
	"fmt"
	"log"
	"math/big"
	"strconv"
	"time"
)


type Block struct {
	LastHash  string //上一区块的哈希
	Hash      string //本区块的哈希值
	Data      string //数据
	TimeStamp string //时间戳
	Height    int    //区块高度
	Nonce     int64  //随机数
	DiffNum   uint   //难度值
}

// 难度值
var diffNum uint = 17


var blockchain []Block

// 挖矿函数即工作量证明算法
// 1.通过增大随机数的值 寻找适合的哈希值
// 2.类比比特币 寻找小于目标难度的哈希值
// 工作量证明算法的本质就是暴力求值 循环比较 直至找到符合要求的哈希值
func mine(data string) Block {
	// 定义区块
	if len(blockchain) < 1 {
		fmt.Println("没有区块头")
	}
	// 获取链上的最后一个区块
	lastBlock := blockchain[len(blockchain)-1]
	// 定义一个新的区块
	newBlock := new(Block)
	newBlock.LastHash = lastBlock.Hash
	newBlock.TimeStamp = time.Now().String()
	newBlock.Height = lastBlock.Height + 1
	newBlock.DiffNum = diffNum
	newBlock.Data = data
	var nonce int64 = 0
	newBigInt := big.NewInt(1)
	newBigInt.Lsh(newBigInt, 256-diffNum) // 相当于1 左移256-diffNum

	// 暴力计算
	for {
		newBlock.Nonce = nonce
		newBlock.getHash()
		hashInt := big.Int{}
		hashBytes, _ := hex.DecodeString(newBlock.Hash)
		hashInt.SetBytes(hashBytes) //将区块哈希值转大数字

		// 寻找合适的值
		// 比较x和y的大小。x<y时返回-1;x>y时返回+1;否则返回0
		if hashInt.Cmp(newBigInt) == -1 {
			break
		} else {
			nonce++ //递增随机数 直到找到合适的哈希值
		}
	}
	return *newBlock
}

func (b *Block) serialize() []byte {
	bytes, err := json.Marshal(b)
	if err != nil {
		log.Panic(err)
	}
	return bytes
}

func (b *Block) getHash() {
	result := sha256.Sum256(b.serialize())
	b.Hash = hex.EncodeToString(result[:])
}

func BlockChain() {
	genesisBlock := &Block{
		TimeStamp: time.Now().String(),
		Data:      "创世区块",
		LastHash:  "0000000000000000000000000000000000000000000000000000000000000000",
		Height:    1,
		Nonce:     0,
		DiffNum:   0,
	}
	genesisBlock.getHash()
	blockchain = append(blockchain, *genesisBlock)
	for i := 0; i < 100; i++ {
		newBlock := mine("记录一笔账" + strconv.Itoa(i))
		blockchain = append(blockchain, newBlock)
	}
}
package main

import (
	"testing"
)

func BenchmarkName(b *testing.B) {
	for i := 0; i < b.N; i++ {
		BlockChain()
	}
}

woa

PS ..\testgo\testpow> go test -benchmem -run=^$ -bench ^BenchmarkName$
goos: windows
goarch: arm64
pkg: testgo/testpow
BenchmarkName-8                1        32331706200 ns/op   7132080496 B/op 65533648 allocs/op
PASS
ok      testarmgo/testpow       32.374s

32331706200 ns/op

woa wsl

ophelia@Ophelia:~/goworkspace/testgo/testpow$ go test -benchmem -run=^$ -bench ^BenchmarkName$ 
goos: linux
goarch: arm64
pkg: testgo/testpow
BenchmarkName-8                1        14816995747 ns/op       8185443888 B/op 72533773 allocs/op
PASS
ok      testgo/testpow  14.821s

14816995747 ns/op < 32331706200 ns/op

单从以上测试可见,windows on arm 的 arm64原生go程序效率要低于 windows on arm 的 window subsystem for linux 的 arm64原生go程序。但该测试不代表普遍现象。仅供参考。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

benchmark woa wsl arm64 go 的相关文章

  • wsl重启及如何在wsl下执行cmd命令

    wsl重启 本质上修改环境变量source不生效 想重启一下又要打开命令行 其实wsl可以直接调用windows下的程序 因此只需要执行 wsl exe 但是执行习惯了reboot 可以在shell的配置文件中配置alias span cl
  • Redis性能测试——redis-benchmark使用教程

    谨以此作为读书摘要 xff0c 无它 xff0c 唯以后快速查阅 Redis 自带了一个叫 redis benchmark 的工具来模拟 N 个客户端同时发出 M 个请求 xff08 类似于 Apache ab 程序 xff09 你可以使用
  • 深度学习中的常见名词(baseline,benchmark,etc)

    本文主要用于解释一些在深度学习中常见的名词 xff0c 重点参考了博客 xff1a https towardsdatascience com generalization regularization overfitting bias an
  • Docker Desktop requires a newer WSL kernel version.

    问题描述 xff1a Docker Desktop requires a newer WSL kernel version 问题截图 xff1a 问题原因 xff1a WSL不是最新版 解决方案 xff1a 适用于 Linux 的 Wind
  • 【WSL2教程】WSL迁移到非系统盘

    一 问题引入 默认情况下 xff0c WSL会安装在C盘 xff08 系统盘 xff09 xff0c 而C盘空间有限 xff0c 随着WSL子系统的使用 xff0c C盘空间越来越少 xff0c 最后有可能出现C盘不足导致WSL系统崩溃 有
  • maskrcnn_benchmark使用过程 错误记录

    在使用maskrcnn的benchmark框架的时候训练突然报错 xff1a Non existent config key MODEL ROI BOX HEAD NUM CLASSES 39 之前还能正常运行的 xff0c 突然就报错 x
  • PoweShell Win_desktop install wsl

    什么是 WSL 2 WSL 2 是适用于 Linux 的 Windows 子系统体系结构的一个新版本 xff0c 它支持适用于 Linux 的 Windows 子系统在 Windows 上运行 ELF64 Linux 二进制文件 它的主要目
  • Windows WSL中安装Android Studio

    1 安装WSL 我使用的是Windows10 1803版本 安装的是Ubuntu16 04 LTS版本 参考 Windows Subsystem for Linux Installation Guide for Windows 10 2 配
  • WSL删除文件后,Windows未释放空间

    How to Shrink a WSL2 Virtual Disk 进入powershell diskpart select vdisk file F WSL Ubuntu ext4 vhdx compact vdisk
  • [WSL2+ROS (就不用虚拟机] 无法使用图形界面

    按照教程 rosrun打开小乌龟时失败 尝试查找原因发现wsl被微软阉割过没有图形界面 按照教程 转载安装VcXsrv图形界面 到这一步时如教程所说出现Cant open display的错误 更改DISPLAY 依旧报错 头痛 后尝试将D
  • wsl连接vscode

    文章目录 1 wsl 安装 2 wsl搭配vscode 3 adb 在wsl上的使用 1 wsl 安装 由于我已经提前安装了 所以这里没办法展示如何安装 大致有两个需要注意的点 在官网或者其它博文有 1 需要在命令行输入安装命令 2 需要下
  • 【WSL】[02] windows subsytem linux 配置和使用

    第 2 章前言 上一篇我们已经安装好了ubuntu在WSL下的GUI的桌面 我们现在继续进一步进行配置工作 同时也把 运用WSL的流程摸一把 以备后用 补充1 彻底的关闭WSL的方法 WSL使用后 原来Windows安装的传统虚拟机是用不了
  • 在window10 WSL 中编译 OpenJDK13

    简介 最新的OpenJDK13已经发布到git上 可以git pull 然后编译了 这里介绍了直接在windows 10 的WSL环境中进行build并测试 准备 在Open JDK13的网站文档中说 很简单的几步操作就好 下载源码 hg
  • windows上的linux子系统(WSL)

    目录 一 介绍 二 原理 2 1 wsl组件 2 2 wsl运行过程 2 3 文件系统 2 4 禁忌 三 使用 3 1 安装 3 2 用户账户和权限 3 3 wsl管理 3 3 互操作 参考 推荐阅读 一 介绍 Windows Subsys
  • wsl linux 安装

    1 首先确保windwos的操作系统 win 10 我的系统版本Microsoft Windows 版本 10 0 17134 285 2 开启 适用于linux的windows子系统 在 控制面板 程序 程序和功能 中 3 下载linux
  • win11与Ubuntu 20.04 WSL进行文件互换

    WSL有一个很大的优点就是支持与Windows文件系统的互操作 可以访问和处理Windows文件系统中的文件 从而方便用户在Windows和Linux之间共享数据 通过WSL子系统终端访问Windows系统文件 在WSL中 Windows文
  • Win10 WSL运行docker报错:Cannot connect to the Docker daemon at unix:///var/run/docker.sock.

    我安装的子系统是Ubuntu 1804 安装docker步骤如下 sudo apt update 更新软件源 sudo apt install y docker io 安装docker sudo usermod aG docker leo
  • win10 wsl 安装 ubuntu 16.04

    背景 因为大多数是在单系统上开发 现在想装win10 ubuntu共存 但双系统切换好麻烦 于是有了在win10里利用wsl装子系统的想法 操作 启动wsl 因为微软商店没有ubuntu16 04 于是到官网下载ubuntu16 04 其他
  • WSL——NextCloud 在 Windows 端的网络访问配置

    NextCloud 在 Windows 端的网络访问配置 1 WSL2 的 IP 配置问题 在 Windows 每次重启后 WSL2 的 IP 将会发生变化 即 WSL2 的 IP 并非静态地址 为此 通过下述代码可以手动为 WSL2 增加
  • WSL安装与使用(Ubuntu22.04)

    文章目录 概要 WSL介绍 WSL安装 安装环境 安装方式一 命令行安装 不推荐 可能出现奇怪的问题 安装方式二 通过控制面板安装 WSL 安装Ubuntu22 04 通过Microsoft Store Ubuntu更换镜像源 进入Ubun

随机推荐

  • 如何输出long long型数据

    include
  • 每日学术速递6.13

    CV 计算机视觉 ML 机器学习 RL 强化学习 NLP 自然语言处理 Subjects cs CV 1 Tracking Everything Everywhere All at Once 标题 一次跟踪所有地方的一切 作者 Qianqi
  • gcc: command not found

    在linux出现gcc command nof found时 查看是否已经安装了gcc 查看命令 rpm q gcc root localhost local rpm q gcc package gcc is not installed从g
  • 蓝桥杯真题:回文日期

    题目描述 2020 年春节期间 有一个特殊的日期引起了大家的注意 2020 年 2 月 2 日 因为如果将这个日期按 yyyymmdd 的格式写成一个 8 位数是 20200202 恰好是一个回文数 我们称这样的日期是回文日期 有人表示 2
  • ActivityThread分析

    以前看了很多 时间长了都忘了 所以还是勤快点 把看到的都记下来 算是给自己点积累 Activity启动分为很多种情况 这里说的是打开新的应用程序第一个Activity的流程 1 AcitivityManager产生新进程 新进程从andro
  • 打印机的共享设置方法

    共享打印机的前提是 共享的这台电脑和要连接打印机的这些电脑必须在同一个局域网中 第一步 在开始菜单当中 找到设备和打印机 这里有个前提 就是要共享的这台打印机必须已经连接并安装好驱动程序 第二步 找到我们要共享的这台打印机图标 第三步 在这
  • TOMCAT-部署项目-tomcat 不能多启动问题解决方案

    tomcat 不能多启动问题 解决方案 更改tomcat server xml 所有涉及端口 8089 端口 8005 8089 8443 8009 8088 端口 8006 8088 8444 8010
  • Python数据分析-绘图-2-Seaborn进阶绘图-7-网格图

    一 FacetGrid 该函数可以绘制最多三个维度 row col hue 行 列和颜色 使用数据集构造网格的变量初始化对象 可以通过调用map函数或map dataframe函数将一个或多个绘图函数应用于每个子集 或包含在relplot
  • tcl系列之列表操作

    目录 1 列表定义 2 列表操作命令 2 1 concat 2 2 lrepeat 2 3 llength 2 4 lindex 2 5 lrange 2 6 linsert 2 7 lreplace 2 8 lset 2 9 lappen
  • linux 升级内核 需要重启吗,如何在不重新启动的情况下升级服务器内核?

    问题描述 这是一个加载的问题 因为我已经知道 并且对ksplice非常感兴趣 问题在于 由于他们被Oracle收购 他们被迫从产品中提取大量服务器 答案并不像以前那么简单 You can build your own ksplice pat
  • 解决Adobe Acobat设置了背景色,显示出现白条的问题!

    目录 问题描述 解决办法 问题描述 改变了Adobe Acobat原本的白色背景 如设置了护眼色 PDF文档打开出现很多白色横条 如下图所示 解决办法 取消2D图形加速即可 步骤如下 进入 编辑 首选项 种类 页面显示 渲染 取消勾选使用
  • wc命令

    Linux wc命令用于计算字数 利用wc指令我们可以计算文件的Byte数 字数 或是列数 若不指定文件名称 或是所给予的文件名为 则wc指令会从标准输入设备读取数据 语法 wc clw help version 文件 参数 c或 byte
  • 配置方法数超过 64K 的应用

    https developer android com studio build multidex html 配置方法数超过 64K 的应用 本文内容 关于 64K 引用限制 Android 5 0 之前版本的 Dalvik 可执行文件分包
  • 《区块链基础知识25讲》-第十四讲-存储交易数据

    目标 是利用区块链技术 以有序的方式维护交易数据的整个历史记录 挑战 是如何按交易顺序存储发生的交易数据 并且找到一种能够快速检测到交易数据发生变化的方法 通过创建一个交易数据库 并维护一个保留了将交易添加到交易数据库中顺序的目录来实现对历
  • 深入理解Java IO流:高效数据输入输出的利器

    文章目录 简介 基本概念 字节流 字节输出流 OutputStream 抽象类 字节输出流的子类 FileOutputStream 字节输入流 InputStream 抽象类 字节输入流的子类 FileInputStream 字符流 字符输
  • css开启第一张简单式网页图

    参考链接 https www runoob com try try cdnjs php filename trycss website layout blog 我是参考上述链接 稍微做些修改 然后如下
  • poi 顺序解析word_POI解析word文档,支持DOC和DOCX版本

    一 简介 Apache POI是一个开源的利用Java读写Excel WORD等微软OLE2组件文档的项目 最新的3 5版本有很多改进 加入了对采用OOXML格式的Office 2007支持 如xlsx docx pptx文档 二 POI组
  • fetch详细讲解

    fetch 是一种网络通信协议 用于在客户端和服务器之间传输数据 该协议使用 HTTP 请求和响应进行通信 与传统的 AJAX 方式相比 fetch 更加简单易用 并提供了许多现代化的功能 1 fetch 介绍 使用 fetch 可以方便地
  • Qt重新加载内存中的QSS样式

    什么叫重新加载内存中的QSS样式 当QSS被封装到QSS文件时 需要使用这个QSS 需要将其读出来 理论上说 读出来后 其在程序结束之前应该就一直保存在内存中 当我们给控件设置一个动态属性 在该QSS中存在不同属性 不同样式的时候 在程序运
  • benchmark woa wsl arm64 go

    code 利用比特币的pow算法的简易版本对woa arm64 与 woa wsl arm64 版本的go进行benchmark测试 源码随便从网上摘的 这个东西学习过比特币区块链的人都写过 大同小异 package main import