分类 Window 下的文章

MSVC中的_BitScanForward和GCC中的__builtin_ctzl


问题

索博尔算法中用到了_BitScanForward这个函数,在做统信UOS适配的时候发现这个函数是MSVC专有的,百度了一下linux下对应的有__builtin_ctz相关的系列函数

头文件引用

*winlinux
头文件intrin.hx86intrin.h
函数_BitScanForward__builtin_ctzl

代码对比

win

#include <iostream>
#include <intrin.h>
using namespace std;

#pragma intrinsic(_BitScanForward)

static const unsigned QRNG_NDMS = 32;
    struct
    {
        unsigned __int64 uValue;
        unsigned uPrevSeed;
    } m_prev[QRNG_NDMS];

unsigned __int64 cjn[QRNG_NDMS][63] = { 0 };

int main()
{
    unsigned long mask = 0;
    unsigned long index;
    unsigned char isNonzero;

    unsigned m_uCurSeed = 2048,m_uCurDim;
    m_uCurDim = 0;
    unsigned grayCode = (m_uCurSeed >> 1) ^ m_uCurSeed;
    unsigned changedBits = m_prev[m_uCurDim].uPrevSeed ^ grayCode;
    unsigned long uBit;
    
    while (_BitScanForward(&uBit, changedBits))
    {
        cout << uBit << endl << changedBits <<endl;
        m_prev[m_uCurDim].uValue ^= cjn[m_uCurDim][uBit];
        changedBits &= ~(1 << uBit);
    }
    
    cout << uBit << endl << changedBits <<endl;

    return 0;
}

Linux

#include <iostream>
#include <x86intrin.h>

using namespace std;

static const unsigned QRNG_NDMS = 32;
    struct
    {
        unsigned long long uValue;
        unsigned uPrevSeed;
    } m_prev[QRNG_NDMS];

unsigned long long cjn[QRNG_NDMS][63] = { 0 };

int main(int, char**) {
    unsigned long mask = 0;
    unsigned long index = 0;
    unsigned char isNonzero;

    unsigned m_uCurSeed = 2048,m_uCurDim;
    m_uCurDim = 0;
    unsigned grayCode = (m_uCurSeed >> 1) ^ m_uCurSeed;
    unsigned changedBits = m_prev[m_uCurDim].uPrevSeed ^ grayCode;
    unsigned long uBit;
    cout << __builtin_ctzl(10) << endl;
    while (true)
    {
        uBit = __builtin_ctzl(changedBits);
        if(uBit >= 64){
            break;
        }
        cout << uBit << endl << changedBits <<endl;
        m_prev[m_uCurDim].uValue ^= cjn[m_uCurDim][uBit];
        changedBits &= ~(1 << uBit);
    }
    
    cout << uBit << endl << changedBits <<endl;
}

windows: cmd下(临时set,永久setx)设置环境变量


问题

新上一批开发机,环境有些欠缺,qt、python的环境变量没有加上,需要手动设置一下。

set命令

set命令用于设置当前cmd窗口中的环境变量,只对当前cmd窗口有效,cmd窗口关闭后就没有效果了,也不会影响到系统中保存的用户环境变量。其相关用法可以百度。无参数的情况是查看变量情况。

setx命令

setx 设置永久【用户环境变量】

setx "name"="value" # 直接赋值(覆盖)
setx "name" "value" # 列表追加,键值为修改值

命令里边添加了双引号,为的是防止名称或值里有空格

setx 设置永久【系统环境变量】

setx "name"="value" /m
setx "name" "value" /m

/m 参数就是指系统环境变量

举几个例子

# 临时修改用户环境变量
set "Path"="C:\Qt\Qt5.12.11\5.12.11\msvc2017_64\bin;%path%" # 临时设置Path变量(%path%为取path值,此处可理解为向头部添加)

# 永久修改用户环境变量
setx "Path" "C:\Qt\Qt5.12.11\5.12.11\msvc2017_64\bin;" # 由于Path为列表配置项,所以是添加qt的目录值
setx "Path"="%path%C:\Qt\Qt5.12.11\5.12.11\msvc2017_64\bin;" # 与上一条同等效果

# 永久修改系统环境变量
setx "Path" "C:\Qt\Qt5.12.11\5.12.11\msvc2017_64\bin;" /m # 由于Path为列表配置项,所以是添加qt的目录值
setx "Path"="%path%C:\Qt\Qt5.12.11\5.12.11\msvc2017_64\bin;" /m # 与上一条同等效果

测试: 内网速度测试


需求

树莓派挂上了2T的硬盘做数据盘以及备份盘,最初用的wifi2G连的(为了线少),发现速度不够用啊,然后换成5G速度还是不够用。最终决定还是把网线连上来提升速度。路由器是千兆的口,无线还是不够用。
局域网内速度测试这里用到Iperf这款工具软件。

速度对比

-wifi 2.4Gwifi 5G有线千兆
速度1Mbps100Mbps900Mbps

Iperf工具介绍

Iperf 是一个网络性能测试工具。Iperf可以测试最大TCP和UDP带宽性能,具有多种参数和UDP特性,可以根据需要调整,可以报告带宽、延迟抖动和数据包丢失。

Iperf工具使用

Iperf下载地址

1.下载与安装

Widows可以去官网下载,下载后解压,无需安装。
linux(ubuntu20.04)可以直接安装 apt install iperf3

使用

因为linux做服务端的话需要处理防火墙,所以直接让win做服务端,linux做客户端来测试。

SERVER 服务端启动命令

iperf3.exe -s

CLIENT 客户端启动命令

iperf3 -c 192.168.31.240(服务端地址)

测试结果

嗯,千兆舒服!
屏幕截图 2022-11-21 175337.jpg


重装win10系列: 修改系统的软件默认安装路径


1. 摘要

今天重新给电脑做了一下系统,把Users文件移到了D盘,这回也不占用C盘了,然后这不开始安装软件么,第一件事就下了一个Bandizip准备安装,默认安装路径【C:Program Files】,那不行啊,安装的软件也得进D盘,C盘得留着给重要的东西用。这个设置需要修改注册表。

2. 流程

1 . Win+R 打开运行
2 . 输入regedit打开注册表
3 . 在注册表中需要找到【HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersion】,分别打开ProgramFilesDir和ProgramFilesDir (x86)的项,分别修改值为D:Program Files 和 D:Program Files (x86)。

批注 2022-07-03 215115.png
批注 2022-07-03 215752.png

4 . 正常安装软件(Bindizip)的时候默认路径就会改变

批注 2022-07-03 215910.png

3. 重装win10系列

  1. mbr修改gpt,采用uefi引导启动
  2. 激活Win10系统
  3. 修改Users目录至D盘
  4. 修改系统软件默认安装路径
  5. 安装所需软件

DevOps:加速软件交付和提高团队协作的关键


在现代软件开发中,DevOps已经成为一种流行的方法论。它不仅可以加速软件交付,还可以提高开发团队的协作效率。本文将介绍DevOps的基本概念、核心原则以及一些实践方法。

DevOps的基本概念

DevOps是Development(开发)和Operations(运维)的结合词。它强调开发团队和运维团队之间的紧密合作,通过自动化和持续交付的方式,实现快速、可靠的软件交付。DevOps的目标是缩短软件开发周期,提高软件质量,并增强团队的协作效率。

DevOps的核心原则

DevOps的核心原则包括持续集成、持续交付和持续部署。持续集成指的是开发人员频繁地将代码合并到共享代码库,并通过自动化的构建和测试流程,确保代码的质量和稳定性。持续交付则是指将经过测试的代码部署到生产环境的能力,以便快速响应用户需求。持续部署则更进一步,指的是将代码自动部署到生产环境,实现全自动化的软件交付。

DevOps的实践方法

为了实现DevOps的目标,团队可以采用一些实践方法。首先,使用版本控制系统来管理代码,并建立自动化的构建和测试流程。其次,采用容器化技术,如Docker,来实现应用程序的快速部署和扩展。此外,引入持续集成和持续交付工具,如Jenkins和GitLab CI,可以帮助团队实现自动化的构建、测试和部署。最后,通过监控和日志分析工具,如Prometheus和ELK Stack,可以实时监测应用程序的性能和稳定性。

DevOps作为一种流行的方法论,已经在许多组织中取得了成功。通过加速软件交付和提高团队协作效率,DevOps可以帮助组织更好地满足用户需求,并在竞争激烈的市场中保持竞争优势。然而,实施DevOps并不是一蹴而就的过程,需要团队的共同努力和持续改进。只有不断学习和适应新的技术和方法,才能实现DevOps的最大价值。

希望能够帮助你了解DevOps的基本概念、核心原则和实践方法。如果你有任何问题或需要进一步的信息,请随时提问。