C++/CUDA 编程小抄


摘要

  • CMake小抄
  • git小抄
  • cuda编程小抄

CMake小抄

CMake常用功能

CMake常用命令

#//TODO:作用,含义,注意事项(如绝对路径相对路径等)
add_library(hello SHARED ${PROJECT_SOURCE_DIR}/libhello/hello.c)
命令说明
add_definitions(-DFOO -DBAR …)添加预定义宏FOO(和BAR?)相当于VS里的预处理器,
aux_source_directory(. DIR_SRCS)查找当前目录下的所有源文件,并将名称保存到 DIR_SRCS 变量

CMake常用变量

变量名变量说明
PROJECT_NAME返回通过PROJECT指令定义的项目名称
PROJECT_SOURCE_DIR有时候一个项目有多个子目录,包含多个CMakeLists.txt,该变量返回最接近的一个CMakeLists.txt所在目录的地址
CMAKE_SOURCE_DIRCMakeLists.txt的顶级目录地址
PROJECT_BINARY_DIR运行cmake命令的目录,通常是PROJECT_SOURCE_DIR下的build目录
CMAKE_MODULE_PATH定义自己的cmake模块所在的路径
CMAKE_CURRENT_SOURCE_DIR当前处理的CMakeLists.txt所在的路径
CMAKE_CURRENT_LIST_DIR当前文件夹路径
CMAKE_CURRENT_LIST_FILE输出调用这个变量的CMakeLists.txt的完整路径
CMAKE_CURRENT_LIST_LINE输出这个变量所在的行
EXECUTABLE_OUTPUT_PATH生成可执行文件路径
LIBRARY_OUTPUT_PATH生成库的文件夹路径
CMAKE_BUILD_TYPE指定基于make的产生器的构建类型(Release,Debug)
CMAKE_C_FLAGS*.C文件编译选项,如 -std=c99 -O3 -march=native
CMAKE_CXX_FLAGS*.CPP文件编译选项,如 -std=c++11 -O3 -march=native
CMAKE_CURRENT_BINARY_DIRtarget编译目录
CMAKE_INCLUDE_PATH环境变量,非cmake变量
CMAKE_LIBRARY_PATH环境变量
CMAKE_STATIC_LIBRARY_PREFIX静态库前缀, Linux下默认为lib
CMAKE_STATIC_LIBRARY_SUFFIX静态库后缀,Linux下默认为.a
CMAKE_SHARED_LIBRARY_PREFIX动态库前缀,Linux下默认为lib
CMAKE_SHARED_LIBRARY_SUFFIX动态库后缀,Linux下默认为 .so
BUILD_SHARED_LIBS如果为ON,则add_library默认创建共享库
CMAKE_INSTALL_PREFIX配置安装路径,默认为/usr/local
CMAKE_ABSOLUTE_DESTINATION_FILES安装文件列表时使用ABSOLUTE DESTINATION 路径
CMAKE_AUTOMOC_RELAXED_MODE在严格和宽松的automoc模式间切换
CMAKE_BACKWARDS_COMPATIBILITY构建工程所需要的CMake版本
CMAKE_COLOR_MAKEFILE开启时,使用Makefile产生器会产生彩色输出
CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS用来控制IF ELSE语句的书写方式

git小抄

git常用功能

git常见问题

github功能


CUDA编程小抄

cuda库

  • thrust | Thrust是基于标准模板库(STL)的CUDA的C ++模板库。通过Thrust,您可以通过可与CUDA C完全互操作的高级接口,以最少的编程工作来实现高性能并行应用程序。

cuda内存部分

  • CUDA统一内存、零复制内存、锁页内存

CUDA 资料


C++小抄

C++ 离散知识点

  • 在不同源文件可define同一个宏(宏作用域为从#define开始到当前源文件结束)
  • 防止头文件重复包含指的是:防止某个源文件重复包含同一个头文件两次,但是同一个头文件可以同时被不同源文件各包含一次。
  • 类一般在头文件中定义,在类内定义的函数默认是内联(inline)的,而在类内声明,在类外定义的函数则不默认为内联(inline)
  • 头文件内定义的变量会自动被加上extern
  • 在头文件里定义函数的几种方法:
    • 声明类,在类中定义静态成员函数,并在头文件中实现函数。
    • 使用模板函数(其要求声明和定义都在头文件中)(没有试过)
    • 定义为内联函数inline

C++ 语法

  • 负数求余和商都是负数。例如-123 / 10 = -12-123 % 10 = -3
  • string类型前要加std::
  • 定义std::string a="123456", 那么a[a.length() - 1] == '6' 而不是'\0'
  • char a = '' 会报错,因为不能初始化为空字符。至少也要是char a = '\0'
  • 注意:栈stack没有reserve方法。(TODO:C++ prime还是算法设计与分析中似乎有总结哪些结构含有reserve,看一下)
  • 注意vector的size是无符号的。例如vector<int> aa;,当aa.size()为0时,aa.size()-1不是-1而是一个无符号数的最大值。在所以建议以后i<aa.size()-1写为i+1<aa.size()
  • C++中,有符号类型数向右位移有点特殊,向右位移时,最左边补0还是补1好像得看机器具体实现。若总是补0则称为logical shift,若补符号位则称为arithmetic shift,目前C++的编译器似乎都是补符号位(即arithmetic shift),例如 10000000 >> 1 结果为11000000。除了这种特殊情况,其他时候位移空缺的位都补0。(leetcode的C++编译器不能对负数右移也不能左移,不知道为啥,如-1>>1在运行时会报错,参考这里也报错,要把这个弄清楚,否则后序在线笔试时提交代码可能会出错)
  • C++中,有符号数和无符号数在一起进行运算时,首先会将有符号数按照其补码转换为无符号数,再进行运算。(其实可以这么看,机器不认有无符号,全都按照补码来进行计算,最后的结果是补码,按照无符号数的方式解读。)例:
    short a = -1;
    unsigned b = 1;
    if(a < b) printf("a<b");
    else printf("a>b");
    
    结果是"a>b",因为a的补码是全1,被当成无符号数后为65535,那自然大于b。
  • C++变量未初始化的后果。未初始化的全局变量会自动初始化为0,未初始化的局部变量一般为乱码。参考这里。当然我觉得具体情况还得看编译器吧。

C++ 库函数

  • int isalnum ( int c )头文件\<ctype\>,检查一个字符是不是字母或数字(alphanumeric)。
  • int tolower(int c);头文件\<ctype\>,将一个字符转换为小写字符。

相关/参考链接

CMake小抄:

git小抄:

  • https://blog.csdn.net/mengzuchao/article/details/80490256
  • https://www.cnblogs.com/zhuchenglin/p/7128383.html

CUDA编程小抄:

  • a
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值