- 博客(29)
- 问答 (4)
- 收藏
- 关注
原创 蓝桥云课 连连看 测试样例吐槽
按照题目的输入格式是相邻整数间使用一个空格分离。正常这样处理应该是没问题的,但是得。这段代码在官网的样例测试中是一个样例都过不去的。蓝桥杯的这道连连看有点无语。
2025-04-01 17:54:24
203
原创 python的global在编译层面的进阶理解
python中的这种 global 声明,它不会被编译成字节码执行,是在通过 语法树 去 生成字节码 时,被处理的存在。python中的这种 global 声明是函数级别的,它可以在函数的任何地方被声明而生效,并不会因为它出现在不会被执行的代码中,它就不会生效。global多少次一个变量都没问题,只要不要出现前面的代码中使用了这个变量,或对这个变量采用了赋值操作后导致被标记为全局作用域就可以了。我都觉得这设计有点恶心、特别了,居然找了那么久都没人注意这个。如果函数需要修改全局作用域中的不可变变量。
2025-04-01 17:46:13
970
原创 cargo build-sbf或cargo build或anchor build命令报错处理
error: failed to parse lock file at: /home/xuniji1/Desktop/internship/test1/Cargo.lock Caused by: lock file version 4 requires -Znext-lockfile-bump
2024-12-13 17:43:39
940
原创 solana program deploy ./target/deploy/xxx.so命令和anchor deploy命令报错处理
thread 'main' panicked at cli/src/program.rs:2809:26:Should return a valid tpu client: PubsubError(ConnectionError(Io(Os { code: 101, kind: NetworkUnreachable, message: "Network is unreachable" })))note: run with `RUST_BACKTRACE=1` environment variable
2024-12-13 17:41:30
576
2
原创 互联网编程 实验1熟悉互联网编程开发环境
在开始进行JDK配置的时候,我直接从idea下载了JDK 19.0.2,但是却无法正常运行,所以我通过错误提示上网搜索原因,发现是由于我所下载的idea的版本过低而JDK的版本过高,导致不兼容,所以我就开始寻找下载较低版本的JDK的办法,但是诸多途径都要收费,最终找到了可以从华为云镜像免费下载JDK 11.0.2的方法。
2024-10-12 09:36:46
1050
原创 简单游戏设计
为了明确选手的落子的位置,该选手应该输入数字1-6,然后回车,数字1-6指示在落子所在的列,从左到右,无需输入行号,程序应默认从行号6到行号1递减的顺序填入该棋子,若前后输入的列号相同,则行号减一。参考程序在内存中分配36个空间来表示棋盘的每个位置,最简单的遍历棋盘的方法为:如果该位置为空,则存放0,如果该位置为选手一的棋子,则存放1,如果为选手二的棋子,则存放-1,这样可以最大程度的使用状态码。的子程序,对棋手的输入进行棋盘的填充----棋手一下的棋子填充1,棋手二下的棋子填充-1。
2024-07-26 21:25:38
678
原创 汇编语言实验
开始时存放成绩的首地址循环次数最后成绩存放的地址成绩等级为A的数量存放在x4100B等级的数量存放在x4101处C等级的数量存放在x4102处.END。
2024-07-26 21:15:59
1044
原创 LC-3机器码编程试验
8. 条件跳转,如果R4不是非0,PC+2(用R4作为计算的结果,进行条件码的判断,来确定是否当前判断的bit上是否为1,是就可以执行9,不是就跳过9,执行10)3. 清R2,用R2存储为地址x4000,为pc(x3004)+252 (以方便后续R3对x4000中数据的读取和R5将计算结果写到x4001)10.R1=R1+R1(使R1=R1*2,保持二进制数上从小到大只有一个bit为1,以方便对“11.条件跳转,如R1非0,PC-5(只要R1还没有溢出就让其循环,返回7)如果R4为非0,R5+1。
2024-07-26 21:02:44
722
原创 LC-3机器码编程试验
首先,你需要重将程序计数器重置为你的程序的第一个位置。,弹出Set Value 窗口,在Location字段中选择R4,在Value处输入“x5”, 点击Apply,然后选择R5,输入x3,点击OK,接下来运行程序。,关闭弹出的窗口,如上次一样,观察寄存器,尤其是R2和R5,目前已经循环两次,R2内容为x1,R2为十进制10,状态码P=1,因此循环将继续执行一次。,然后点击OK,此时R5为0,R2为十进制15,因为3*5=15,此时应该停止,但是状态码Z=1,分支指令将继续执行,多做一次,这里出现了问题。
2024-07-26 20:37:55
1187
原创 高斯-约旦消去法的MPI并行程序
但是进程数的增加也导致了进程间的通信越来越复杂,通信的开销越来越高,O(n)次的对O(n)级别的数据的广播的所需时间越来越高,远不是并行减少消元运算的增益所能抵消的。然后,还有计算线性方程组的最大误差,通过一个n*m的双层for循环将每个进程负责的线性方程组的所有行的最大误差local_dif计算出来,然后通过MPI_Reduce函数,从所有进程求解出来最大误差local_dif中,选取出一个最大误差max_dif,并由进行编号为0的进程输出最大误差的信息和进程运行时间的信息。结果,我一步步的调试起来。
2024-07-18 00:28:09
838
原创 矩阵乘法的MPI并行程序
这主要是与前面代码描述部分中分析的“矩阵乘法过程中,每一个进程都平均需要完成q次的a数组子块数据交换和覆盖、q次的b数组子块数据交换和覆盖,以及q次子块矩阵的乘法”有关系,随着进程数的增加,子块大小在逐渐减少,每个进行子块矩阵的乘法的计算的时间开销在减小,通信的数据量大小是保持不变的,但是通信次数的增加和通信结点是在增加的。同时,程序中的三层for循环,计算进程中子块a和子块b的矩阵乘法中,我针对性的调整了for循环的顺序,来提高for循环过程中的cache的命中率,来提升程序的性能。
2024-07-18 00:25:07
1270
原创 矩阵乘法的MPI并行程序
在广播完b数组后,需要考虑讲对a矩阵按行分割后的计算中,所需要那几行的数据发送给对应的进程,所以这里采用了在进程编号为0的进程中使用MPI_Recv函数将a数组的部分数据发送给对应的进程,而在其他编号的进程中使用MPI_Send函数接收进程编号为0的进程发送过来的a数组的数据。然后,我考虑到矩阵a和矩阵b的乘法中,在对矩阵a按行进行计算量的分割后,矩阵b的所有数据在后续计算中基本都会被不同程度的使用,所以需要考虑讲数组b广播给其他所有的进程。,赋值给double类型的变量t1,作为并行域计算的结束时间。
2024-07-18 00:18:37
1343
原创 归并的OpenMP并行程序
对此,我采用了cstdlib库中rand()函数获取一个0到RAND_MAX之间的随机整数,再将随机数乘以1.0变成double类型,再除以RAND_MAX,最终获得一个0到1之间的随机的浮点数,然后加上一个数组元素的值,这样就可以获得两个随机的有序的double类型的一维数组。之后,为了保证a数组中的子数组和b数组中的子数组在进行并行归并的时候,可以将数据归并到c数组中对应的位置,我这里采用了一个for循环,计算每段归并需要存储在c数组的什么位置,采用的是计算前后指针,然后进行存储和记录。
2024-07-18 00:11:46
680
原创 前缀和的OpenMP并行程序
同时,为了避免程序的多次间断的运行,导致程序运行时CPU的状态差,导致实验获取的结果误差较大,这里考虑,创建数组提前存储“1、2、4、8、16、32、64”,然后通过for循环将数值传入函数“double juzheng(int thread_num)”中,获取运行时间,并计算出对应5次实验的平均值。从而,避免了程序的多次间断的运行带来的误差。根据对上述,表1和图2的分析可知,随着线程数的增加,求长度为n=100000000的数组的前缀和,需要的时间在逐渐下降,加速比逐渐上升。
2024-07-17 23:10:11
1277
原创 简单排序的OpenMP并行程序
同时,为了避免程序的多次间断的运行,导致程序运行时CPU的状态差,导致实验获取的结果误差较大,这里考虑,创建数组提前存储“1、2、4、8、16、32、64”,然后通过for循环将数值传入函数“double achieve(int thread_num)”中,获取运行时间,并计算出对应5次实验的平均值。同时,随着线程数增加,又会导致子数组的归并开销加大,线程调度的开销加大,所以当线程数增加到一定程度时,通过增加线程数的排序加速会逐渐消失,使得最后的运行时间和加数比逐渐趋于平缓。接着,考虑如何实现并行的排序。
2024-07-17 23:00:58
1005
原创 寻找完数的OpenMP并行程序
同时,为了避免程序的多次间断的运行,导致程序运行时CPU的状态差,导致实验获取的结果误差较大,这里考虑,创建数组提前存储“1、2、4、8、16、32、64”,然后通过for循环将数值传入函数“double achieve(int thread_num,double)”中,获取运行时间,并计算出对应5次实验的平均值。首先,考虑如何判断一个数是否为完数,这里考虑采用试除法,求出该数的所有因数进行相加然后减去这个数,来获得该数的因子之和,然后与这个数本身进行比较,相等即为完数,反之久不是完数。
2024-07-17 22:54:29
1119
原创 矩阵乘法的OpenMP并行程序
同时,为了避免程序的多次间断的运行,导致程序运行时CPU的状态差,导致实验获取的结果误差较大,这里考虑,创建数组提前存储“1、2、4、8、16、32、64”,然后通过for循环将数值传入函数“double juzheng(int tp)”中,获取运行时间,并计算出对应5次实验的平均值。所以在高级语言的层面,除非通过编译器提供的方法或者本来的规定的语言的规则,否则,我们是无法轻易判断一个操作是原子操作的。根据对上述,表1和图2的分析可知,随着线程数的增加,矩阵乘法的运行时间逐渐下降,加速比逐渐上升。
2024-07-17 22:49:32
1667
原创 天梯赛题目 L2-039 清点代码库
题干一直都说得不清不楚的,样例却是面面俱到,生怕参赛选手写的代码和他的相法有一丁点不同。我用string读,用string为哈希的key,然后在输出的时候,就不用遍历输出了,直接输出string就可以了,说我发现这个题目肯定存在一个坑爹的测试样例,这回我就这个问题进行了探索,确定出具体是什么问题了!然后一点点排查,最后发现这个问题:int输出对了,我将string输入作为string输出错了。我真的是当时恼羞成怒了,浪费了我好长时间。最后,查出最后一个3分的样例中确实存在傻逼的“-0”输入的问题!
2024-04-11 17:37:08
693
1
原创 天梯赛题目 L2-039 清点代码库
中,然后在需要输出整个数组的时候,直接输出,按道理一点问题都不该有的。但是这个后台的傻逼测试样例,它不过。你把注释打开,把数组的输出关闭,他对了。这题目有个3分的傻逼测试点。你把直接复制代码跑,错了!
2024-04-09 13:11:07
496
4
原创 对python模糊的变量生成进行探究 —— 如果函数中存在该变量的赋值语句,则将其视为局部变量。 累积赋值语句(如 +=)也被视为赋值语句。 ——如有错误欢迎指正
最后来看程序五,可以知道全局程序的情况下, "if False: a = a + 1 "这种赋值语句并不会被识别,并优先创建出变量(导致报错是"变量a未被定义),而是边执行语句边创建变量。同时,对比一下此时的程序三和程序四,可以知道: a 变量确实由于 "if False: a = a + 1 " 赋值语句被识别并创建为局部变量,但并未指向有效的内存空间。而对比于程序二和程序三,顺应上述的总结,也可以理解此时的程序三,即使 "if False: a = a + 1 " 赋值。
2023-09-05 20:41:50
87
1
原创 2021-10-10
标题 以数学思维审视原码,反码和补码我想说的是,反码在我们计算中几乎没有太大作用,至于为什么这么说呢?反码他存在的意义只是为了负数求补码时作为中介,但是当你学不明白的他们存在的意义之时,它是一层遮住补码的面纱,你会很容易接受反码,然后去求补码,而不愿去思考其中还有什么具体的门道。最近我一心专研补码,感觉有所感悟,请道友指教(这里重点是说我们从数学角度的理解与思路)。反码是怎么得到的?就是书上说的取反,为什么取反,相信你们或多或少,听说那个时钟怎么走怎么走吧?我感觉那就是有点绕远了,我确实也听不懂,他俩
2021-10-10 18:07:12
143
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人