logo
publist
写文章

简介

该用户还未填写简介

擅长的技术栈

可提供的服务

暂无可提供的服务

C++性能优化系列——矩阵转置(六)Intrinsic转置实现与Core Bound优化

namespace TTranspose {#define NROW 1024#define NCOL 1024#define NSLICE 1024*1024#define REPEAT 1024//#define REPEAT 1void Verify(unsigned char* pSource, unsigned char* pTarget){for (int i = 0 ; i <

#c++
CUDA性能优化系列——Kmeans算法调优(一)

__global__ void k_kmeans(float* d_src, int srcsize, int dim, float* d_cluster, int clustersize, float* d_dst){extern __shared__ float sm_cluster[];float regData[4] = { 0.0f,0.0f, 0.0f, 0.0f };//维度不确定的

C++性能优化系列——3D高斯核卷积计算(五)2D卷积分离计算

高斯卷积核具有可分离的性质,因此可以通过以下方法计算二维高斯卷积:构造一个一维高斯卷积核,将原始二维矩阵分别以行主序与列主序,与一维卷积核做卷积计算,得到的结果就是目标二维高斯卷积的结果。本篇按照上述描述的思路实现了可分离的二维高斯卷积计算,并在此基础上对计算的过程分解与重构,挖掘实现的并行性。基线版二维高斯卷积为了让运行时间更加稳定,增加函数的执行次数至1000#define CONV2DREP

C++性能优化系列——矩阵转置(二)循环分块优化缓存访问

在上一篇博客CPU性能优化系列——矩阵转置(一)访存方式造成的性能差异中,为了说明CPU缓存一致性算法对写内存和读内存的差异,只是单纯构造一个内存操作对称的矩阵转置实现方式,其中分块与内存访问的步长并非是最合理的。本篇将基于上一篇博客的实现方式,根据L1 Data Cache的结构,对访问缓存方式做进一步优化。代码实现...

#c++#缓存
C++性能优化系列——3D高斯核卷积计算(十二)Intrinsic实现

void GaussSmoothCPU3DOptZYXSplitZIntrinsic(float* pSrc, int iDim[3], float* pKernel, int kernelSize[3], float* pDst, float* pBuffer){//计算结果正确//16 thread dynamic GaussSmoothCPU3DOptZYXSplitZIntrinsic c

C++性能优化系列——百倍加速比的矩阵转置性能调优

打算写一个矩阵转置分别在CPU和GPU平台的性能优化的系列,在最开始把测试环境等一些基本情况交代清楚。机器配置为了方便性能对比,介绍一下我的测试机器配置。CPU Intel 9900k,程序主要与主频和缓存密切相关,参考如下:优化情况CPU平台上对(1024 * 1024)1M大的矩阵转置,执行情况如下:优化手段执行时间(ms)原始2.68945写内存连续1.5498写内存连续+分块0.60546

#缓存
C++性能优化系列——3D高斯核卷积计算(十一)优化内存访问模式

void GaussSmoothCPU3DOptZYXSplitZIntrinsic(float* pSrc, int iDim[3], float* pKernel, int kernelSize[3], float* pDst, float* pBuffer){//计算结果正确//16 thread dynamic GaussSmoothCPU3DOptZYXSplitZIntrinsic c

C++性能优化系列——矩阵转置(五)Intrinsic函数详解

本篇详细介绍编译器提供Intrinsic函数的具体功能,为下一篇通过Intrinsic函数实现矩阵转置做铺垫。Intrinsic函数详解__m128i _mm_unpacklo_epi8 (__m128i a, __m128i b)#include <emmintrin.h>Instruction: punpcklbw xmm, xmmCPUID Flags: SSE2Descript

#c++
C++性能优化系列——3D高斯核卷积计算(八)3D高斯卷积

本篇基于可分离卷积的性质,按照 X Y Z的顺序,依次计算每个维度的一维卷积。代码实现因为是按照X Y Z的计算顺序,因此只能够在计算X维度的卷积时,复用之前实现的一维卷积计算函数。Y维度的计算是将一个Z平面上的二维数据中每行与卷积核中一个点相乘,并将31个点的卷积核计算出的结果累加至一行,更新到中间缓存的目标位置。Z维度的计算是将一个Z平面的二维数据和卷积核中的一个点相乘,并将31个点的卷积核计

C++性能优化系列——3D高斯核卷积计算(十)合并多线程并行区

void GaussSmoothCPU3DOptZYX(float* pSrc, int iDim[3], float* pKernel, int kernelSize[3], float* pDst, float* pBuffer){//计算结果正确//执行时间 16 dynamic GaussSmoothCPU3DOptZYX cost Time(ms) 338.4//16 static Ga

#缓存
    共 18 条
  • 1
  • 2
  • 请选择