Posts
2018
使用python计算误差代码
import os
1import math 2ave_err=0.0 3max_err=0.0 4max_err_rate=0.0 5length=0 6with open("cpu_result.txt","r") as fp1, open("cuda_ppl_result.txt","r") as fp2: 7 for l1 in fp1: 8 l2 = fp2.readline() 9 l1=l1[:-2] 10 l2=l2[:-2] 11 lst = l1.split(' ') 12 lst2 = l2.split(' ') 13 #print lst 14 lst = [float(x) for x in lst ] 15 length = length + len(lst) 16 lst2 = [float(x) for x in lst2] 17 #print (lst) 18 #print (lst2) 19 20 for index,x in enumerate(lst): 21 y = lst2[index] 22 ave_err = ave_err + abs(x-y) 23 max_err = max(max_err,abs(x-y)) 24 max_err_rate = max(max_err_rate,abs(x-y)/x) 25 26 print("len=",length) 27 print("max_err=",max_err) 28 print("max_err_rate=",max_err_rate*100,"%") 29 print("ave_err=",ave_err/length) 需要提供两个文件,并且两个文件的数据格式相同。
c++11 function 与bind 学习笔记
·315 words·1 min
C++11 std::function 是一种通用、多态的函数封装,它的实例可以对任何可 以调用的目标实体进行存储、复制和调用操作
见下面的例子
1 /* *********************************************** 2 Author :111qqz 3 mail: renkuanze@sensetime.com 4 Created Time :2018年07月19日 星期四 17时41分00秒 5 File Name :bind.cpp 6 ************************************************ */ 7 #include <functional> 8 #include <iostream> 9 using namespace std; 10 float foo( int x,int y,int z){return x+y+z+1.;} 11 int main() 12 { 13 function<int(int,int)>func = foo; 14 int y = 10; 15 function<int(int)>fun = [&]( int value)->int 16 { 17 return 1+value+y; 18 }; 19 cout<<func(15,4,9)<<endl; 20 cout<<fun(8)<<endl; 21 return 0; 22 } std::bind 则是用来绑定函数调用的参数的,它解决的需求是我们有时候可 能并不一定能够一次性获得调用某个函数的全部参数,通过这个函数,我们可以将 部分调用参数提前绑定到函数身上成为一个新的对象,然后在参数齐全后,完成调 用
intel tbb 学习笔记
·375 words·1 min
tbb是**Threading Building Blocks library的缩写,**是一个为开发者提供并行解决方案的库.
先放个文档https://www.threadingbuildingblocks.org/intel-tbb-tutorial
C++ 记录代码运行时间
·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 }
linux 下C++ 连接mysql 数据库
资料推荐这个: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代码连接
使用haproxy中转酸酸流量
·200 words·1 min
一个国内vps,一个国外vps.
前提是国外vps已经配置好。
接下来,我们在国内vps上安装haproxy
yum -y install haproxy 或者 apt-get install haproxy
然后修改配置文件,位置在/etc/haproxy/haproxy.cfg
wordpress 开启全站https
20190511更新:
证书到期了,写一下更换证书的流程.
重新申请好证书之后,直接把 Apache 里对应的 1、2、3 放到 /data/cert 文件夹。
其中 1 对应 server-ca.crt,2 对应 server.crt,3 对应 server.key。
C++ STL Algotithms 学习笔记
迫于拙劣的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的命名规则
C++ IO Streams 学习笔记
迫于拙劣的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的细节,采取同样的输入输出方式。
vim 插件 NERDTree 学习笔记
迫于要在服务器上写cpp代码,又由于各种原因,没办法把同步到本地。因此要在服务器上配置一个cpp的环境orz.
我是用vim-plug来管理插件的,只需要添加
Plug ‘scrooloose/nerdtree’, { ‘on’: ‘NERDTreeToggle’ } 就好了。 下面记录一些会用到的快捷键:
8102年了,来更新一波vim配置
现在用的vim配置还是2015年7月的时候写的。
三年过去了,vim到了8.0,很多功能也有了更多选择。因此打算来更新一波vim配置。目前还在更新过程中…等差不多折腾完再来记录一些信息。
protobuf学习笔记
protobuf 是一种轻便高效的结构化数据存储格式,可以用于结构化数据序列化。它很适合做数据存储或 RPC 数据交换格式。可用于通讯协议、数据存储等领域的语言无关、平台无关、可扩展的序列化结构数据格式。
levelDB 使用笔记
2022-02-26 update:
说学习笔记听起来像在分析代码…但是实际上什么都没干,还是写“使用笔记”好了
大三的时候看过一点 leveldb 的源码,不过没有怎么用过。
最近有个需求是存人脸的 feature 到硬盘,似乎使用 leveldb 比较合适,因此来学习一下使用。
caffe2 添加自定义operater
·1153 words·3 mins
记录一下,一个之前没有接触过 caffe/caffe2 的人为了添加自定义 op 到 caffe2 需要做的工作。
首先参考 caffe2 tutorial,随便跑个 op 来试试,不妨以比较简单的 Accumulate_op 为例子。
这个 op 的作用就是计算 Y=X+gamma*Y,其中 X 为输入,Y 为输出,gamma 是参数。
linux/win双系统 更新win后 grub 出现 Error: unknown filesystem 的解决办法
windows自己更新把grub更新挂了….
更新的时候要重启几次,重启一次挂一次…
讲真,windows(或者说win10?) 是我见过的最辣鸡的OS了… 自己把自己弄挂这事不是一两次了.