一些问题的解决方案【持续更新ing】
- Windows
- CUDA 安装失败解决方案
- VS 添加现有项无反应
- 无法定位程序输入点 于动态链接库 xxx.exe 上
- 不同工具集生成的库无法通用
- 更改只读属性
- Ubuntu
- VTK cmake 过程中找不到QT5目录
- Ubuntu添加环境变量(永久+最简单)
- Wandb强制终止
- 一步执行多条命令
- Ubuntu 触摸板开关
- 查看当前文件夹的大小
- C++
- #pragma omp parallel for
- Python
- 绘制等比例坐标轴
记录一些问题的解决方案,一些即时学到的解决方案往往不进脑子,为了避免第二次遇到同样问题时不被自己骂,那么就只能好记性不如烂笔头了
Windows
CUDA 安装失败解决方案
在CUDA安装时报错
或在安装其他程序时提示正在安装另一个程序等等
解决方案
打开任务管理器,在进程中搜索msiexec.exe
或安装程序
将后台运行的msiexec.exe
结束运行,然后重新运行安装程序,让其能够重新正常调用msiexec.exe
VS 添加现有项无反应
关闭.sln
删除工程目录下的.vs 缓存文件夹
重新打开.sln
无法定位程序输入点 于动态链接库 xxx.exe 上
版本不一致,检查新生成dll版本的接口与生成exe的接口(头文件.h)是否一致。
不同工具集生成的库无法通用
当然是更改工具集重新生成
重新生成
更改只读属性
CMD终端中使用attrib命令
C:\Users>help attrib
显示或更改文件属性。
ATTRIB [+R | -R] [+A | -A ] [+S | -S] [+H | -H] [+I | -I]
[drive:][path][filename] [/S [/D] [/L]]
+ 设置属性。
- 清除属性。
R 只读文件属性。
A 存档文件属性。
S 系统文件属性。
H 隐藏文件属性。
I 无内容索引文件属性。
[drive:][path][filename]
指定 attrib 要处理的文件。
/S 处理当前文件夹及其所有子文件夹中的匹配文件。
/D 也处理文件夹。
/L 处理符号链接和符号链接目标的属性。
Ubuntu
VTK cmake 过程中找不到QT5目录
cmake-gui 中,勾选VTK_Group_QT后,Configure报错:
By not providing "FindQt5.cmake" in CMAKE_MODULE_PATH this project has
asked CMake to find a package configuration file provided by "Qt5", but
CMake did not find one.
Could not find a package configuration file provided by "Qt5" with any of
the following names:
Qt5Config.cmake
qt5-config.cmake
Add the installation prefix of "Qt5" to CMAKE_PREFIX_PATH or set "Qt5_DIR"
to a directory containing one of the above files. If "Qt5" provides a
separate development package or SDK, be sure it has been installed.
解决方案:
手动填上Qt5_DIR的地址,地址要精确到Qt5Config.cmake所在文件夹(windows平台也一样)
ubuntu中如:
/opt/Qt5.12.5/5.12.5/gcc_64/lib/cmake/Qt5
填上后,Configure+Generate:
Ubuntu添加环境变量(永久+最简单)
Ctrl+Atl+T 打开Shell
sudo vim /etc/environment
或(没有安装vim或没有接触过vim可用默认文本编辑器gedit打开编辑)
sudo gedit /etc/environment
在PATH=
后以冒号分隔,添加路径(执行文件所在目录的绝对路径)
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/home/wj/WW3/model/exe:/home/wj/WW3/model/bin:/usr/local/openmpi:/usr/local/VSCode-linux-x64/"
保存,注销重新登录即可生效
Wandb强制终止
某些情况下Ctrl+C
结束网络训练时,终端仍一直输出
wandb-servicef xxx MB uploaded (xxx MB deduped)
可输入如下命令终止wandb服务
pkill wandb-service
一步执行多条命令
如 创建文件夹并进入,常用于cmake
似乎用处不大,极少数情况下或许能装一下?
mkdir [folder] && cd $_
mkdir 创建命令
[folder]文件夹名字
&& 并且(接着执行后面的命令)
cd 进入文件夹
$_ 上一个命令的最后参数
Ubuntu 触摸板开关
针对设置里面的触摸板开关无效的情况(之前的联想拯救者在ubuntu下有这个bug)
可使用xinput命令启用和禁用触摸板。首先,输入xinput查看触摸板的名称或ID,例如:
~ > xinput
⎡ Virtual core pointer id=2 [master pointer (3)]
⎜ ↳ Virtual core XTEST pointer id=4 [slave pointer (2)]
⎜ ↳ Asus Keyboard id=14 [slave pointer (2)]
⎜ ↳ ELAN1200:00 04F3:303E Mouse id=15 [slave pointer (2)]
⎜ ↳ Logitech G304 id=12 [slave pointer (2)]
⎜ ↳ ELAN1200:00 04F3:303E Touchpad id=16 [slave pointer (2)]
⎣ Virtual core keyboard id=3 [master keyboard (2)]
↳ Virtual core XTEST keyboard id=5 [slave keyboard (3)]
↳ Power Button id=6 [slave keyboard (3)]
↳ Asus Wireless Radio Control id=7 [slave keyboard (3)]
↳ Video Bus id=8 [slave keyboard (3)]
↳ Video Bus id=9 [slave keyboard (3)]
↳ Power Button id=10 [slave keyboard (3)]
↳ Sleep Button id=11 [slave keyboard (3)]
↳ USB2.0 HD UVC WebCam: USB2.0 HD id=13 [slave keyboard (3)]
↳ Asus WMI hotkeys id=17 [slave keyboard (3)]
↳ AT Translated Set 2 keyboard id=18 [slave keyboard (3)]
↳ Asus Keyboard id=20 [slave keyboard (3)]
↳ Logitech G304 id=19 [slave keyboard (3)]
查看输出得知触摸板设备名id,接下来可以使用如下命令:
禁用触摸板
xinput --disable 16
打开触摸板
xinput --enable 16
查看当前文件夹的大小
du -sh
❯ du -sh 🐍 base root@sdfstudio 17:04:36
186G .
C++
#pragma omp parallel for
#pragma omp parallel for 是一个 OpenMP 指令,用于在多核处理器或多处理器系统上实现并行化循环的执行
使用 #pragma omp parallel for 的一些注意事项:
- 数据依赖性:确保循环中没有数据竞争或依赖,否则可能导致不正确的结果或竞态条件
- 效率:并非所有的循环都适合并行化。对于简单或迭代次数较少的循环,并行化的开销可能会超过其带来的性能提升
- 调度策略:可以使用 schedule 子句来控制循环迭代如何被分配给线程
反面例子(使用#pragma omp parallel for
计算出错,注释#pragma omp parallel for
后计算正确)
double ct1[3] = { 0 };
#pragma omp parallel for
for (int i = 0; i < point_number; ++i)
{
ct1[0] += m_cloud_sample_target[i].x;
ct1[1] += m_cloud_sample_target[i].y;
ct1[2] += m_cloud_sample_target[i].z;
}
ct1[0] /= point_number;
ct1[1] /= point_number;
ct1[2] /= point_number;
原因是在 #pragma omp parallel for
指令下,每个线程都会并行执行循环体中的代码。由于 ct1 数组是共享的,多个线程会同时对其进行累加操作,导致数据竞争。这样,某个线程可能会在另一个线程更新 ct1 之前读取旧值,从而导致错误的累加结果[来自GPT]
注释掉 #pragma omp parallel for
后,代码以串行方式执行,不存在数据竞争问题,因此计算结果正确
Python
绘制等比例坐标轴
二维:
坐标轴等比例
plt.axis('equal')
or
plt.axis('scaled')
axis()相关方法
axis()
[xmin, xmax, ymin, ymax]:显示坐标轴的范围
option,可取值为
'on':打开坐标轴
'off':关闭坐标轴显示
'equal':设置相等的比例,y轴和x轴单位刻度对应长度是一样的
'scaled':通过更改绘图框的尺寸设置相等的缩放比例
'tight':设置足够大的限制来显示所有数据
'auto':自动确定
'image':‘scaled’ with axis limits equal to data limits
'square':方形图,类似于‘scaled’,但是强制xmax-xmin = ymax-ymin
三维:
坐标轴等比例
ax.set_box_aspect([ub - lb for lb, ub in (getattr(ax, f'get_{a}lim')() for a in 'xyz')])