自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(9)
  • 收藏
  • 关注

原创 硬核!!!逐步带你优化矩阵乘1-openmp+sse+访存优化

4、我们发现b矩阵在运算过程中取数据的地址是不连续的,在最底层的循环中,随着k不断加1,b不断的在内存中跳跃。2、现代计算机是有多个核的,下面我们使用openmp并行加速,注意使用多线程要注意能否保证原子性(多个线程不对同一个地址的数据进行更改操作,如果有的话考虑应对方法,改变循环顺序,使用原子操作,避免多个线程“打架”)。5、我们进行修改,让线程按行展开,只需要把i的循环提前上去,如图每个线程负责自己的一行直到累加完算完这一行,不去算其它行,互不打扰,线程内负责数的自增,有先后顺序。

2023-07-21 14:52:27 543 1

原创 SSE学习帖子1—部分指令

mm_set1_ps(3.3f) ------------四个地址都为3.3。_mm_setzero_ps() ------------四个地址都为0。_mm_add_ps(v1, v2) -----四位都相加。

2023-07-21 00:39:10 145 1

原创 多线程优化—Openmp和矢量优化—SEE

注意:由于编译器可能会自动对代码进行矢量化,因此1和2相比有可能没有性能提升,比如把除以a变成乘以a,1的速度甚至略快于2。虽然好用但不能无脑用,循环中的计算量过小反而速度会变慢,因为会导致启动[和停止]线程的开销高于非线程情况。对于x86-64平台可以使用AVX和SSE进行矢量优化(寄存器中多个数进行同种操作,矢量化计算和访存)开启多线程+矢量化最快了!例如:g++ -fopenmp test3.cpp -o test3。注意:编译时开启 -fopenmp。

2023-07-16 02:59:51 193 1

原创 CUDA-共享内存优化

注:这里的n传入设定的就是512,如果blockDim设定1024就local_num[1024]后面也相应改一下,下面的代码没有用原子操作,用的共享内存,每一个block都有一个local_num,其中每个其中线程可以访问,每一个线程都有一个自己的temp。

2023-07-12 18:01:28 114 1

原创 CUDA-原子操作及优化

1、为了避免不同线程同时对数据进行读取/运算/写回导致结果错误,原子操作可以避免这种错误,当前面线程完成这三步操作后,后面的线程才会运行。返回旧值,原子操作非常耗时,因为是串行的,,新版本cuda很聪明会优化,所以有时候如下这么写也没问题。原子的判断是否相等,相等则写入:atomicCAS(dst, cmp, src)加法:atomicAdd(dst, src) : *dst += src;原子写入并读取旧值:atomicExch()按位异或:atomicSubXor()按位异或:atomicMin()

2023-07-12 17:50:13 316 1

原创 cuda学习笔记-向量加法

(2)cudaMemcpy(拷贝位置, 原数据位置, 大小, 拷贝方式:HostToDevice还是DeviceToHost)。(4)cudaMemcpy():注意这句自带同步操作,否则要添加cudaDeviceSynchronize()。(1)cudaMalloc():分配GPU内存,注意第一个参数是二级指针,第二个参数是分配内存大小。(3)add_gpu(传入参数)。(5)__global__:Host端调用Device执行。

2023-07-12 09:39:31 65 1

原创 深度学习推理框架学习笔记-环境

数学计算库使用:armadillo 12.4(底层是OpenBlas,首先要下载OpenBlas之后才能编译)2、与numpy和opencv不同armadillo内存空间是按照列的顺序在内存依次排布。注意1、fmat二维矩阵是float类型数据,mat是double。操作系统:Ubuntu20.04。高性能计算库:Openmp。开发语言:C++17。

2023-07-04 22:39:34 81

原创 算法基础-归并排序

3、合并两个排好序的区间 (重点)(注意:长度为2可以看做两个排好序长度为1的序列)1、确定分界点 mid = (l + r)/2。

2023-07-03 23:03:46 32 1

原创 算法基础-快速排序

1、确定分界点 (随机,左侧点,右侧点,中间点等)

2023-07-01 14:37:05 28

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除