- 博客(14)
- 资源 (2)
- 问答 (1)
- 收藏
- 关注
原创 需要多次cudaMalloc时的参数管理
不过有个注意事项,如果为了省最后的deInit()去写个析构函数,然后把deInit()放在析构函数里。那么此时给kernel传参就还是得一个指针一个指针传,如果直接传param,会有个临时变量调用析构函数提前把显存释放掉。这样给kernel传参时也只需要传个param,不用写一大堆。我自己会写个结构体包一下,这样给kernel传参也方便。
2025-01-16 20:38:25
159
原创 CUDA错误misaligned address和block之间的数据同步问题
这个时候把char* 转成point* 就会报错CUDA error: misaligned address。对应一段内存,需要多少就把下标记录下来,用的时候把char。
2024-09-13 13:22:18
962
原创 CUDA工作记录3
当不同block同时读写一个全局变量时,很容易出现前面线程修改而后面线程不知道的情况,这时候的计算结果往往是错误的,因为cuda为了加速计算会把一些内存较小的值存在L1缓存里面,第一个线程计算后写入的值不会更新其他block的线程的L1缓存。有时候这里会出现死锁,我分析是因为第一个线程lock的解锁没有同步到其他的线程上,导致其它线程mark的值一直为1,无法跳出while循环。等,cuda中的原子操作是作用在L2缓存上的,会直接绕过L1。另外还有volatile关键字,这个也会让变量的读写绕过L1。
2024-01-22 19:44:44
443
原创 写cuda代码的工作记录
这段代码里面的do …后面一定不能写return语句,不然就会卡死。只能continue;然后在函数末尾写return;至于为什么我不知道。记录一下工作中cuda编程遇到的坑。
2023-08-11 15:44:39
141
1
原创 记录一下std::async的一些相关知识
上述例子中的第二个线程就会在get()处等待第一个线程中的promise使用set_value(int)设置值后再开始下面代码的执行,这就实现了线程间的通信功能,工作中自己写多线程thread用的还是多一点,有天在github上看到c++线程池的实现用的是std::async,就查了下相关知识记录一下。async的返回值会存在std::future里面,而这里只记录下常用的功能。顺便说下std::packaged_task,这个就相当于多了个future返回值的std::function,如下。
2023-04-11 23:41:23
363
原创 八叉树实现的一些思考
当时的想法是写一个base结构体,然后用branch和leaf去继承,不过写的时候发现为了实现遍历他们要互相包含对方的指针,base指针是操作不了子类的私有属性的,后来就不了了之了,这几天又想了一下是不是可以用union解决呢。用level记录节点的深度来判断是leaf还是branch,好像pcl就是这么干的。实习的时候要优化八叉树,当时有个想法就是把八叉树的枝叶节点分开,因为枝节点要存八个指针而叶节点要存法向量之类的东西,而这些东西是不通用的,当点量达到几千万时会浪费几个g的内存。
2023-04-07 15:03:03
112
原创 对于SGM算法代价聚合的理解
这个聚合函数会给人一种错觉,假设求视差d下的p点的聚合代价就得求前一个点视差d-1,d,d+1…的聚合代价,然后又得求前前一个点的聚合代价。这样求下去就是指数级别的运算。实际上这里需要利用动态规划的思想,从第一个点开始计算而不是简单的递归。比如我们的视差范围d是5-10。聚合路径是从左到右,如下图。我们从a点开始计算,利用初始代价即可,然后比较出最小值,假设d=6时代价值最小。则b点的聚合代价就是L1=Cost(d(a)=6)+Cost(d(b)=5)+P1,L2=Cost(d(a)=6)+Cost.
2022-04-04 15:20:27
1346
原创 VisualStudio2019运行release版本代码时_Container_base12::_Orphan_all引发了异常: 读取访问权限冲突
_Container_base12::_Orphan_all引发了异常
2021-12-22 01:55:52
1209
原创 LNK2019 无法解析的外部符号 main,该符号在函数 “int __cdecl invoke_main(void)“
今天起床windows自动更新后,发现前几天还能运行的代码报错,找了一下后把vs的windows sdk版本返回去就解决了
2021-10-03 14:50:15
873
原创 ISEF滤波
用opencv随便写了个ISEF滤波ISEF.cpp#include <iostream>#include"ISEF.h"using namespace cv;using namespace std;//该文件将原图施加ISEF滤波后输出int main(){ int cols, rows; float a = 0.5;//滤波参数,0<a<1,a越大定位精度越高,但抗干扰能力越弱 string imagedir = "D:/vs project/ISEF/*.
2021-09-29 15:12:07
249
测试openmvg关于转换sfm_data.bin时的问题
2021-03-03
TA创建的收藏夹 TA关注的收藏夹
TA关注的人