自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(36)
  • 收藏
  • 关注

原创 linux下关于笔记本的显卡驱动安装archlinux

首先,安装显卡驱动。mesa是所有开源显卡驱动的基础,一般都要安装。 这里,我们尽量给安装完整,有几大功能:OpenGL, vulkan, vaapi, vdpau, opencl. 32位的程序也要使用并安装相应的驱动。系统是archlinux,用的官方内核。Intel显卡驱动安装:sudo pacman -S mesa xf86-video-intel vulkan-intelsudo pacman -S libva-intel-driver libvdpa...

2021-10-12 23:53:48 8849 3

原创 处理器协同机制其三C++内存顺序与栅栏(及依赖性读屏障)

读写屏障的硬件原理:取取屏障,保证其前加载先于其後。处理器对此不乱序,且加载的结果有序,是为取取屏障。存存屏障,保证其前存储先于其後。处理器对此不乱序,且存储的结果有序,是为存存屏障。取存屏障,保证其前加载先于其後存储。但需处理器对此不乱序,即为取存屏障。存取屏障,保证其前存储先于其後加载。处理器对此不乱序,且当即处理所有存储缓冲(之後的加载可能即时發生,此前对缓存的更改必须完成),此前无效队列的消息必须在此後相关缓存行的加载之前处理完成(保证之後加载的数据有效)。而处理器实现有三种..

2021-09-20 14:37:38 868

原创 处理器协同机制其二内存屏障与内存顺序(及Store Buffer与Invalidate Queue)

三、存储缓冲与无效队列 当处理器需要的数据不在其缓冲中,需要请求,等待内存或其他缓存来响应,这个过程降低了处理器的工作效率。为此,引入存储缓冲,处理器只需要将修改的内容放入存储缓冲,就可以继续执行了,存储缓冲中的数据会适时地刷新到其缓存中。 存储缓冲的引入,可能会出现数据不一致的情况,为此需要存储转發机制。即处理器读取数据优先从存储缓冲中读取。 同时,存储缓冲引入了存储的乱序,处理器先向存储缓冲写入数据,後向其缓存写入数据,对于另一处理器可能会感知写入顺序...

2021-09-20 14:33:32 739

原创 处理器协同机制其一缓存一致性协议(MESI)

一、缓存结构 现代CPU的速度远快于内存系统,因此引入缓存(Cache),其结构如下: 缓存和内存以固定大小的数据块进行交互,这些数据块被称为缓存行,其大小一般是2的整数幂次。在硬件上,用哈希表来实现高速缓存。Cache miss : 缓存缺失,CPU要操作的数据不在其缓存中,需要从他处获取(一般是内存)。Cache hit : 缓存命中,CPU要操作的数据在其缓存中,可以直接操作缓存。 提升缓存命中率,能提高系统性能。从缓存为空,CPU不断处...

2021-09-20 14:23:41 337

原创 matlab入门精讲 【官方资料精简而来,确保全面】

matlab入门精讲learn_matlab_zh_CN.pdf Matlab快速入门[本文取于此书]matlab_3d_visualize_zh_CN.pdf 三维可视化绘图matlab_api_ref.pdf C/C++,Fortran,Java,Python API参考matlab_creating_guis.pdf Matlab App构建matlab_creating_plots_zh_CN.pdf...

2021-05-23 15:53:36 352

原创 笔记本电脑优化以解决降频(提高稳定性,在散热和功耗无问题下寻找降频原因)

首先,只有笔记本电脑才会出现各种奇葩的降频问题,台式电脑供电足而散热好故一般只有温度墙和功耗墙,笔记本则出于散热空间不足而限制性能。即使CPU降频的时候,CPU核心温度和功耗都没有撞墙,CPU也可能降频到0.4GHz或0.8GHz等,这严重影响体验,而且多发于游戏场景,令其突然掉帧卡顿。因为玩游戏时,CPU和GPU同时重度负载,更容易出现CPU降频,而帧率与主频息息相关。解决降频就要先了解笔记本电脑的奇葩散热设计,一般来说通过限制性能来满足散热是可以接受的,而直接降低CPU主频至基频(最低频)是为用

2021-03-11 21:10:29 23336

原创 win10 nfs客户端配置以访问Linux文件系统(以vmware workstation中ArchLinux作为虚拟服务器,解决乱码问题,nfs固定端口转发)

这里使用ArchLinux作为虚拟机服务器系统,客户端是win10 ltsc,首先在win10上启用nfs客户端和nfs管理程序。首先,在主机上安装vmware workstation 16 pro,注册许可後,创建虚拟机。一、服务器系统安装这里只需要安装最基本的ArchLinux,占用空间约为2G,分配内存1G,处理器2核,使用NAT网络(端口映射,要求与主机能ping通)。由于使用桥接网络会受主机网络链路速度影响,所以应该使用主机内部网络,NAT网络是一个较好选择。在虚拟机设置中,添加物理

2021-01-07 21:21:59 2401 1

原创 java大数运算详解【其十】大数除法之Burnikel-Ziegler除法算法

2、Burnikel-Ziegler除法算法(分块循环带余数试商法算法,简称分块试商法)/** *使用Burnikel-Ziegler算法计算{@code this / val}. * @param val 除数 * @return {@code this / val} */ private BigInteger divideBurnikelZiegler(BigInteger val) { return divideAndRemainde...

2020-12-17 01:39:13 844

原创 java大数运算详解【其九】大数除法之试商法(Knuth除法)核心算法

核心算法: /** * 该MutableBigInteger除以除数div。 * 商将被放置到提供的quotient对象中并将余数对象返回(当needRemainder值true)。 */ private MutableBigInteger divideMagnitude(MutableBigInteger div, MutableBigInteger quot...

2020-12-17 01:38:35 1209

原创 java大数运算详解【其八】大数除法

四、大数除法/** * 返回值为{@code (this / val)}的大型整数。 * * @param 除数 * @return {@code this / val} * @throws ArithmeticException 如果{@code val}值零。 */ public BigInteger divide(BigInteger val) { if (val.mag.length < BURNIKEL...

2020-12-17 01:37:45 2110

原创 java大数运算详解【其七】大数乘法之Karatsuba乘法和ToomCook3乘法

4、Karatsuba乘法(二分展开式乘法)/** * 使用Karatsuba乘法算法将两个大整数相乘。 * 这是一种递归的分治算法,与多聚类算法中通常使用的“小学”算法相比,它在处理大数问题时效率更高。 * 如果进行乘法的数组长度为n,“小学”算法的渐近O(n ^ 2)的复杂性。 * 相比之下,Karatsuba算法的复杂性O(n ^(log2(3))),或O(n ^ 1.585)。 * 在对过程进行评估时,它通过执行3次乘法而不是4次来实现这种性能提...

2020-12-17 01:37:03 1133 2

原创 java大数运算详解【其六】大数乘法之单位乘法和经典乘法

2、单位乘法 private static BigInteger multiplyByInt(int[] x, int y, int sign) { if (Integer.bitCount(y) == 1) {//移位优化 return new BigInteger(shiftLeft(x,Integer.numberOfTrailingZeros(y)), sign); } int xlen = x.length;...

2020-12-16 21:44:09 309

原创 java大数运算详解【其五】大数乘法之平方算法之ToomCook3平方算法

1.3、ToomCook3平方算法(三分展开式算法) /** * 使用3路Toom-Cook平方算法平方一个大整数。 * 当两个数字都大于某一阈值时(实验发现),应该使用它。 * 它是一种递归分治算法,其渐近性优于squareToLen和squareKaratsuba算法。 */ private BigInteger squareToomCook3() { int len = mag.length; // k是...

2020-12-16 21:42:46 809 1

原创 java大数运算详解【其四】大数乘法之平方算法之Karatsuba平方算法

1.2、Karatsuba平方算法(二分展开式算法) /** * 使用Karatsuba平方算法平方一个大整数。 * 当两个数字都大于某一阈值时(实验发现),应该使用它。 * 它是一种递归分治算法,其渐近性优于squareToLen算法。 */ private BigInteger squareKaratsuba() { int half = (mag.length+1) / 2; BigInteger xl ...

2020-12-16 21:41:25 991

原创 java大数运算详解【其三】大数乘法之平方算法之按位二次展开式算法

所有解释都是最基本的,没有过多赘述,如若不懂静心思考。 1.1、按位二次展开式算法 /** * 将整型数组x的内容平方,结果放入整型数组z中,x的内容不变。 */ private static final int[] squareToLen(int[] x, int len, int[] z) { int zlen = len << 1; if (z == null || z.length < zlen)...

2020-12-16 21:39:25 465

原创 java大数运算详解【其二】大数乘法

这只是大数乘法的一部分,其支部此处不涉及,在下节再讲。三、大数乘法/** * 返回值为{@code (this * val)}的大型整数。 * * @implNote 当{@code val == this}时,实现可以提供更好的算法性能。 * * @param 乘数。 * @return {@code this * val}. */ public BigInteger multiply(BigInteger val) {...

2020-12-16 21:34:55 580

原创 java大数运算详解【其一】大数加减法

一、大数加法/** * 返回值为{@code (this + val)}的大型整数。 * * @param 加数。 * @return {@code this + val}. */ public BigInteger add(BigInteger val) { if (val.signum == 0) return this; if (signum == 0) ret...

2020-12-16 21:29:02 1443

原创 Linux Shell教程 【最全最精简bash教程】

题=C"Linux Shell教程"BS30本文使用仙符''进行排版。Linux的Shell脚本是Linux的基础之一,学习Shell语法是Linux的必经之路。下面来讲Shell的语法。脚本解释器,即shell的种类,有:bash,sh,ash,csh(tcsh),ksh. 注意,bash完全兼容sh,一般写sh类型的或bash类型的(後缀sh)。开头"#!"後接shell执行环境,如:"#!/bin/sh","#!/bin/bash"关于sh和bash的区别,简单讲即sh是bash --

2020-12-16 21:06:45 425

原创 Windows批处理文件语法【扩展补充】

四、命令(续)⑴'errorlevel' 变量,上一条命令的返回值⑵'title' 设置命令提示窗口的窗口标题。TITLE [string] string 指定命令提示窗口的标题。⑶'color' 设置默认的控制台前景和背景颜色。COLOR [attr] attr 指定控制台输出的颜色属性。颜色属性由两个十六进制数字指定 -- 第一个对应于背景,第二个对应于前景。每个数字可以为以下任何值: 0 = 黑色...

2020-12-16 20:54:25 315 1

原创 Windows批处理文件语法【常用命令】

四、命令㈠'rem '和'::' 单行注释,只有'rem '是正规的注释,'::'注释会留下一个冒号㈡'echo' 显示消息,或者启用或关闭命令回显。 ECHO [ON | OFF] ECHO [message]若要显示当前回显设置,请键入不带参数的 ECHO。㈢'set' 显示、设置或删除 cmd.exe 环境变量。SET [variable=[string]] variable 指定环境变量名。 string 指定要指派给变量的一系...

2020-12-16 20:49:20 642

原创 Windows批处理文件语法【精讲要义】

一、变量 批处理文件中只能有环境变量,且只在当前命令行有效。对系统环境变量的修改一般只是临时的,可以用'setx'或其他命令来使其永久生效。 变量赋值使用'set'命令实现。变量不需事先定义,对于未赋值的变量默认为空字符串(转为数值是0)。 批处理的环境变量都是当作字符串来处理的,有带引号和不带引号的字符串,使用'%'来引用变量时,实际上是在执行该行时将之替换为变量所代表的字符串,如果这个字符串不带引号,那么,很可能会将之拆开来解释。带引号的字符串要多占用几个字符。 变量传参...

2020-12-16 20:35:11 424

原创 离线安装mumu模拟器的方法

安装的是标准引擎mumu模拟器,直接把已安装好的模拟器目录打包为ISO文件或压缩为其他文件保存。安装到其他机子上,只要拷贝到一个目录即可。然後要运行两个文件,依次是hypervisor的批处理注册文件(.bat)和模拟器的安装文件(.exe),在其目录下可以找到。然後运行mumu模拟器修复工具,再将启动程序设为管理员运行,启动即可。...

2020-11-18 02:41:09 4894 2

原创 vmware workstation 使用物理磁盘引导主机第二系统,关于嵌套虚拟化安卓模拟器

要引导物理磁盘的操作系统就需要重建引导记录,所以新建一个虚拟机磁盘,用PE系统重建引导即可。以下方法可以适用于vmware workstation支持的主机中(只适用于EFI启动的系统)。在新建的虚拟机中加入物理磁盘分区,新建的虚拟机磁盘分配300M即可以用做EFI分区,要做的就是将物理磁盘的EFI分区的引导文件制作成ISO文件,挂载这个ISO文件和PE系统的ISO文件,启动虚拟机进入到PE系统(注意,可能能直接进入物理磁盘的操作系统,因为vmware workstation会检测物理磁盘的引导记录并做

2020-11-17 14:38:41 1544

原创 关于桌面版虚拟机的选择qemu-kvm,virtualbox,vmware workstation

我们可以用虚拟机运行多系统,这在多系统开发和本地调试网络应用很有用,也可以解决运行其他系统软件的需求。比如,我想在linux上玩英雄联盟,用wine的方法由于反TP软件已不被支持而不行,唯一的方法是运行Windows系统虚拟机,这就需要虚拟机提供良好的3d性能。qemu-kvm可以只用于Linux平台是linux内核的虚拟机,并且灵活性很大,唯一不足是运行winows虚拟机性能并不好,尤其是虚拟3d性能支持不佳(virtgpu驱动只被linux支持,windows系统需额外编译且只有opengl),当然

2020-11-14 21:40:49 13642

原创 在wine里面播放视频和音乐之WMP

制作支持wmp的wine容器wine应用想要播放视频和音乐等,需要使用特定软件,如:wmp,mpv,foobar2000等。如果没有集成视频播放器,一般是不能播放视频的,而为了播放视频,大部分程序借用wmp的借口实现视频播放,但是wmp是闭源的,借助wine很难运行,环境不好适配。一般来说,wmp11以上不再适用于wine,因为过于复杂的依赖和验证,这几乎不可能解决。而wmp7~10可以使用wine安装,并精心解决各种问题。一般地,wmp的安装在32为环境下进行。使用系统ubuntu18.04

2020-11-12 00:45:14 1728 1

原创 用单精度浮点模拟双精度的运算,实现扩展浮点精度的算法

实际上,任何精度的浮点运算也可以像BigInteger那样计算,可以用多个浮点数据表示更高精度的浮点数据。而这就要求实现带余数的浮点四则运算。带余数的浮点四则运算的定义:加法和减法,余数和结果的和能精确表示运算值。乘法和除法,余数和结果必须同号,对于乘法,余数和结果的和能精确表示运算值,而对于除法,余数就是原来的意思。不多解释,代码如下:(可能存在错误)#include <iostream>#include <xmmintrin.h>using na.

2020-11-04 22:20:41 1616

原创 整型和浮点类型的转换,int与float,double互转的快速实现(在没有对应的汇编指令情况下)

如果没有类型转换对应的汇编指令,我们可以用浮点加法来完成整型和浮点类型的互转。如果有对应的汇编指令,调用之明显更简单高效,然而有些情况下类型转换会溢出,这要注意,计算机不会检查溢出而返回错误结果。一般来说,一次整型和浮点类型的互转的消耗和浮点加法一样,实际就是用浮点加法实现的类型转换。代码如下(不解释):typeconvert.h#include <stdint.h>//以下所有实现经过了严格测试,可以保证无误。其中,标准实现不会溢出,而用指令转换可能溢出。/** * 转

2020-09-23 16:56:19 1884

原创 音频之各种有损编码器的比较,AAC编码器之选择,频谱、差值比较,编码器下载

音频有损编码有:aac,mp3,ogg(vobis),opus等。这里只讨论主流编码格式,aac编码器有faac,qaac,fhgacc,neroacc,fdkacc,falabaac等,其封装格式有.aac,.m4a,.m4b,.mp4等。aac基本上是最优秀的有损编码器,它有着非常好的频谱一致性,照顾了0~22kHZ的频谱响应,而不是高频一刀切。虽然我们很难分辨高频信息,但是高频信息影响我们对音乐的赏析,没有高频信息会变得难听,而且频谱差异也并不是用肉眼看的,即使频谱上很难发线差异,但是在波形上会出

2020-09-21 21:55:48 6674 3

原创 Linux上的视频播放及MPV播放器与SVP4插帧

题=Linux上的视频播放及MPV播放器与SVP4插帧Linux上的视频播放支持仍然欠佳,最明显的一点是网页端播放在线视频的支持不好,由于缺乏硬件解码的支持,网页视频受占用CPU资源较高的影响而质量不佳。视频播放不没有一个统一的规定,这不像Windows使用DirectShow,Linux上播放视频可以使用Xserver,SDL等来显示视频。这是由播放器实现的,其中mplayer是Linux...

2020-03-26 20:16:59 4623

原创 PotPlayer LAV MadVR SVP4/BFRC播放器设置(极为详细,硬解,渲染,插帧按CPU性能评级)

PotPlayer LAV MadVR SVP4播放器设置 这里,推荐使用历史版本的potplayer64,因为新版本的功能有点多余,https://www.videohelp.com/download/PotPlayerSetup64-1.7.16291.exe这个版本是最后一个UI没有大改的,没有直播等无用功能(本地播放器)。安装主程序说明:OpenCodec...

2020-03-26 17:57:59 45544 6

原创 Linux上的音频驱动及wineASIO与foobar2000

题=Linux上的音频驱动及wineASIO与foobar2000Linux上的音频驱动还很混乱,说实话,Linux根本不适合做专业的音频软件,想在Linux上听歌看视频都很不方便,除非只使用一些简单的功能。Linux上的音频驱动有oss,alsa,pulse audio,jack1,jack2,oss是较老的音频驱动了已经不怎么使用了,alsa是目前直接与底层设备交流的,pulse aud...

2020-03-18 14:47:19 3268 1

原创 ubuntu使用kvmgt配置vGPU(qemu-kvm+libvirt+virt-manager)

ubuntu使用kvmgt配置vGPU 注意,ubuntu是支持intel gpu的显卡虚拟化的,只是默认没有开启该模块,所有linux系统,使用较新内核的话就可以支持这一特性,只要其硬件架构不是太老。但是,ubuntu的软件仓库里的软件版本实在过低,无法支持这一特性,igvt是从2015年开始实现,到2017年合流到linux内核中,而ubuntu软件仓库的qemu还是2.11版...

2020-02-19 19:36:48 8808 2

原创 Ubuntu安装winehq最新版

Ubuntu安装winehq最新版一、安装Wine(来自官方安装命令)如果您之前安装过来自其他仓库的 Wine 安装包,请在尝试安装 WineHQ 安装包之前删除它及依赖它的所有安装包(如:wine-mono、wine-gecko、winetricks),否则可能导致依赖冲突。1、对于64位系统,添加 32 位架构支持(对于32位的,似乎可以忽略此命令,不过加上也没有错)终端下执行:s...

2020-02-19 19:21:01 6370

原创 定点运算及最优三角函数算法(不使用浮点计算)精度18位二进制小数

内嵌汇编代码:#include "r_math.h"/*** 以下所有函数都是对定点型的运算,该定点型的值乘以10000再以整型来存储。*//*** 将real转化为int,得到其整数部分。*/__declspec(naked) int __fastcall r_int(real i){ _asm{ mov edx,ecx; ...

2019-11-16 18:02:29 1580

原创 C/C++ 多线程编程之信号量及其实现代码 semaphore类

仅仅用于多线程同步,不考虑互斥,即不存在共享数据的竞争,我们应该使用信号量,信号量比条件变量高效得多,更利于控制多线程同步,如果要用条件变量模拟信号量,则不得不考虑很多细节。不应该使用信号量代替互斥锁的功能。 千万不要误以为用条件变量和互斥锁可以简单地实现一个信号量,这样实现的信号量很可能不能正常工作。一般而言,Windows下是用信号量实现的条件变量,所以信号量更接近于底层。下...

2019-10-06 21:07:01 1016

原创 最优开立方算法(三次牛顿迭代)C/C++

#define CBRT_cbrt(a) cbrt(*(uint64_t*)&a)double cube[2048];double cbrt(uint64_t a){//最优开立方算法 double x; unsigned int exp; if(a==0)return 0.0; exp=((*(uint64_t*)&a)>>...

2019-10-06 20:23:00 2136

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除