
c++
xll_bit
这个作者很懒,什么都没留下…
展开
-
【CUDA】Memory Coalescing(内存合并)
内存合并的基础是DRAM Burst。mei当我们从全局内存搬运数据到共享内存或者寄存器时,原创 2021-06-08 16:15:13 · 2235 阅读 · 3 评论 -
【CUDA-C/C++】任意维度矩阵乘
前面已经写过了利用Fortran实现任意维度矩阵乘的CUDA实现,详见:https://blog.youkuaiyun.com/xll_bit/article/details/117551476?spm=1001.2014.3001.5501,今天更新一个原创 2021-06-08 14:32:46 · 573 阅读 · 0 评论 -
【tmux】 相关操作
窗口常用命令假设命令前缀为默认的 : Ctrl+b{前缀} c 创建新窗口{前缀} n 选择下一个窗口{前缀} p 选择前一个窗口{前缀} l 最近一次活跃窗口之间进行切换{前缀} 0~9 选择几号窗口{前缀} , 重命名窗口{前缀} . 更改窗口的编号,但只能更改成未使用的编号,所以要交换窗口的话,得更改多次进行交换{前缀} & 关闭窗口{前缀}...原创 2021-04-19 15:33:31 · 326 阅读 · 0 评论 -
【openMP】single (主从模式)
omp single指定在当前的并行域里当前代码块只被执行一次(任意线程均可)用法: #pragma omp single[clause,clause, ...] 参数: clause Can be one or more of the following clauses: copyprivate(list) Provides a mechanism to use a privat..原创 2020-10-21 14:34:15 · 3094 阅读 · 0 评论 -
【OpenMP】flush(主从模式)
常规对flush制导语句的解释为:用以标记一个同步点,用以确保所有的线程看到一致的存储器视图。这样的解释对一般人来讲很难理解,其实它的功能就是强制刷新每个线程的临时视图,使其和内存视图保持一致,即:使线程中缓存的变量值和内存中的变量值保持一致。一般在使用OpenMP的时候也很少遇到flush语句。这是因为flush在下面几种情况下会隐含运行(nowait子句除外):Barriercritical:进入与退出部分ordered:进入与退出部分parallel:退出部分for:退出部...原创 2020-09-29 21:45:38 · 1492 阅读 · 2 评论 -
【leetcode】814. Binary Tree Pruning
二叉树剪枝,将不包含值为1的枝剪掉。运用递归,不断迭代到最低一层查看是否满足条件即可。编程的时候需要注意,如果用指针传递时,由于要修改原来二叉树的值,因此在传递节点的时候要用指向指针的指针(二重指针),当使用引用的时候则没有这种问题。二重指针的用法可参考:https://blog.youkuaiyun.com/xll_bit/article/details/103496161class Sol...原创 2020-03-09 12:59:16 · 173 阅读 · 0 评论 -
【C++】 函数返回vector
当程序中要返回vector时,一般做法会将函数直接定义为:vector<T> func(){ //TODO}而为了提高执行效率,可以直接返回该vector的引用,这样会减少vector的多次拷贝。具体写法如下:vector<T>& func(){ //TODO}但要注意的是,该要返回的vector不能是函数内部的局部变量。...原创 2020-03-04 15:52:30 · 20902 阅读 · 1 评论 -
【C++】对指针形参及指针数组分配内存空间
在使用指针作为函数形参的时候,和数组首地址作为函数形参的用法一致。但指针和数组有一个重要区别是指针指向的地址可能为空,而数组的首地址一定会指向一段地址空间的。因此在使用指针作为函数形参,并在函数内申请内存空间时,传入的应该为指针的地址。而在释放该地址空间时,直接传该指针即可。另外还要区分指针数组和数组指针的区别。运算优先级为 () > [] > *#include <...原创 2019-12-11 17:24:51 · 2722 阅读 · 0 评论 -
【C++】VS Code 远程连接服务器并进行调试
最近在服务器上使用gdb调试烦了,就想换换使用vscode试试,下面是具体的配置步骤。一,ssh远程配置这一步网上的帖子都比较多,也比较详细,下面只做一简单演示。1,在本地下载vscode。2,打开vscode,安装remote-ssh插件,具体安装步骤看图。1)鼠标选中左侧边栏的extensions(圈1)2)在搜索框中搜索 ssh(圈2)3)找到 remote-ss...原创 2019-12-05 17:34:20 · 3728 阅读 · 0 评论 -
【C++】程序性能分析及可视化
一,性能分析工具的使用(gprof)编译需要加-pg选项 运行可执行文件,会自动生成生成gmon.out 文件,命令格式如下: ./a.out #a.out指可执行文件 使用gprof生成性能分析结果,命令格式如下:gprof ./a.out gmon.out >out.log//命令中 a.out为可执行文件;gmon.out为第二步自动生成的结果;ou...原创 2019-11-29 14:20:11 · 2222 阅读 · 0 评论 -
【MPI】Connon矩阵乘(二)
Connon矩阵乘是通过循环移位,通过相邻节点上的数据进行交换,然后最终实现矩阵乘法。特点是每个节点占用空间比较少,传输比较少。本篇以MPI_Comm_cart为循环移位基础。以下为具体做法。以MPI_Comm_split循环移位为基础的请参考:https://blog.youkuaiyun.com/xll_bit/article/details/103113272MPI_Comm_split移位...原创 2019-11-17 22:09:59 · 371 阅读 · 0 评论 -
【MPI】Connon矩阵乘(一)
Connon矩阵乘是通过循环移位,通过相邻节点上的数据进行交换,然后最终实现矩阵乘法。特点是每个节点占用空间比较少,传输比较少。本篇以MPI_Comm_split为循环移位基础。以下为具体做法。以MPI_Comm_cart循环移位为基础的请参考:https://blog.youkuaiyun.com/xll_bit/article/details/103114386MPI_Type_vector和...原创 2019-11-17 21:21:43 · 506 阅读 · 0 评论 -
【MPI】当MPI_Scatterv遇上MPI_Type_vector
在写按块矩阵乘时,会遇到将矩阵按块划分,然后分发给各个节点。此时方便的做法是定义MPI_Type_vector数据类型,表示矩阵的一小块,然后通过MPI_Scatter将矩阵散发到各个节点。但通过简单的MPI_Scatter进行操作时,一直出现错误,最终发现是我把MPI_Scatter想的太简单了。原做法://row_block_data为每块的行数(分块矩阵行列数相同)//N代表原始...原创 2019-11-17 20:41:37 · 930 阅读 · 0 评论 -
【MPI】 创建新组并使用组通信
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 0(0,1,2,3) 1(0,1,2,3) 2(0,1,2,3) 3(0,1,2,3) 4(4,5,6,7) 5(4,5,6,7) 6 7 8 9 10 11 12(12...原创 2019-11-15 20:53:54 · 2305 阅读 · 0 评论 -
【c++】 memcpy 类数组
在写程序的时候,需要对类数组中的值从数组后面移动到数组前面,但类中成员变量包含vector等容器,因此就写了一个测试程序验证了一下,当类数组在移动的过程中,类容器变量是否发生移动。#include <iostream>#include <string.h>#include <stdlib.h>#include <set>#include...原创 2019-11-11 17:48:08 · 1039 阅读 · 0 评论 -
【c++】类中包含自身类对象的set
c++中,类中自身类对象不能做自己的类成员,但可以做静态数据成员,引用数据成员,以及vector,set中的类型成员。如下面代码中定义的类。#include<iostream>#include<set>using namespace std;class A{public: int a,b,c; set<A> subA; A(){};...原创 2019-09-25 11:49:42 · 1945 阅读 · 0 评论 -
【c++】 自定义排序和比较函数(适用于set,sort等需要排序/去重的地方)
当对自定义类(如下面的代码)进行排序或者将自定义类放入set结构时,就需要自定义比较函数,否则会报错。对基本数据类型排序或者放入set时不需要此函数,因为是STL中自定义了比较函数,会默认调用,无需自定义。#include<iostream>#include<set>using namespace std;class A{public: int a,b,c...原创 2019-09-25 11:27:32 · 1667 阅读 · 3 评论