分类 软件 下的文章

一直以为Release和Debug的区别只是生成的代码不同,没想到这次被这个观点坑了一上午。 事情发生在配置完OpenCV后。 在编写测试程序,调用imread时,总是报如下错误: unresolved external symbol "bool __cdecl cv::imwrite... 回过头去看VS的配置,compiler的include和lib配置好了,linker的lib也配置好了(注:linker的additional libs支持*通配符) 在网上转了一上午,没有任何进展。直到神奇的StackOverflow再次登场 [click me],才发现了问题所在: 我的OpenCV是用Release配置的。 而测试项目的编写用的是Debug配置。不记得之前在哪里看过了,Debug配置生成的库文件会在文件名末尾加一个d,里面的内容也肯定和Release不一样。将项目配置改为Release,问题解决。

果然跟巨硬扯上关系的都是消耗时间的怪物。阿伟死了

最近在OpenCV方面有一些需求,需要使用GPU来进行一些图像处理。首先的想法当然就是Python解决了,但是在国内外逛了一整圈之后,发现并没有什么收获。从某度获得的信息模棱两可,一旦同时提到OpenCV和GPU,基本上就是教怎么配环境的;而StackOverflow上很直接的给出了答复:不能

但是在挑战面前,程序员是不会轻言放弃的(PM:真香)。于是打算动手直接撸C++代码,再给Python调用。说完就开始动手,给VS配置环境。于是第一个问题来了——考虑到电脑空间问题,目前装的是VS2013,而官网上给出的预编译包支持的VS版本是2015和2017。虽然说理论上问题不大,但还是没有这么试,毕竟之前一个2015版的asmhighlighter插件就把我折腾的够呛,最后还没成功。

在网上看了一篇博客之后,受到启发,决定自行编译。在官网上取到安装包,去sourceforge上拿一个cmake-gui,然后就开始了第一次编译。

OpenCV 4及以上的版本就不要考虑了。这些版本使用了C++11语法,而在VC12开发的时代并没有完全支持C++11规范 ->通过编译报错可以看出,诸如NORETURN一类的语法会在VS2013报错,且官方也对于各版本的C++11支持情况做了说明

===========下面是不详细的步骤===========

Where is the source code: 这里填解压后源码的根目录 Where to build the binaries: 这里放的可能是最终的程序,也可能是类似于“安装程序”一类的临时文件。若是后者的话,安装目录还需要在cmake里手动指定修改。 然后Configure,选择VS2013(vc12)对应的64位选项。把相关项的信息修改,该勾上的勾上,该填写的目录填写一下,再Configure。新出现的条目是红色的。重复该步骤,直至没有新的红色条目出现为止。比较重要的是记得把WITH_CUDA勾上。 然后Generate生成给VS编译用的项目结构,再Open Project,在VS中编译获得成品即可。

在编译时,去掉了python模块的编译,加上了OpenBLAS库和cuda选项,然后右键INSTALL生成。

该部分可以分为两个步骤:编译和安装(make && make install) 即可以通过等价的以下方式,共两步实现,1)右键BUILD_ALL生成;2)右键INSTALL仅生成该项目

目前编译器情绪稳定。

VS中编译时,涉及到cuda部分的编译速度好像特别慢。别人说要编译六个小时我还不信来着。 最终统计:编译时间约为3小时。 编译完成,五六千个警告。没有错误,问题不大

后续是小型阿伟去世现场,参见这里

  1. 固件工具,用于烧写ib卡的固件和查询相关信息:Mellanox Firmware Tools (MFT)

安装过程

tar xf mft-4.11.0-103-x86_64-rpm.tgz
cd mft-4.11.0-103-x86_64-rpm
sudo ./install.sh

接下来会自动检测环境,提示用户补充安装缺少的软件包。 CentOS 7 Core缺少的如下: sudo yum install -y gcc rpm-build kernel-devel

  1. 在检测完固件之后,选择相应版本的驱动下载:Mellanox OpenFabrics Enterprise Distribution for Linux (MLNX_OFED) 可以选择历史版本。所有版本对应支持的固件列表参考如下: http://www.mellanox.com/page/mlnx_ofed_matrix?mtag=linux_sw_drivers

系统环境是CentOS 7.6,但是ib卡的固件版本只有2.33.5000,处于各种原因,既不打算换系统,也不打算烧固件,于是打算强上老驱动试试。 然后。。炸了,编译错误,还是C语言层面的,不管了,直接上最新驱动

不更新固件 -> --without-fw-update mxm需要gui,丢掉 -> --without-mxm 缺失的软件包: sudo yum install -y tcl tcsh tk lsof libxml2-python pciutils perl

然后就开始安装,应该没有问题了 配ip,方法就跟配Ethernet一样的

sudo service openibd restart
sudo ip addr add <ip-addr>/<netmask> dev <devname>

netperf测试网络质量: 直接用github上的源码编译安装(推荐使用release),需要在被连接测试的服务器上运行netserver命令,该命令自带于已安装好的netperf中。 然后在主动连接的主机上运行以下命令:

netperf -H 10.0.0.30 -t omni -- -d rr -O "THROUGHPUT, THROUGHPUT_UNITS, MIN_LATENCY, MAX_LATENCY, MEAN_LATENCY"

-H选项用于指定主机。

https://texfaq.org/ 走你!

http://detexify.kirelabs.org/classify.html 手写字符转latex


加粗段落中的非加粗文字

\textnormal{yout-text} % 不仅取消加粗,还会还原成默认字体
\textmd{your-text}     % 仅取消加粗,适用于\texttt混用于普通文字的情况

IEEEtran模板,conference样式的页码显示

https://tex.stackexchange.com/questions/542925/show-page-numbers-in-ieeetran-document-class

原因是在IEEEtran.cls中,如果选中了conference样式的话,默认是隐藏页码的。解决方法是在\maketitle之后立即加上:

\setcounter{page}{1}
\pagestyle{plain}
\thispagestyle{plain}

代码段

\begin{lstlisting}[language=bash,frame=none,%numbers=left,numberstyle=\small,
   rulesepcolor=\color{red!20!green!20!blue!20}, 
   keywordstyle=\color{blue!70!black}, 
   commentstyle=\color{blue!90!},
   basicstyle=\footnotesize\ttfamily,
   breaklines=true,showstringspaces=false]
   ...
\end{lstlisting}

enumerate环境中进行两端对齐:

\usepackage{ragged2e}
\usepackage{enumerate}

...

\begin{enumerate}
    \justifying
    \item ...
\end{enumerate}

caption居中
全局的设置方式是在usepackage中添加选项:

\usepackage[justification=centering]{caption}

BibTeX引用网页

@misc{visualprofiler,
  author = {NVIDIA Corporation},
  title = {NVIDIA Visual Profiler | NVIDIA Developer},
  note = {\url{https://developer.nvidia.com/nvidia-visual-profiler}},
}

手动跨页的图表,使用相同的表头:使用captcont

\usepackage{captcont}
...
\caption{title}      %这是定义的图表标题
...
\captcont*{title}    %使用与上面相同的标题,在手动截断图表进行换页的时候,在新图表块中用这个代替caption即可

article中,方程按照章节号编号

\numberwithin{equation}{section}

listing 自动换行:加参数breaklines=true
调整tab宽度:加参数tabsize=
去除string中的空格标记:加参数showstringspaces=false


TiKZ画树状图 http://www.texample.net/tikz/examples/filesystem-tree/

% Author: Frantisek Burian
\documentclass{minimal}
\usepackage{tikz}
\usetikzlibrary{trees}
\begin{document}
\tikzstyle{every node}=[draw=black,thick,anchor=west]
\tikzstyle{selected}=[draw=red,fill=red!30]
\tikzstyle{optional}=[dashed,fill=gray!50]
\begin{tikzpicture}[%
  grow via three points={one child at (0.5,-0.7) and
  two children at (0.5,-0.7) and (0.5,-1.4)},
  edge from parent path={(\tikzparentnode.south) |- (\tikzchildnode.west)}]
  \node {texmf}
    child { node {doc}}       
    child { node {fonts}}
    child { node {source}}
    child { node [selected] {tex}
      child { node {generic}}
      child { node [optional] {latex}}
      child { node {plain}}
    }
    child [missing] {}                
    child [missing] {}                
    child [missing] {}                
    child { node {texdoc}};
  \end{tikzpicture}
\end{document}

被文字环绕的图片

\usepackage{wrapfigre}
...
<text>
\begin{wrapfig}{l}{0.1}
\includegraphics{...}
\end{wrapfigure}

wrapfigure后要带两个参数,分别是布局和宽度
按照上述代码,text会显示在图像的左侧。


控制水平和垂直间距的命令

\vspace{10pt}
\hspace*{10pt}  %我也不知道为什么要加一个*,反正在figure里面加了才有用

表格设置每行最小长度

\setlength{\tabcolsep}{0.08\linewidth}

排版器生成caption的原理: \tablename + \thetable + 根据CaptionFormat/CaptionLabelFormat/CaptionTextFormat生成的标题文字 用\Declare***定义对应的样式。(详情参见下面caption宏包使用一栏的pdf)


强行在ieeetrans模板中使用数字章节编号

\usepackage{caption}
% 改变引用的章节编号格式
\renewcommand\thesection{\arabic{section}}
\renewcommand\thesubsection{\thesection.\arabic{subsection}}
\renewcommand\thesubsubsection{\thesubsection.\arabic{subsubsection}}
% 改变标题的章节编号格式
\renewcommand\thesectiondis{\arabic{section}}
\renewcommand\thesubsectiondis{\thesectiondis.\arabic{subsection}}
\renewcommand\thesubsubsectiondis{\thesubsectiondis.\arabic{subsubsection}}

强行只在某个标题后启用第一段缩进

\begin{minipage}[h]{\linewidth}  % 确定位置用的htbp和minipage宽度的n倍linewidth,数字n写在\linewidth前即可
\setlength{\parindent}{15pt}
...
\end{minipage}

规范地使用appendix

\usepackage[toc, page]{appendix}
...
\begin{appendices}
...
\end{appendices}

caption宏包使用说明 http://ftp.jaist.ac.jp/pub/CTAN/macros/latex/contrib/caption/caption-eng.pdf

设置图表的标头缩写(Figure 1. -> Fig. 1., Table 1. -> Tab. 1.)

% LaTeX生成标题时通过\figurename和\tablename获得标头,因此把这两个命令的返回值重写一下就好
\renewcommand \figurename{Fig.}
\renewcommand \tablename{Tab.}

IEEEtrans的模板中,只有conference才会提供caption的居中。(QAQ


加粗的标题

\usepackage{enumerate}
...
\begin{enumerate}[\bfseries 1.]  % A, a, I, i, 1分别产生以该样式编号起头的标题列。
\item                            % 切记这些标记不能再被其他的大括号包含,否则将被视作普通的字符
\item                            % 例如这里不能用\textbf{}只能用\bfseries
...
\end{enumerate}

太阳和他的母亲

\usepackage{amssymb}
$\circledR$, $\texttrademark$

对于有上下文的块,其label一定要放在caption之后,否则引用时会出现意料之外的结果。


表格中的整行横线用\hline来绘制。 \cline{x-y}用于绘制第x列至第y列的横线。起始列号为1。


caption内换行

\protect\\

链接到图表首部而不是它正下方的标题

\usepackage{hyperref}
\usepackage[all]{hypcap}

论文中生成的参考文献顺序,与对应bib文件中参考文献顺序无关,只与引用顺序有关,也就是说bib文件内的参考文献可以随意乱放,顺序可以打乱。


空心字母

\usepackage{amsfonts, amssymb}
$\mathbb{N}$