-
以前用的办法太老土啦 看到一个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 = …
Read More -
用gdb调试c++的时候,需要添加-g编译选项add_compile_options(-g),并且关掉各种编译优化 如果是多线程程序,可以用info threads 查看每个线程的信息 然后用thread [id] 查看指定线程,并用bt查看调用栈。 gdb调试的时候,可以用ctrl+c 停住程序,来查看调用栈,然后按c(continue)继续程序的运行。 emmm 先放一些相关的。 Linux 下如何产生core文件(core dump设置) ulimit -a 查看限制 ulimit -c unlimited 表示这只为不限制core文件大小 用gdb的调试命令如下: gdb ./test core.2065
Read More -
迫于拙劣的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 * …
Read More -
迫于拙劣的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的细节,采取同样的输入输出方式。 对于任何原生的cpp类型,都可以用stream来处理。用户自定 …
Read More -
2022-02-26 update: 说学习笔记听起来像在分析代码。。。但是实际上什么都没干,还是写"使用笔记"好了 大三的时候看过一点levelDB的源码,不过没有怎么用过。 最近有个需求是存人脸的feature到硬盘,似乎使用levelDB比较合适,因此来学习一下使用。 先放参考资料。 关于levelDB的语法,看这里就好了。 以及由于caffe中使用了levelDB,因此也可以参考下caffe源码。不过caffe中对levelDB的使用是又封装了一层。 具体可以参考: #ifdef USE_LEVELDB #ifndef CAFFE_UTIL_DB_LEVELDB_HPP #define …
Read More -
前置技能点: gnu make linux下.so,.a,.o文件 cmake是一个工具,也可以看成一门语言。 学习cmake最大的障碍在于看不懂全是大写的英文 学习cmake主要参考了《cmake practice》 不过感觉作者有些啰嗦...不重要的东西讲了半天,重要的东西却一带而过。。。表述得也不是特别流畅。。。但是还是感谢作者的分享吧orz... cmake的定位是大型项目构建工具。 目前适用于C/C++/JAVA的项目。 可以不需要自己写makefile文件。 既然cmake可以看做一门语言,那么自然就有语法。 下面只是列举一些常用的。不常用的可以用到的时候再去查。这里也会不定期补充。 cmake的语法中,对于变量大小写敏 …
Read More -
CUDA 编程涉及到在不同的平台上同时运行代码:包含CPU的host 和包含GPU的device. 所以了解host和device的对性能优化是非常重要的。 2.1. Differences between Host and Device Threading resources host 上能同时运行的线程数目比较少(比如24个) device上能同时运行的线程数目比较多(数量级通常为1E3,1E4等) Threads 操作系统必须交换CPU执行通道上和下的线程以提供多线程功能。因此,上下文切换(当交换两个线程时)既慢又昂贵。 相比之下,GPU上的线程非常轻量级。在典型的系统中,成千上万的线程排队等待工作(每个线程有32个线程)。如 …
Read More -
由于发现cuda c++ 的 debug方式和c++ 差别很大,因此打算再开一篇,专门记录一些和error checking 以及debug有关的内容. Error checks in CUDA code can help catch CUDA errors at their source. There are 2 sources of errors in CUDA source code: 1. Errors from CUDA **API** calls. For example, a call to `cudaMalloc()` might fail. 2. Errors from CUDA **kernel** …
Read More -
uodate:有毒吧。kernel中出问题原来是不会报错的。。。。 请教了组里的hust学长orz..、 学到了cuda-memcheck命令和cudaGetLastError来查看问题。。可以参考What is the canonical way to check for errors using the CUDA runtime API? 先放一波资料。 * <del>[An Even Easier Introduction to CUDA](https://devblogs.nvidia.com/even-easier-introduction-cuda/)</del> * …
Read More