
简介
该用户还未填写简介
擅长的技术栈
可提供的服务
暂无可提供的服务
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 <
__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 };//维度不确定的
高斯卷积核具有可分离的性质,因此可以通过以下方法计算二维高斯卷积:构造一个一维高斯卷积核,将原始二维矩阵分别以行主序与列主序,与一维卷积核做卷积计算,得到的结果就是目标二维高斯卷积的结果。本篇按照上述描述的思路实现了可分离的二维高斯卷积计算,并在此基础上对计算的过程分解与重构,挖掘实现的并行性。基线版二维高斯卷积为了让运行时间更加稳定,增加函数的执行次数至1000#define CONV2DREP
在上一篇博客CPU性能优化系列——矩阵转置(一)访存方式造成的性能差异中,为了说明CPU缓存一致性算法对写内存和读内存的差异,只是单纯构造一个内存操作对称的矩阵转置实现方式,其中分块与内存访问的步长并非是最合理的。本篇将基于上一篇博客的实现方式,根据L1 Data Cache的结构,对访问缓存方式做进一步优化。代码实现...
void GaussSmoothCPU3DOptZYXSplitZIntrinsic(float* pSrc, int iDim[3], float* pKernel, int kernelSize[3], float* pDst, float* pBuffer){//计算结果正确//16 thread dynamic GaussSmoothCPU3DOptZYXSplitZIntrinsic c
打算写一个矩阵转置分别在CPU和GPU平台的性能优化的系列,在最开始把测试环境等一些基本情况交代清楚。机器配置为了方便性能对比,介绍一下我的测试机器配置。CPU Intel 9900k,程序主要与主频和缓存密切相关,参考如下:优化情况CPU平台上对(1024 * 1024)1M大的矩阵转置,执行情况如下:优化手段执行时间(ms)原始2.68945写内存连续1.5498写内存连续+分块0.60546
void GaussSmoothCPU3DOptZYXSplitZIntrinsic(float* pSrc, int iDim[3], float* pKernel, int kernelSize[3], float* pDst, float* pBuffer){//计算结果正确//16 thread dynamic GaussSmoothCPU3DOptZYXSplitZIntrinsic c
本篇详细介绍编译器提供Intrinsic函数的具体功能,为下一篇通过Intrinsic函数实现矩阵转置做铺垫。Intrinsic函数详解__m128i _mm_unpacklo_epi8 (__m128i a, __m128i b)#include <emmintrin.h>Instruction: punpcklbw xmm, xmmCPUID Flags: SSE2Descript
本篇基于可分离卷积的性质,按照 X Y Z的顺序,依次计算每个维度的一维卷积。代码实现因为是按照X Y Z的计算顺序,因此只能够在计算X维度的卷积时,复用之前实现的一维卷积计算函数。Y维度的计算是将一个Z平面上的二维数据中每行与卷积核中一个点相乘,并将31个点的卷积核计算出的结果累加至一行,更新到中间缓存的目标位置。Z维度的计算是将一个Z平面的二维数据和卷积核中的一个点相乘,并将31个点的卷积核计
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








