Jul 10, 2018 · 169 words · 1 min
以前用的办法太老土啦
看到一个since C++11的方法,我觉得比较优雅
1 #include <iostream> 2 #include <chrono> 3 //#include <ratio> 4 #include <thread> 5 6 void f() 7 { 8 std::this_thread::sleep_for(std::chrono::seconds(1)); 9 } 10 11 int main() 12 { 13 auto t1 = std::chrono::high_resolution_clock::now(); 14 f(); 15 auto t2 = std::chrono::high_resolution_clock::now(); 16 17 // floating-point duration: no duration_cast needed 18 std::chrono::duration<double, std::milli> fp_ms = t2 - t1; 19 20 // integral duration: requires duration_cast 21 auto int_ms = std::chrono::duration_cast<std::chrono::milliseconds>(t2 - t1); 22 23 // converting integral duration to integral duration of shorter divisible time unit: 24 // no duration_cast needed 25 std::chrono::duration<long, std::micro> int_usec = int_ms; 26 27 std::cout << "f() took " << fp_ms.count() << " ms, " 28 << "or " << int_ms.count() << " whole milliseconds " 29 << "(which is " << int_usec.count() << " whole microseconds)" << std::endl; 30 }
Jul 6, 2018 · 235 words · 1 min
用gdb调试c++的时候,需要添加-g编译选项add_compile_options(-g),并且关掉各种编译优化
如果是多线程程序,可以用info threads 查看每个线程的信息
Jul 2, 2018 · 243 words · 1 min
资料推荐这个:MySQL C API programming tutorial
环境为ubuntu 14.04 lts
需要安装mysql 和mysql 开发包
sudo apt-get install libmysqlclient15-dev mysql-server mysql-client
先在mysql 中建立test数据库和test表格
mysql>create database test; mysql>use test; //切换到test数据库中 mysql> create table test(name varchar(255),num int(10) ); //创建一个叫test的表 mysql>show create table test; //显示刚才创建的表信息 mysql> select * from test; //查询test表中数据 mysql>quit 然后用如下cpp代码连接
May 15, 2018 · 200 words · 1 min
一个国内vps,一个国外vps.
前提是国外vps已经配置好。
接下来,我们在国内vps上安装haproxy
yum -y install haproxy 或者 apt-get install haproxy
然后修改配置文件,位置在/etc/haproxy/haproxy.cfg
May 14, 2018 · 1637 words · 4 mins
20190511更新:
证书到期了,写一下更换证书的流程.
重新申请好证书之后,直接把 Apache 里对应的 1、2、3 放到 /data/cert 文件夹。
其中 1 对应 server-ca.crt,2 对应 server.crt,3 对应 server.key。
May 6, 2018 · 1207 words · 3 mins
迫于拙劣的cpp水平,这次来记录一些关于STL算法部分的内容。
参考内容是CS106L的course reader
Iterator Categories # Iterators分为以下五种:
Output Iterators:可以使用 ++;可以用 *myItr = value,不能用 value = *myItr Input Iterators:可以使用 ++;可以用 value = *myItr,不能用 *myItr = value Forward Iterators:可以使用 ++,可以同时用 value = *myItr 和 *myItr = value Bidirectional Iterators:比起 Forward Iterator 多了 --,但是不能 + 或者 += Random-Access Iterators:比起 Bidirectional Iterators 多了 + 和 += Algorithm Naming Conventions # 一些关于STL Algorithm的命名规则
May 4, 2018 · 1543 words · 4 mins
迫于拙劣的cpp水平,来补补以前忽略掉的cpp细节。
老规矩,先放资料。
参考资料:
A Gentle Introduction to C++ IO Streams
“Designing and implementing a general input/output facility for a programming language is notoriously difficult”
Bjarne Stroustrup Stream的基本认识 # 说说我的理解。stream(流)可以看做输入输出的抽象。我们通过流可以忽略掉device的细节,采取同样的输入输出方式。
Apr 30, 2018 · 206 words · 1 min
迫于要在服务器上写cpp代码,又由于各种原因,没办法把同步到本地。因此要在服务器上配置一个cpp的环境orz.
我是用vim-plug来管理插件的,只需要添加
Plug ‘scrooloose/nerdtree’, { ‘on’: ‘NERDTreeToggle’ } 就好了。 下面记录一些会用到的快捷键:
Apr 29, 2018 · 628 words · 2 mins
gRPC 是 google 最新发布的开源 RPC 框架, 声称是"一个高性能,开源,将移动和HTTP/2放在首位的通用的RPC框架.". 技术栈非常的新, 基于HTTP/2, netty4.1, proto3, 拥有非常丰富而实用的特性, 堪称新一代RPC框架的典范.
Apr 25, 2018 · 1085 words · 3 mins
现在用的vim配置还是2015年7月的时候写的。
三年过去了,vim到了8.0,很多功能也有了更多选择。因此打算来更新一波vim配置。目前还在更新过程中…等差不多折腾完再来记录一些信息。
Apr 24, 2018 · 1480 words · 3 mins
protobuf 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
Apr 19, 2018 · 2577 words · 6 mins
2022-02-26 update:
说学习笔记听起来像在分析代码…但是实际上什么都没干,还是写“使用笔记”好了
大三的时候看过一点 leveldb 的源码,不过没有怎么用过。
最近有个需求是存人脸的 feature 到硬盘,似乎使用 leveldb 比较合适,因此来学习一下使用。
Apr 5, 2018 · 736 words · 2 mins
接触 Eigen 的原因是最近在看 caffe/caffe2 源码,caffe2 中使用了 Eigen 库。Eigen 是一个基于 C++ 模板的线性代数库,直接将库下载后放在项目目录下,然后包含头文件就能使用,非常方便。对于 Linux 用户,只需要把头文件放到 /usr/include 下即可。此外,Eigen 的接口清晰,稳定高效。
Apr 1, 2018 · 271 words · 1 min
windows自己更新把grub更新挂了….
更新的时候要重启几次,重启一次挂一次…
讲真,windows(或者说win10?) 是我见过的最辣鸡的OS了… 自己把自己弄挂这事不是一两次了.
Mar 18, 2018 · 889 words · 2 mins
前置技能点:
gnu make
linux下.so,.a,.o文件
cmake是一个工具,也可以看成一门语言。
学习cmake最大的障碍在于看不懂全是大写的英文
学习cmake主要参考了《cmake practice》
Mar 17, 2018 · 198 words · 1 min
发现我对工程一无所知 QAQ。
参考资料:
Library Archives: Static and Dynamic
简单地说,.a 文件是静态库,而 .so 文件是共享对象(动态库),作用类似 Windows 下的 DLL。
.o 文件则相当于 Windows 下的 .obj 文件。编译器通常先把各个源文件编译为目标文件,再将它们链接成最终的可执行文件。
Mar 15, 2018 · 127 words · 1 min
emmm,博客的数据库又挂了。
看了下log,发现innoDB: Cannot allocate memory for the buffer pool 的error
查了下,貌似是内存不够了? orz
用free 命令看了下,阿里云ecs貌似是默认没有swap分区的。
Feb 13, 2018 · 880 words · 2 mins
CUDA 编程涉及到在不同的平台上同时运行代码:包含 CPU 的 host 和包含 GPU 的 device。
所以了解 host 和 device 的差异对性能优化是非常重要的。
2.1. Differences between Host and Device # Threading resources # host 上能同时运行的线程数目比较少(比如 24 个)。
Feb 12, 2018 · 759 words · 2 mins
APOD指的是Assess, Parallelize, Optimize, Deploy
如图所示,APOD过程是一个循环的过程,每次只进行一部分,从A到P到O到D,然后再进行下一轮的APOD
Assess # 对于一个项目,第一步要做的是接触(Assess)项目,得到项目代码中每部分的执行时间。有了这部分内容,开发者就可以找到并行优化的瓶颈所在,并开始尝试用GPU加速。