自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(111)
  • 资源 (4)
  • 收藏
  • 关注

原创 ARM 64 协程切换上下文的汇编代码解读

此外,还有一些特殊寄存器用于存储异常处理器的地址、辅助寄存器等。x0, x30, d8, d9, d10, d11, d12, d13, d14, d15, x1, 19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29中(反方向恢复)。x0, x30, d8, d9, d10, d11, d12, d13, d14, d15, x1, 19, x20, x21, x22, x23, x24, x25, x26, x27, x28, x29的值保存到。

2023-08-11 10:19:54 541

原创 C++多线程环境下的单例类对象创建

如果待创建的单例类`SingletonForMultithread`内包含的成员变量较少,整个类占用的内存空间较小,则可以使用如下方法来创建单例对象

2023-08-01 17:54:50 1702

原创 C++无锁编程——无锁队列(lock-free queue)

需要保证对一端的修改是正确的,且对另一端是可见的。(happens-before )关系非常重要,直接关系到能否安全地获取到队列中的数据。队列的挑战与栈的有些不同,因为。这两个指针都是原子变量,从而可在加锁的情形下,可给多个线程同时访问。当有两个线程并发的调用这个函数时,这两个线程就会读取到同一个。,这两个变量占用16字节,而16字节的数据结构需要额外链接原子库。,会新分配两个节点作为虚拟节点③,也会读取到相同的。值④,因此也会同时修改同一个节点,同时设置。关系,就需要在为虚拟节点设置数据项前,更新。

2023-07-16 17:00:33 2730

原创 C++无锁编程——无锁栈(lock-free stack)

无锁数据结构意味着线程可以并发地访问数据结构而不出错。例如,一个无锁堆栈能同时允许一个线程压入数据,另一个线程弹出数据。不仅如此,当调度器中途挂起其中一个访问线程时,其他线程必须能够继续完成自己的工作,而无需等待挂起线程。

2023-06-28 10:09:43 1195

原创 C++11标准原子库内存顺序memory_order_consume与memory_order_acquire的差异示例

在C++11标准原子库中,大多数函数接收一个memory_order参数:```cppenum memory_order { memory_order_relaxed, memory_order_consume, memory_order_acquire, memory_order_release, memory_order_acq_rel, memory_order_seq_cst};```上述枚举变量虽然有六个选项,但仅代表三种内存模型:(1)

2023-06-16 14:03:23 471

原创 C++标准库算法std::lower_bound示例

C++标准库算法`std::lower_bound`使用二分查找算法在**已按升序排列**的序列中返回指向**第一个不小于给定值**的元素的迭代器(`std::upper_bound`返回指向**第一个大于给定值**的元素的迭代器,注意二者的细微差别),例如:**已按升序排列**的序列为`{100.0, 101.5, 102.5, 102.5, 107.3}`,第一个不小于`83.2`的元素为`100.0`,其索引值为`0`(起始序号为`0`),第一个不小于`102.5`的元素为`102.5`,其索引值为`

2023-05-25 16:03:42 532

原创 C++标准库算法std::upper_bound示例

C++标准库算法`std::upper_bound`使用二分查找算法在**已按升序排列**的序列中返回指向第一个大于给定值的元素的迭代器,例如:**已按升序排列**的序列为`{100.0, 101.5, 102.5, 102.5, 107.3}`,第一个大于`83.2`的元素为`100.0`,其索引值为`0`(起始序号为`0`),第一个大于`102.5`的元素为`107.3`,其索引值为`4`,大于`110.2`的值不存在。

2023-05-25 11:35:27 920

原创 OSQP二次规划求解库使用说明

例如:P_p = {0, 1, 3}表示:1 - 0 = 1 代表矩阵P第一列元素非零个数为1个,3 - 1 = 2 代表矩阵P第二列元素非零个数为2个。中非零元素行索引为:0, 0, 1,这是按照先第一列,再第二列。第二列的非零元素为1, 2,行索引分别为:0, 1,于是记为:P_i = {0, 0, 1};中第一列非零元素是1个,第二列非零元素是2个,记为:P_p = {0, 1, 3}。的元素全部为实数,因此它一定是对称矩阵。中非零元素为:4, 1, 2,记为:P_x = {4, 1, 2};

2023-05-10 10:58:36 2241 2

原创 docker内部执行nvidia-smi无任何显示的解决方法

仔细观察启动Docker的提示,说是Docker内部的Nvidia显卡驱动异常,未能启用Nvidia显卡,于是按照Nvidia官方网站。相关的代码居然没有编译,于是在Docker内部执行Nvidia显卡驱动检测命令。最开始我以为是Docker启动有问题,于是连续重启两次,仍然是。本以为万事大吉,结果非常不幸,执行第一步。今天在Docker内部编译程序,发现与。进入Docker,执行命令。

2023-04-11 19:56:14 4896

原创 矩阵乘法的CUDA示例——使用共享内存、流、事件

就相当于一个异步任务,这里只是通知GPU去执行(至于GPU什么时候执行,由GPU调度器去分派),反正当前位置不会阻塞等待,而是立刻切换到下一条。,使用自己写的核函数,主要熟悉共享内存、流、事件的使用方法,,通过流可显著提升GPU的执行效率。表示将下面的循环直接展开成普通的函数语句来提升效率。变成非阻塞式的异步调用。如果不使用流,则必须等第一个。的函数变成异步调用,也就是说,将如下带参数。设备(device)代码包含调试信息,主机(host)代码包含调试信息,,再立刻切换到核函数。使用C++17标准,

2023-03-20 15:33:28 447

原创 使用cublas实现矩阵乘法

里面解释得非常直观详细。我刚开始没搞清楚这个差异,结果始终不对,还以为数据复制出了问题,直到查到这篇博客后才豁然开朗。),当然可以自己写核函数,但效率不如CUDA自带的。设备(device)代码包含调试信息,主机(host)代码包含调试信息,请大家熟悉C++的编码方式。使用CUDA写一个矩阵乘法。,在GPU中实际计算的是。唯一值得注意的地方是,因此,在CPU中计算。,而不是使用C语言函数。使用C++17标准。

2023-03-16 11:55:15 1506

原创 CUDA向量加法示例

在上面的实现中,我们需要单独在host和device上进行内存分配,并且要进行数据拷贝,这是很容易出错的。CUDA 6.0引入统一内存(Unified Memory)来避免这种麻烦,简单来说就是统一内存使用一个托管内存来共同管理host和device中的内存,并且自动在host和device中进行数据传输,具体函数为。下面以向量加法为例,介绍CUDA实现代码,以下是具体代码,我的版本除CUDA相关函数外,其他代码均以C++ 的方式实现,并且尽可能调用STL库的数据结构和算法。CUDA向量相加示例。

2023-03-12 09:26:50 711

原创 C++多线程:使用std::packaged_task在线程之间传递任务

另一项需要考虑的事情是:线程之间的相互通信通过什么来实现?需要用循环来不断检查吗?可以使用循环,更好地方式是通过触发一个事件来唤醒线程。的多线程版本,用于在线程之间传递任务。主线程与后台线程之间往往需要传递一些任务。例如:主线程是图形化界面显示,后台线程执行计算任务。主线程收到用户的某项长周其计算任务时,可以调用后台线程来执行,等到计算结果返回后再在图形化界面中显示,C++ 11中的。要求GCC编译器版本必须为9.1以上版本(Ubuntu 20.04 2021年以后的版本默认就是GCC 9.3)。

2023-02-14 11:56:14 374

原创 C++多线程:使用std::condition_variable实现多生产者-多消费者模型示例

【代码】C++多线程:多生产者-多消费者模型示例。

2023-02-03 20:26:37 216

原创 C++多线程:使用std::condition_variable实现生产者-消费者模型示例

【代码】C++多线程:生产者-消费者模型示例

2023-02-03 20:18:32 205

原创 Ubuntu 20.04安装CUDA失败导致系统黑屏消息nvidia 0000:01:00.0: can‘t change power state from D3cold to D0 的解决方法

Ubuntu。

2023-02-02 17:30:07 3086 1

原创 C++ STL标准库容器真正减少空间的方法

时,如果容器占用的内存比较大,一般希望在使用完毕后,将容器占用的内存空间给清理掉。不幸地是这些函数都不能让容器占用的内存真正释放。真正可以释放内存的方法是同时调用。我们在使用C++ STL标准库的容器如。函数,还有一些人可能会使用。函数,甚至有些人会使用。2023年1月11日。

2023-01-11 11:18:18 978

原创 std::enable_shared_from_this作用

这个类有什么用呢?很多文章讲得云里雾里,不知所以然。其实他的作用很简单。之类的指针)时,经常需要返回一个类对象自身的指针,也步是。朴素的想法应该类似如下示例(文件命名为。来替换原生指针,那么如何返回一个原生指针。从上述调用堆栈可看出,C++11及之后的标准推出了一个类。对象内存在在双重释放,程序崩溃。现在,我们使用智能指针。进入GDB界面后,按下。

2022-12-10 20:14:53 1010

原创 std::unordered_map与std::unordered_multimap示例代码

`unordered_map`是关联容器,含有带唯一键的键-值pair 。搜索、插入和元素移除拥有平均常数时间复杂度。元素在内部不以任何特定顺序排序,而是组织进桶中。元素放进哪个桶完全依赖于其键的哈希。这允许对单独元素的快速访问,因为一旦计算哈希,则它准确指代元素所放进的桶。`unordered_multimap`是无序关联容器,支持多个相同键值(一个`unordered_multimap`可含有一个键值的多个副本)。...

2022-08-27 20:18:02 352

原创 std::partial_sum示例代码

`std::partial_sum`用于求取序列的累加值,例如:原序列为:`1, 2, 3, 4, 5`,累加后的序列为:`1, 3, 6, 10, 15`。可以使用带系数的版本,例如乘以系数`1.2`,累加后的序列为:`1, 3.6, 7.92, 14.304, 23.1648`。......

2022-08-27 16:42:13 478

原创 Apollo 7.0 PiecewiseJerkSpeedOptimizer(分段加加速度优化器)代码解读

使用QP来求解速度曲线。Apollo 3.0中的使用多段五次多项式连接的样条曲线(每2s使用一个五次多项式拟合,8s时长的轨迹共有8/2=4段五次多项式。实际求解过程中,为了降低计算量,实际求解中仅使用了3段多项式来求解[0, 6]s区间内的速度曲线。这些五次多项式隐含的控制点和节点向量满足样条曲线的迭代表达式就形成了五次多项式样条曲线)来拟合速度,使用二次规划来优化五次多项式的系数,并使用库来求解,之后再使用求解出的多项式系数来确定自变量为时间,因变量为的五次多项式...

2022-08-07 16:13:18 388

原创 有限状态机TinyFSM使用指南

本文介绍了有限状态机TinyFSM的使用方法

2022-07-16 16:12:04 2299 1

原创 在国内加速下载Apollo docker镜像的方法

因为各种原因,国内访问Github速度奇慢无比,下载Apollo docker镜像很难成功,除了使用代理外,有没有其他办法?以下博客:https://blog.csdn.net/weixin_44973419/article/details/109128603给出了较好的方案,感谢原作者。...

2022-05-01 12:47:02 1422

原创 叉乘的几何意义

如上图所示:AB x AC = |AB||AC|sin(a) (a表示AB与AC的夹角),根据叉乘的右手准则,ABx AC的朝向为sot平面的坐标负值方向。AE x AF = |AE||AF|sin(b) (b表示AE与AF的夹角),根据叉乘的右手准则,AE x AF的朝向为sot平面的坐标正值方向。其几何意义是:AB x AC的结果为负值,表明B、C两点在A点上方;AE x AF的结果为正值,表明E、F两点在A点下方。...

2022-04-27 11:01:20 5092

原创 使用CPM管理CMake C++工程中的外部依赖库

严正声明:本文系作者davidhopper原创,未经许可,不得转载。众所周知,对于外部依赖库的管理是CMake C++工程中一个令人头疼的问题。人们一直希望能有一个工具来自动配置CMake C++工程的外部依赖库。现在,这个自动化工具终于诞生了,这就是CPM。只要电脑连接了互联网,任何CMake C++项目都可借助 CPM 添加外部依赖库。CPM的优缺点分别为: 优点极其轻量化,即插即用,无需安装,仅需下载一个CPM.cmake脚本文件;跨平台 ,可用于任何操作系统;可与Git联

2021-11-01 21:08:47 4437 1

原创 Ubuntu 20.04系统中VSCode+CMake+GTest实现C++程序自动化单元测试的详细方法

严正声明:本文系作者davidhopper原创,未经许可,不得转载。本文介绍在Ubuntu 20.04系统中,使用VSCode、CMake、GTest实现C/C++程序单元测试的详细步骤。一、安装VSCode前往https://code.visualstudio.com/下载VSCode安装包,注意下载deb包,下载完成后,使用“Ctrl+Alt+T”打开一个命令行窗口,执行如下命令安装VSCode:...

2021-10-07 13:36:06 4888 4

原创 Linux命令行窗口常用快捷键

严正声明:本文系作者davidhopper原创,未经许可,不得转载。使用Ubuntu系统时,有时会遇到无鼠标的情形,这时如何打开一个窗口,并在里面进行一些简单的操作,具有 。1. Alt + F4 关闭窗口窗口处于打开状态:按下Alt + F4键后,当前窗口关闭。注意:使用某些品牌笔记本电脑操作时,一定要注意Fn键的状态,确认键盘最上方的键处于功能键模式(让F1-F12键生效)。2. Alt + F7 移动窗口 (注: 在窗口最大化的状态下无效)窗口初始位置(位于左侧):按下Alt +

2021-08-27 09:47:46 2410

原创 Linux系统使用键盘操作窗口的技巧

在Linux系统使用过程中,总会碰到难以借助鼠标操作窗口的情形。例如,在车辆上调试程序,因为车辆晃动,使用鼠标操作窗口总会出现莫名其妙的问题,有时是鼠标光标找不到了,有时是鼠标光标位置错乱了,总之就是很难平稳地控制鼠标光标的位置。这时,使用几个键盘快捷键就能轻松搞定窗口操作的问题。1. Alt + F4 关闭窗口窗口处于打开状态:按下Alt + F4键后,当前窗口关闭。注意:使用某些品牌笔记本电脑操作时,一定要注意Fn键的状态,确认键盘最上方的键处于功能键模式(让F1-F12键生效)。2. Al

2021-08-07 11:31:46 3020

原创 使用动态规划实现正则表达式匹配

严正声明:本文系作者davidhopper原创,未经许可,不得转载。下述问题来源于正则表达式匹配:一、问题描述给定一个字符串 s 和一个字符串模式p,请你来实现一个支持.和 *的正则表达式匹配。.匹配任意单个字符*匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个字符串s,而不是部分字符串。说明:s可能为空,且只包含从a-z的小写字母。p可能为空,且只包含从a-z...

2019-12-24 12:09:10 2129 1

原创 多线程按序调度

严正声明:本文系作者davidhopper原创,未经许可,不得转载。下述问题来源于按序打印:一、问题描述提供一个类(原题描述以Java语言提供,本文使用C++实现)public class Foo { public void one() { print("one"); } public void two() { print("two"); } public void th...

2019-12-13 16:48:03 452

原创 std::search算法原理图解

严正声明:本文系作者davidhopper原创,未经许可,不得转载。std::search算法定义于头文件<algorithm>中,不考虑C++ 17标准中提出的执行策略,也不考虑使用自定义的二元谓词(binary predicate,即接受两个参数,返回值类型为bool的函数或仿函数,形如:bool pred(const Type1 &a, const Type2 &amp...

2019-12-12 14:54:54 3555

原创 使用AStar算法求解二维迷宫问题

题目描述定义一个二维数组N*M(其中2<=N<=10;2<=M<=10),如5 × 5数组下所示:int maze[5][5] = { 0, 1, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0, 0, 0, 0,...

2019-11-28 11:49:01 2203 2

原创 字符串简单加解密

严正声明:本文系作者davidhopper原创,未经许可,不得转载。题目描述对输入的字符串进行加解密,并输出。加密方法为:当内容是英文字母时则用该英文字母的后一个字母替换,同时字母变换大小写,如字母a时则替换为B;字母Z时则替换为a;当内容是数字时则把该数字加1,如0替换1,1替换2,9替换0;其他字符不做变化。解密方法为加密的逆过程。接口描述实现接口,每个接口实...

2019-11-23 15:37:48 1873

原创 处理坐标移动指令

题目描述开发一个坐标计算工具, A表示向左移动,D表示向右移动,W表示向上移动,S表示向下移动。从(0,0)点开始移动,从输入字符串里面读取一些坐标,并将最终输入结果输出到输出文件里面。输入合法坐标为A(或者D或者W或者S) + 数字(两位以内)坐标之间以;分隔。非法坐标点需要进行丢弃。如AA10; A1A; %; YAD; 等。下面是一个简单的例子 如:A10;S20;W10...

2019-11-22 18:04:43 1148

原创 按照从小到大的顺序输出一个正整数的所有质数的因子

题目描述输入一个正整数,按照从小到大的顺序输出它的所有质数的因子(如180的质数因子为2 2 3 3 5 )最后一个数后面也要有空格。输入描述:输入一个long型整数输出描述:按照从小到大的顺序输出它的所有质数的因子,以空格隔开。最后一个数后面也要有空格。示例1输入180输出2 2 3 3 5答案#include <iostream>int main() ...

2019-11-22 14:58:13 2531

原创 数字进制转换输入输出

题目描述写出一个程序,接受一个十六进制的数,输出该数值的十进制表示。(多组同时输入 )输入描述输入一个十六进制的数值字符串。输出描述输出该数值的十进制字符串。示例1输入0xA输出10答案#include <iostream>int main() { int number = 0; while (std::cin >> std::h...

2019-11-22 14:37:29 240

原创 字符串分隔与补齐

严正声明:本文系作者davidhopper原创,未经许可,不得转载。题目描述连续输入字符串,请按长度为8拆分每个字符串后输出到新的字符串数组;长度不是8整数倍的字符串请在后面补数字0,空字符串不处理。输入描述:连续输入字符串(输入2次,每个字符串长度小于100)输出描述输出到长度为8的新字符串数组示例1输入abc123456789输出abc00000123456789...

2019-11-22 14:11:12 199

原创 随机整数数组去重与排序

严正声明:本文系作者davidhopper原创,未经许可,不得转载。题目描述明明想在学校中请一些同学一起做一项问卷调查,为了实验的客观性,他先用计算机生成了N个1到1000之间的随机整数(N≤1000),对于其中重复的数字,只保留一个,把其余相同的数去掉,不同的数对应着不同的学生的学号。然后再把这些数从小到大排序,按照排好的顺序去找同学做调查。请你协助明明完成“去重”与“排序”的工作(同一个测...

2019-11-22 12:09:33 700

原创 不区分大小写的字符个数统计

严正声明:本文系作者davidhopper原创,未经许可,不得转载。问题描述写出一个程序,接受一个由字母和数字组成的字符串,和一个字符,然后输出输入字符串中含有该字符的个数。不区分大小写。输入描述第一行输入一个有字母和数字以及空格组成的字符串,第二行输入一个字符。输出描述输出输入字符串中含有该字符的个数。示例1输入ABCDEFA输出1说明输入、输出不要添加任何多余的字符...

2019-11-22 10:09:44 754

原创 Apollo项目导航模式下的坐标转换研究

严正声明:本文系作者davidhopper原创,未经许可,不得转载。Apollo项目导航模式下,规划模块输出的轨迹点使用FLU车身坐标系(见我的另一篇博客《Apollo项目坐标系研究》),在进行当前帧规划前,需要将前一帧未行驶完轨迹点的车身坐标转换为当前帧的车身坐标,并在其中找到最为匹配的点,作为当前帧的规划起点;若在指定的误差范围内找不到匹配点,则以当前车辆位置作为新的规划起点。该过程涉及...

2019-08-27 18:18:13 2710

UEFI引导模式Win10+Ubuntu17.04双系统安装方法(ThinkPad T460p)

目前,电脑主流的固件引导方式已由“BIOS MBR”升级为“UEFI”方式,网上很多文章都是介绍“BIOS MBR”引导方式下的安装方法,用这样过时的文章指导“UEFI”引导模式下的双系统设置,无异于刻舟求剑,除了误人子弟、害人不浅外,没有任何参考价值。本文针对ThinkPad T460p型笔记本电脑(单硬盘),介绍UEFI引导模式下安装Win10和Ubuntu17.04双系统的方法,现实指导意义强。

2017-10-20

Codejock.Xtreme.Toolkit.Pro.v15 Part 2

Codejock.Xtreme.Toolkit.Pro.v15.0.1.Full.Source.Retail.Incl.Keymaker-ZWT.part2

2011-04-14

Codejock.Xtreme.Toolkit.Pro.v15 Part 1

Codejock.Xtreme.Toolkit.Pro.v15.0.1.Full.Source.Retail.Incl.Keymaker-ZWT.part1

2011-04-14

Codejock.Xtreme.Toolkit.Pro V15 Part 3

Codejock.Xtreme.Toolkit.Pro V15

2011-04-14

空空如也

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

TA关注的人

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