跳转至

笔记

XeonScalable

Skylake-SP微架構 Mesh Interconnect Architecture

首次嘗試採用了全新網格互連架構(Mesh Interconnect Architecture),以取代前面幾代微架構採用的環狀(Ring)互連設計,可以在增加核心數的同時,也能夠維持很快存取資料,以及支援更高記憶體頻寬的需求。

Caching and Home Agent

The LLC coherence engine and Home agent (CHA) merges the caching agent and home agent (HA) responsibilities of the chip into a single block. In its capacity as a caching agent the CHA manages the interface between the core the IIO devices and the last level cache (LLC).

NUMA架构、非統一記憶體存取架構 (Non-uniform memory access)中最重要的两个部分是:QPI architecture和memory subsystem。

LLC(一般指L3 Cache)是memory subsystem中最为重要的一个组成部分。Sandy Bridge架构之后,每个core都有自己的LLC(last level cache),然后通过一个ring on-die Interconnect来联通。

Snoop Filter

SnoopFilter,探听过滤器是为了在多核心乃至多处理器的协同工作时,保持缓存一致性(CacheCoherent)。

在统一总线架构中,一个处理器的所有操作都可以被其他处理器看到,因此处理器可以利用一种叫做Snoop(侦听)的操作来监视总线上的缓存操作指令,当侦听到其他处理器的操作涉及到本处理器上的共享缓存页面的时候,就可以进行相关的操作来保持缓存一致性(通常,就是使本地的缓存页面变为Invalid无效)。

Skylake-SP core

如图,在Skylake core的基础上加入了AVX和额外的L2 cache

Skylake core

可以看见寄存器都在绿色的Scheduler里

FMA指令集

FMA指令集(英语:Fused-Multiply-Add,即积和熔加运算)是x86架构微处理器上的指令集。FMA指令集是128位和256比特的流式单指令流多资料流扩展集(SSE)指令集,以进行积和熔加运算。[1]FMA指令集允许创建新的指令并有效率地执行各种复杂的运算,可结合乘法与加法运算(即进行积和熔加运算),通过单一指令执行多次重复计算,从而简化程序,从而使系统能快速执行绘图、渲染、照片着色、立体音效,及复杂向量运算等计算量大的工作。

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

架构的手册 https://github.com/RRZE-HPC/likwid/wiki/SkylakeSP#fixed-purpose-counters

ServerLogin

ip a输出的含义

ip a = ip address 1. lo是linux中的虚拟网络接口 同一台机器的不同进程进行通信时会用到。实现了同一台机器的进程之间的socket通信。虚拟网络接口不需要驱动程序。 1. link/ether是二层协议 mac地址: ac:1f:6b:8a:e4:ba 广播地址:ff:ff:ff:ff:ff:ff 3. inet(v4)是三层协议 ip地址:202.38.73.26/24 广播地址:202.38.73.255 4. inet6是三层协议 ipv6地址:fe80::ae1f:6bff:fe8a:e4ba/64

名词解释

  1. LOWER_UP 是物理层链路标志(网络层以下的层,IP 一般位于此层)。 LOWER_UP 表示插入了以太网电缆并且设备已连接到网络。
  2. LOOPBACK 接口不与其他主机通信。 通过它发送的所有数据包都将被返回,只能接收被退回的数据包。
  3. BROADCAST——该设备具有向共享同一链路的所有主机发送数据包的功能。一个典型的例子是以太网链路。
  4. POINTOPOINT——链路只有两端,每一端连接一个节点。发送到此链接的所有数据包都将到达对等方,我们收到的所有数据包都来自这个对等方。
  5. NBMA 如果 LOOPBACK、BROADCAST 和 POINTOPOINT 均未设置,则假定接口为 NMBA(非广播多路访问)。这是最通用的设备类型,也是最复杂的设备类型,因为连接到 NBMA 链接的主机无法在没有额外配置信息的情况下发送给任何人。
  6. MULTICAST -- 是一个咨询标志,指示接口知道多播,即将数据包发送到相邻节点的某个子集。广播是多播的一种特殊情况,其中多播组由链路上的所有节点组成。需要强调的是,软件不得将缺少此标志解释为无法在此接口上使用多播。根据定义,任何 POINTOPOINT 和 BROADCAST 链路都是多播的,因为我们可以直接访问所有邻居,因此可以直接访问它们的任何部分。当然,由于费用高,不建议在纯广播链路上使用高带宽组播传输,但并非严格禁止。
  7. the loopback “lo,” the ethernet以太网(以太网是一种计算机局域网技术) “eth0,” and the WiFi “wlan0.”
  8. mtu 1500:``maximal transfer unit''最大传输单位为1500
  9. qdisc :``queuing discipline''显示了接口上使用的排队算法。
  10. noqueue 表示该接口不排队任何东西,
  11. noop 表示该接口处于黑洞模式,即发送给它的所有数据包都被立即丢弃。
  12. mq 调度器做两件事: 将设备 TX 队列作为类,允许将不同的 qdiscs 附加到它们,这些 qdiscs 被嫁接到 TX 队列 当前所有设备队列根 qdiscs 的累积统计信息 它默认用于多队列设备而不是常规的 pfifo_fast qdisc,但也可以手动附加以在附加非多队列(共享)qdisc 后恢复多队列行为。
  13. state UP:网络接口已启动
  14. group default:接口组
  15. qlen 1000:传输队列长度
  16. scope global eth0: 任何地方有效
  17. scope link: 只在这个设备有效
  18. scope global dynamic mngtmpaddr noprefixroute 大概是动态的时刻变化来保证隐私的
  19. valid_lft forever: 有效生命周期
  20. preferred_lft forever: 首选寿命

其他名称解释

接口标志汇总在尖括号中: 1. PROMISC——设备监听链路上的所有流量并将其提供给内核,即使这些流量不是发往我们的,不是广播的,也不是发往我们所属的多播组的。 通常这种模式只存在于广播链路上,用于网桥和网络监控。 2. ALLMULTI -- 设备接收在链路上徘徊的所有多播数据包。 此模式由多播路由器使用。 3. NOARP——这个标志与其他标志不同。 它没有不变的值,其解释取决于所涉及的网络协议。 通常,它表示设备不需要地址解析,并且软件或硬件知道如何在没有协议栈任何帮助的情况下传送数据包。 4. DYNAMIC -- 是一个咨询标志,指示接口是动态创建和销毁的。 5. SLAVE——这个接口绑定到一些其他接口以共享链接容量。

广播地址是什么

网络中的每个机器的网卡都接收所有的包,而网络层以后就只接收两种包了, 一种是目标地址是自己的,另外一种就是目标地址是广播地址的, 广播地址是你的网络号和决定的,除了网络号部分的地方全是1(二进制的 1)即可 举例: 你的ip是192.168.1.1 掩码是255.255.255.0 那么你的网络号是192.168.1 而你的广播地址就是:192.168.1.255 了。 那么你的操作系统会把发向 192.168.1.1 和 192.168.1.255 的包接收下来处理,那么发送 这个广播消息的机器就是利用“广播地址在子网中传播信息”了。

什么情况下能访问私有地址?

处于同一个网关下

怎么判断网络处于同一个网关下

想判断两个ip地址是不是在同一个网段,只需将ip地址与子网掩码做与运算,如果得出的结果一样,则这两个ip地址是同一个子网当中。

网关、路由器、三层交换机是什么,区别

网关

网关是一个大概念,不具体特指一类产品,只要连接两个不同的网络的设备都可以叫网关;而‘路由器’么一般特指能够实现路由寻找和转发的特定类产品,路由器很显然能够实现网关的功能。

换句话说,路由器可以实现网关的功能,但是路由器功能不仅仅是实现网关;网关可以由路由器实现,但是也不仅仅是由路由器实现

与网桥只是简单地传达信息不同,当信息到达网关以后,网关要对信息重新进行加工,以适应目的系统的需求。

交换机

交换机:工作在数据链路层,原理等同于多端口网桥。作用是连接数个相同网段的不同主机,减少网内冲突,隔离冲突域。利用存储转发和过滤技术来从物理上分割网段。

路由器(Router)

是连接因特网中各局域网、广域网的设备,是用于连接多个逻辑上分开的网络,所谓逻辑网络是代表一个单独的网络或者一个子网。

当数据从一个子网传输到另一个子网时,可通过路由器的路由功能来完成。

因此,路由器具有判断网络地址和选择IP路径的功能,它能在多网络互联环境中,建立灵活的连接,可用完全不同的数据分组和介质访问方法连接各种子网,路由器只接受源站或其他路由器的信息,属网络层的一种互联设备。它会根据信道的情况自动选择和设定路由,以***路径,按前后顺序发送信号。

路由器和交换机的区别

路由和交换机之间的主要区别就是交换机发生在OSI参考模型第二层(数据链路层),而路由发生在第三层,即网络层。这一区别决定了路由和交换机在移动信息的过程中需使用不同的控制信息,所以说两者实现各自功能的方式是不同的。

chivier服务器动态公网IP说法存疑

服务器开机的时候也没有连wlt,也有IP

服务器IP到底是不是内网

看ip a可以判断

修改DNS服务器,从外面能不能访问到内网

并不能,DNS服务器只是域名与IP地址的映射,你需要链接到网关才能找到内网ip

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

https://netbeez.net/blog/linux-interface-information/

http://linux-ip.net/gl/ip-cref/ip-cref-node17.html

网络所属网关判断 https://network.51cto.com/art/201901/591192.htm

https://blog.csdn.net/miracleon/article/details/102250801

IPCC Preliminary SLIC Analysis part3 : Hot spot analysis

vtune hotspots

vtune threading

GUN profile gprof + gprof2dot graphviz

g++ -pg -g -std=c++11 SLIC.cpp -o SLIC
./SLIC # generate gmon.out
less gmon.out
    "gmon.out" may be a binary file.  See it anyway?
gprof ./SLIC
gprof ./SLIC|  /home/shaojiemike/github/isc21-gpaw/LogOrResult/profile/gprof2dot.py -n0 -e0 | dot -Tpng -o output.png
没什么用

接下来

  1. 向量化
  2. 并行化

什么时候OpenMP并行,什么时候MPI并行

根据具体资源情况来,貌似是一个节点,那可以从OpenMP入手

自动并行化

Intel编译器的自动并行化功能可以自动的将串行程序的一部分转换为线程化代码。进行自动向量化主要包括的步骤有,找到有良好的工作共享(worksharing)的候选循环;对循环进行数据流(dataflow)分析,确认并行执行可以得到正确结果;使用OpenMP指令生成线程化代码。

/Qparallel:允许编译器进行自动并行化

/Qpar-reportn:n为0、1、2、3,输出自动并行化的报告

说明:/Qparallel必须在使用O2/3选项下有效

c++向量化怎么实现

什么是向量化

所谓的向量化,简单理解,就是使用高级的向量化SIMD指令(如SSE、SSE2等)优化程序,属于数据并行的范畴。

如何对代码向量化

向量化的目标是生成SIMD指令,那么很显然,要对代码进行向量化,

第一是依靠编译器来生成这些指令;

第二是使用汇编或Intrinsics函数。

自动向量分析器

Intel编译器中,利用其自动向量分析器(auto-vectorizer)对代码进行分析并生成SIMD指令。另外,也会提供一些pragmas等方式使得用户能更好的处理代码来帮助编译器进行向量化。

  1. 基本向量化 /Qvec:开启自动向量化功能,需要在O2以上使用。在O2以上,这是默认的向量化选项,默认开启的。此选项生成的代码能用于Intel处理器和非Intel处理器。向量化还可能受其他选项影响。由于此选项是默认开启的,所以不需要在命令行增加此选项。

  2. 针对指令集(处理器)的向量化 /QxHost:针对当前使用的主机处理器选择最优的指令集优化。

对于双重循环,外层循环被自动并行化了,而内层循环并没有被自动并行化,内层循环被会自动向量化。

影响向量化的因素
  1. 首先当然是指令集是否支持
  2. 内存对齐相关的问题,也是影响向量化的,很多的SSE指令都要求内存是16字节对齐,如果不对齐,向量化会得到错误结果。

如何判断向量化成功

看汇编代码 没成功需要手动内联向量化汇编代码???

Intel 编译器的向量化实现

AMD 编译器向量化实现

AMD 与 Intel 编译器的区别

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

https://blog.csdn.net/gengshenghong/article/details/7027186

https://blog.csdn.net/gengshenghong/article/details/7034748

https://blog.csdn.net/gengshenghong/article/details/7022459

IPCC Preliminary SLIC Analysis part2 : Run process

VScode Debug Run

Debug Process

  1. 创建lables来存储分类结果, m_spcount 200, m_compactness 10
  2. 计时运行 slic.PerformSLICO_ForGivenK(img, width, height, labels, numlabels, m_spcount, m_compactness);
  3. 参数的最后两项是required number of superpixels和weight given to spatial distance(空间距离的权重)也就是K=200
  4. 串行初始化赋值klabels[s] = -1
  5. DoRGBtoLABConversion(ubuff, m_lvec, m_avec, m_bvec);对于整个图像:重载的浮点版本
    1. 提取第一个像素rgb(229,226,218)
    2. 串行RGB2LAB( r, g, b, lvec[j], avec[j], bvec[j] );
    3. int变成double数组
  6. 声明perturbseeds true,edgemag
  7. DetectLabEdges(m_lvec, m_avec, m_bvec, m_width, m_height, edgemag);
    1. 串行对每个像素进行\(\(dx=(l[i-1]-l[i+1])^2+(a[i-1]-a[i+1])^2+(b[i-1]-b[i+1])^2\)\)\(\(dy=(l[i-width]-l[i+width])^2+(a[i-width]-a[i+width])^2+(b[i-width]-b[i+width])^2\)\)\(\(edgemag[i]=dx+dy\)\)为了之后计算6.5-PerturbSeeds
    2. 值得注意的是i的取值说2600 = width+1是第二行第二列,一直到倒数第二行倒数第二列
  8. GetLABXYSeeds_ForGivenK(kseedsl, kseedsa, kseedsb, kseedsx, kseedsy, K, perturbseeds, edgemag);
    1. int step = sqrt(double(sz)/double(K)); \(S=\sqrt{N/k}=225\)
    2. xoff 与 yoff 为一半 112
    3. int X = x*step + (xoff<<(r&0x1));六角网格???
    4. 串行对每个绿圈存了颜色坐标五元组在kseedsl/a/b/x/y 有196个中心
    5. PerturbSeeds(kseedsl, kseedsa, kseedsb, kseedsx, kseedsy, edgemag);
      1. 串行对这196个中心和周围8个位置进行,最小edgemag值的寻找。
      2. 并更新196个中心的位置
  9. int STEP = sqrt(double(sz)/double(K)) + 2.0;
  10. PerformSuperpixelSegmentation_VariableSandM(kseedsl,kseedsa,kseedsb,kseedsx,kseedsy,klabels,STEP,10);
    1. if(STEP < 10) offset = STEP*1.5;
    2. DBL_MAX ? doubel_max 1.7976931348623157e+308
    3. 变量sigma , distxy, maxxy
    4. double invxywt = 1.0/(STEP*STEP);
    5. 迭代10次
      1. 对中心聚类
        1. 串行对这196个中心首先划出[2S*2S]的区域(上下左右offset或者STEP)
        2. 再串行对这\(4S^2\)的区域的每个像素,计算与其区域中心的距离 \(\(dist = \frac{(l-kl[n])^2+(a-ka[n])^2+(b-kb[n])^2}{maxlab[n]}+\frac{(x-kx[n])^2+(y-ky[n])^2}{S^2}\)\)
        3. 注意maxlab[n]初始值是10*10,根据dist更新该像素的距离中心的最小距离数组distvec,和指向的最近中心klable由于是2S*2S,相邻中心的周围区域是有一部分重叠的(如图中黄色荧光笔区域),相当于聚类到各个中心,注意由于中心对自己dist=0,是不可能某一中心距离其他中心更近。
      2. 串行将maxlab与maxlab更新为该聚类集合里的最大值
        1. 注意maxlab与maxlab都是每个中心维护一个
      3. 质心移动:串行将每个聚类区域的每个点的五元组加到质心上,然后除以聚类区域元素总数来得到新的质心五元组
      4. 迭代10次结束(其实可以判断质心是否不再移动来提前结束)
  11. EnforceLabelConnectivity(klabels, m_width, m_height, nlabels, numlabels, K);
    1. 串行新数组赋值for( int i = 0; i < sz; i++ ) nlabels[i] = -1;全部标记为未处理
    2. 串行对所有元素进行如下处理
      1. 如果旧index未被处理
        1. 在其左下上右找到已经处理的元素的nlable,将其值保存在adjlable里
        2. 从该元素开始上下左右寻找未处理,而且其klabels值与旧klabels值相同的元素。
          1. 将其nlable值改为lable,应该也达到标记为已处理的效果
          2. 最终效果就是把该元素相邻连接区域klabels值与旧klabels值相同的全部标记
        3. 如果这块相邻区域过小count <= SUPSZ >> 2
          1. 则将其全部元素赋值为adjlable,即并入上块区域
      2. 旧index++。
      3. 最终效果就是所有的元素重新整合聚类,达到消除过小区域与不连续区域的效果
  12. 结果与check.ppm对比
  13. 我以为只要读取lable的分类,大概sz个int
  14. fread(rgb, (w)(h)3, 1, fp);
  15. 作者是傻逼,只用了1/3的空间

skills: size of arrays

a.size()

相关知识

RGB与Lab颜色空间互相转换

Lab颜色空间简介

同RGB颜色空间相比,Lab是一种不常用的色彩空间。1976年,经修改后被正式命名为CIELab。Lab颜色空间中的L分量用于表示像素的亮度,取值范围是[0,100],表示从纯黑到纯白;a表示从红色到绿色的范围,取值范围是[127,-128];b表示从黄色到蓝色的范围,取值范围是[127,-128]。

RGB转Lab颜色空间

RGB颜色空间不能直接转换为Lab颜色空间,需要借助XYZ颜色空间,把RGB颜色空间转换到XYZ颜色空间,之后再把XYZ颜色空间转换到Lab颜色空间。

RGB与XYZ颜色空间有如下关系:

LAB与XYZ颜色空间有如下关系: X,Y,Z会分别除以0.950456、1.0、1.088754。

需要进一步的研究学习

暂无

遇到的问题

暂无

参考文献

Deepfake - unravel/Baka Mitai

First way :

https://www.youtube.com/watch?v=_laN9jJO63Q

https://www.youtube.com/watch?v=MXNBtws35WE

Baka Mitai all in one

https://colab.research.google.com/github/AliaksandrSiarohin/first-order-model/blob/master/demo.ipynb#scrollTo=Oxi6-riLOgnm

但是由于上传的文件不能太大,对于unravel可以按照youtube视频的传无声音版本,然后用kapwing在线合成导出。

效果展示1替换

效果展示2替换

效果文件链接

https://raw.githubusercontent.com/Kirrito-k423/Picbed/main/img/final_60eaff63b13be700ab0582c8_20002.mp4

http://pic.shaojiemike.top/PicGo%E4%B8%8B%E8%BD%BD.mp4

PicBed & OSS

PicGo介绍

这是一款图片上传的工具,目前支持微博图床,七牛图床,腾讯云,又拍云,GitHub等图床,未来将支持更多图床。

所以解决问题的思路就是,将本地的文件,或者剪切板上面的截图发送图床,然后生成在线图片的链接,走到哪就可以用到哪。

  1. 创建github仓库
  2. 在设置的最后生成token
  3. 下载PicGo并设置github图床

Cloudflare R2 Storage

对象存储有时也称为 Blob 存储,可以存储任意的大型非结构化文件。我们常用的有 AWS 的 S3、阿里云的 OSS、腾讯云的 COS、华为云的 OBS,都是对象存储,他们都可以为我们提供延迟一致、持久性高和容量无限的服务,免去了我们本地文件系统的共享、备份等痛点。

最为经典的是 AWS 的 S3(Simple Storage Service),刚刚推出的时候是革命性的服务,但也带来了新的痛点,上传、存储的费用还可以,但下载也就是取回的时候会被收取流量费,这个费用随着时间的推移,存储的文件越来越多,流量费也变得越来越高

2022年 5月 Cloudflare 就为我们带来了 R2 Storage,基于带宽联盟,为存储对象提供更低成本的存储服务。在后台,R2 自动智能管理数据分层,以在峰值负载时提高性能,并为不经常请求的对象降低成本。

R2 的革命性

在上面我们了解了 Cloudflare R2 Storage 收费项目,发现了什么?只收取存储费用、操作费用,没有流量费用!是的没有流量费用,这就是 Cloudflare R2 Storage 的革命性,依托带宽联盟,做到了零出口费用!5

picbed / OSS compare

  1. github图床,国内连不上
  2. (推荐)七牛申请了免费的证书证书,由于是海外访问还是慢。

  3. one drive虽然能用也能访问,但是速度慢而且操作麻烦,只能一个个传。而且会失效

  4. OSS charge but easy-to-use.

Pricing

Name Storage request operations newwork flow
Cloudflare R2 10GB/monthfree+$0.015/add-GB/month 1Moperations/monthfree+ $4.50 per additional million operations(2) not charge5
Aliyun OSS 4 0.12元/GB/月(1) 0.01元/万次 0.50元/GB
  1. (6GB内不要买套餐,最低配一年9元40GB)
  2. B 类操作费用:每个月一千万次免费额度,超出后每百万次收取 $0.36 的操作费用
reads per object is Class B operations
  1. Class A operations which are more expensive and tend to mutate state.
  2. Class B operations which tend to read existing state.6

Current picbed usage

timestamp storgy Network flow(per month) request operations
Aliyun 231031 395.13MB 21.41GB 61,490
Cloudflare 231124 490MB xxx 9.11k

I need to pay 10RMB each month and the fee grows fast

My choice

  1. First I am not a cross-platform blog writer(1). So If i have a sever machine, i can save my pic in it and no need for picbed
  2. But I use cloudflare + github solution, It will face 3 potential problem
  3. pic set touch the github repository storagy size limits (maybe no limits just recommend less than 5GB2)
  4. cloudflare pages will clone the whole pic-repo after each git push leading to long blog building latency(2)
  5. And the cloudflare pages maybe have a static webfile limits 25MB.3
  6. So I still recommand to use OSS rather than other tricks like using github.

  7. I use blog as my brain cache

  8. cloudflare pages Builds will timeout after 20 minutes.

Old阿里云图床配置

Please read 1

*设定存储空间名 shaojiemike
*确认存储区域 oss-cn-hangzhou
指定存储路径 img/

参考文献

IPCC Preliminary SLIC Analysis

VScode Debug Run

{
    "name": "(gdb) 启动",
    "type": "cppdbg",
    "request": "launch",
    "program": "/home/shaojiemike/github/IPCC/SLIC/SLIC",
    "args": [],
    "stopAtEntry": false,
    "cwd": "${fileDirname}",
    "environment": [],
    "externalConsole": false,
    "MIMode": "gdb",
    "setupCommands": [
        {
            "description": "为 gdb 启用整齐打印",
            "text": "-enable-pretty-printing",
            "ignoreFailures": true
        }
    ]
}
g++ -g -std=c++11 SLIC.cpp -o SLIC #把调试信息加到可执行文件中,如果没有-g,你将看不见程序的函数名、变量名,所代替的全是运行时的内存地址。

Debug Process

  1. main
  2. LoadPPM 把数据读入imag
  3. 读类型、像素图片长宽 2599 3898
  4. 读最大像素 255(应该是指rgb颜色,比如red只有256种,也就是8位二进制)
  5. 读长宽的像素的rgb到imag返回,imag是2599*3898大小的unsigned int二维数组,每位存24位数2进制数。
  6. 创建lables来存储分类结果, m_spcount 200, m_compactness 10
  7. 计时运行 slic.PerformSLICO_ForGivenK(img, width, height, labels, numlabels, m_spcount, m_compactness);//for a given number K of superpixels
  8. 结果与check.ppm对比

skills: watch arrays

*(int(*)[100])labels
*labels@10000

SourceTrail Analysis

Vtune Analysis

需要进一步的研究学习

遇到的问题

参考文献

IPCC Preliminary SLIC test

test on node5

g++ -std=c++11 SLIC.cpp -o SLIC
time ./SLIC
./SLIC  28.46s user 0.52s system 99% cpu 29.027 total
slic

test on amd_256

gcc 10.2.0
[1]    122955 segmentation fault (core dumped)  ./SLIC
我傻逼了,我把cpp移动了,但是输入文件忘记动了
cat ./log/job_436960_rank0_fb0707_0.out
Computing time=21872 ms
There are 0 points' labels are different from original file.

gdb on segmentation fault

  1. ulimit -c 显示核心转储文件大小的最大值
    ulimit -c unlimited # 打开
    ulimit -c 0         # 关闭
    
  2. 执行编译加入-g的SLIC程序,产生core文件
  3. 然后执行进gdb
    gdb SLIC core.199048 
       bt
    
    (gdb) bt
    #0  0x00002af6047e4a4b in fgets () from /lib64/libc.so.6
    #1  0x000000000040450a in LoadPPM (filename=0x407e63 "input_image.ppm", data=0x7ffecda55cc8, width=0x7ffecda55cc4, height=0x7ffecda55cc0) at SLIC_raw.cpp:692
    #2  0x00000000004049e1 in main (argc=1, argv=0x7ffecda55de8) at SLIC_raw.cpp:794
    

要求

  1. 对slic.PerformSLICO_ForGivenK 函数运行时间进行通用优化
  2. 首先是并行化处理
  3. 读取时间不在计分范围
  4. 可以优化编译选项
  5. 可以改变数据结构与类型
  6. 需保证结果正确
  7. 之后有多组数据

需要进一步的研究学习

遇到的问题

北京超算的机器传文件只能用wincp,而且有时候不行,需要刷新缓存

参考文献

IPCC Preliminary SLIC algorithm

SLIC

超像素算法就是将图像中的像素依据某种相似性进行聚类,形成一个大“像素”,这个大“像素”可以作为其他图像处理算法的基础。 或者是超像素算法将像素组合成感知有意义的原子区域( atomic regions),其可以用于替换像素网格的刚性结构。它们捕获图像冗余,提供计算图像特征的方便原语( primitive ),并且大大降低了后续图像处理任务的复杂性。

SLIC 算法的基本思想是: 1. 首先将图像从 RGB 颜色空间转换到 CIE-Lab 颜色空间,并把每个像素的(L,a, b)颜色值和(x, y)坐标值组成一个 5 维的特征向量 V[L, a, b, x, y], 1. 然后,根据给定的网格步长 \(S=\sqrt{N/k}\),初始化聚类中心 \(\(C_k=[L_k, a_k, b_k, x_k, y_k]^T\)\) 2. 之后在每个聚类中心 Ck 的邻域(2Sx2S),计算邻域内各像素与该 Ck 点 的相似性度量,从而对邻域内的像素点进行聚类, 3. 之后迭代更新聚类中心,直至满足收敛条件。 233 233

算法特点

  1. 通过将搜索空间限制为与超像素大小成比例的区域,显着地减少了优化中的距离计算的数量。 233
  2. 加权距离度量组合颜色和空间接近度,同时提供对超像素的尺寸和紧凑性的控制。
  3. 默认情况下,算法的唯一参数是k,其含义是大小大致相等的超像素的个数。
距离测量

233 233 233

参考文献

https://blog.csdn.net/bailing910/article/details/79747689

SSL

什么是SSL证书

SSL是SecureSocketLayer的缩写,即安全套接层协议,SSL证书是一种数字证书,主要是给予网站HTTPS安全协议加密传输与信任的功能。SSL证书拥有数字加密与认证过程,加密协议可以保护网站。

高层的应用协议如HTTP、FTP、Telnet等能透明地建立于SSL协议之上。其在应用层协议通信之前就已经完成加密算法、通信密钥的协商以及服务器认证工作。在此之后应用层协议所传送的数据都会被加密,从而保证们在互联网上通信的安全。

个人网站需要证书吗?

先了解一下安装SSL证书有哪些作用吧。      1.网站数据的加密:对网站的数据进行加密,达到能够保护数据不会被泄露的效果。   2.身份的验证: 安装SSL证书可以证实真实信息,防止流量被劫持、防止被中间人攻击等。   3.显示绿色小锁,消除不安全信息:在网址栏当中会展示绿色小锁,消除主流浏览器对该网址提示“不安全”标记。   4.利于收录:谷歌百度等主流搜索引擎会优先展示和收录https的网站,也就是安装SSL证书的网站。   5.绿色的地址栏:安装高级的SSL证书可在地址栏当中显示绿色企业名称,有利于企业品牌的宣传以及客户的信任。    如果你的个人网站不需要信息加密、不需要身份验证、不需要用户的体验、也不需要优化,那么你也就没必要去购买安装SSL证书。

个人网站DV证书的授权

https://blog.csdn.net/bennny/article/details/82988260