首页 > 其他分享 >A NAIVE CON2D CPU IMPL

A NAIVE CON2D CPU IMPL

时间:2023-04-07 14:47:24浏览次数:49  
标签:start int NAIVE float ++ CON2D printf IC CPU

/******************************************************************************

Welcome to GDB Online.
GDB online is an online compiler and debugger tool for C, C++, Python, Java, PHP, Ruby, Perl,
C#, OCaml, VB, Swift, Pascal, Fortran, Haskell, Objective-C, Assembly, HTML, CSS, JS, SQLite, Prolog.
Code, Compile, Run and Debug online from anywhere in world.

*******************************************************************************/
#include <iostream>
#include <cstdlib>

using namespace std;

size_t N = 1, IC = 3, IH = 2, IW = 2;
size_t OC = 2, FH = 2, FW = 2;
size_t stride = 1, pad = 1;

size_t OH = (IH + 2 * pad - FH) / stride + 1;
size_t OW = OH;


void assign(float *ptr, int a, int b, int c, int d) {
    int v = 1;
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < b; j++) {
            for (int p = 0; p < c; p++) {
                for (int q = 0; q < d; q++) {
                    *(ptr + i*(b*c*d) + j*(c*d) + p *(d) + q) = (v)%4;
                    v++;
                }
            }
        }
    }
}

void printout(float *ptr, int a, int b, int c, int d) {
    for (int i = 0; i < a; i++) {
        for (int j = 0; j < b; j++) {
            for (int p = 0; p < c; p++) {
                for (int q = 0; q < d; q++) {
                    printf("%.2f ", *(ptr+i*b*c*d+j*c*d+p*d+q));
                }
                printf("\n");
            }
        }
    }
    printf("\n");
}

// NxICxIHxIW, OCxICxFHxFW, NxOCxOHxOW
void
direct_conv (float *feat, float *weight, float *out)
{
    for (int n = 0;  n < N ; n++) {
        for (int oc =0; oc < OC; oc++) {
            for (int oh = 0 ; oh < OH; oh++) {
                for (int ow = 0;ow < OW; ow++) {
                    float value = 0;
                    auto ih_start = oh*stride-pad;
                    auto iw_start = ow*stride-pad;
                    for (int ic = 0; ic < IC; ic++) {
                        for (int fh = 0; fh < FH; fh++) {
                            for (int fw = 0; fw <  FW; fw++) {
                                
                                float f = 0;
                                if (ih_start+fh >= 0 && iw_start +fw>=0 && ih_start+fh < IH && iw_start+fw < IW) {
                                    f = *(feat + n *(IC*(IH)*(IW)) + ic*((IH) * (IW)) + (ih_start + fh)*(IW) + iw_start+fw);
                                }
                                auto w = *(weight + oc*(IC*FH*FW) +ic*(FH*FW) + fh*FW+fw);
                                value += f*w;
                                printf("feat@{%d,%d,%d,%d}, val:%f\n", n,ic,ih_start+fh,iw_start+fw,f);
                                printf("weight@{%d,%d,%d,%d}, val:%f\n", oc,ic,fh,fw,w);
                            }
                        }
                    }
                    *(out + n*(OC*OH*OW) + oc*(OH*OW) + oh*OW + ow) = value;
                    
                }
            }
        }
    }
}

int
main ()
{

  float *feat = (float *) malloc (sizeof (float) * N * IC * (IH) * (IW));
  assign(feat,N,IC,IH,IW);
  printf("feat\n");
  printout(feat,N,IC,IH,IW);
  printf("\n");
  printf("weight\n");
  float *weight = (float *) malloc (sizeof (float) * OC * IC * FH * FW);
  assign(weight, OC,IC,FH,FW);
  printout(weight,OC,IC,FH,FW);
  printf("\n");
  float *out = (float *) malloc (sizeof (float) * N * OC * OH * OW);
  direct_conv (feat, weight, out);
  printf("out\n");
  printout(out,N,OC,OH,OW);
  printf("\n");
  return 0;
}

标签:start,int,NAIVE,float,++,CON2D,printf,IC,CPU
From: https://www.cnblogs.com/ijpq/p/17296058.html

相关文章

  • 安装wsl的必备操作——开启CPU虚拟化——WslRegisterDistribution failed with error_
    参考:https://www.cnblogs.com/smdtxz/p/16837946.htmlhttps://www.cnblogs.com/wenonly/p/17206040.htmlhttps://blog.csdn.net/qq_41460654/article/details/118026986  ======================================================  因为实验室需要炼丹,而炼丹要用ubun......
  • GaussDB(DWS)集群中寻找节点CPU占用高的语句
    摘要:本文主要通过实例讲解如何通过gs_cpuwatcher.sh脚本寻找CPU占用高语句。本文分享自华为云社区《GaussDB(DWS)gs_cpuwatcher.sh脚本如何寻找CPU占用高语句》,作者:fighttingman。【工具名称】gs_cpuwatcher【功能描述】1.寻找集群内节点占用CPU高的语句【使用场景】CPUsys使用......
  • GaussDB(DWS)集群中寻找节点CPU占用高的语句
    摘要:本文主要通过实例讲解如何通过gs_cpuwatcher.sh脚本寻找CPU占用高语句。本文分享自华为云社区《GaussDB(DWS)gs_cpuwatcher.sh脚本如何寻找CPU占用高语句》,作者:fighttingman。【工具名称】gs_cpuwatcher【功能描述】1.寻找集群内节点占用CPU高的语句【使用场景】CP......
  • 如何获取 Android 设备的CPU核数、时钟频率以及内存大小
    DeviceYearClass的主要功能是根据CPU核数、时钟频率以及内存大小对设备进行分级。下表是Facebook公司提供的分级标准,其中Year栏表示分级结果。以下类就是从Facebook的开源项目DeviceYearClass中拿出来的packagecom.yirui.youbao.util;importandroid.annotati......
  • 保证高效写入查询的情况下,如何实现 CPU 资源和磁盘 IO 的最低开销?
    从《写入性能:TDengine最高达到InfluxDB的10.3倍,TimeScaleDB的6.74倍》、《查询性能:TDengine最高达到了InfluxDB的37倍、TimescaleDB的28.6倍》两篇文章中,我们发现,TDengine不仅在写入和查询性能上超越了InfluxDB和TimescaleDB,在数据处理过程的资源消耗也比两......
  • Win10(CPU)+ Anaconda3 + python3.9安装pytorch
    Win10(CPU)+Anaconda3+python3.9安装pytorch1.安装Anaconda31.1下载Anaconda3可以在官网下载Anaconda3-2022.05-Windows-x86_64.exe,这个版本对应的是python3.9。1.2安装Anaconda3此步骤比较简单,双击.exe文件,一步一步执行即可,有不确定的可以自行百度,教程比较多,但基本一致......
  • 混沌工程之ChaosMesh使用之一模拟CPU使用率
    今天来玩一下混沌工程的开源工具之一的ChaosMesh。ChaosMesh的目标是要做一个通用的混沌测试工具。ChaosMesh是要和k8s结合使用的,其中用了云原生的能力。 ChaosMesh的基本工作流原理图:从原理图上可以看出大概的工作流程:用户用yaml文件或k8s客户端创建更新Chaos对象。Chaos-mesh......
  • 为什么是至强Xeon处理器当做服务器CPU?他和普通台式CPU的区别
    为什么是至强Xeon处理器当做服务器CPU?他和普通台式CPU的区别相同的普通台式机CPU架构,Xeon处理器是高度受欢迎由于一些高级特性,比如更高的核心价值,支持更多的RAM,大的缓存内存和机器检查体系结构能够提供企业级的可靠性,可用性和可服务性特征负责处理硬件异常。现在,我们将回答......
  • 性能分析之dubbo性能参数导致单cpu高
    今天记录一个小问题。问题不大,也没什么分析的逻辑可以讲的。但是想着比较典型,所以就写一写。某年某月的某一天,就像一张破碎的脸......不对,串台了。这一日,一个朋友发来个问题。听起来是个问题。一个线程忙,这种情况应该比较好处理吧。再看一下CPU的状态是什么样,记住这一步是看进程......
  • Python 多线程死循环挂服务器时CPU占用过高问题
    我的某个程序里有这样一段代码,把程序挂在服务器爬取信息,因此用到死循环,同时又需要进行三个任务,于是使用了多线程。刚开始在死循环部分并没有加time.sleep(60),于是它一直在for循环,同时会进行.is_alive()(不确定这个消耗大不大),但总之这使得CPU占用过高。而加上sleep之后,直接就降下......