用 CodeViz 分析函数调用关系

        在之前的文章编译安装 CodeViz中讲到了如何安装 CodeViz,其实也就是如何编译打过补丁的 gcc 4.6.2。接下来就要利用编译好的工具对源代码进行函数调用方面的分析了。我们的目的是分析源代码(C,C++),生成函数调用关系图,并且在此过程中还可以根据需要进行一些配置。

  • 用打过补丁的 gcc 编译源代码
  •         这一步只要在 Makefile 中指定使用编译后的 gcc 而不是系统自带的[……]

Read more

编译安装CodeViz

        转载请注明出处

        CodeViz 是《Understanding The Linux Virtual Memory Manager》的作者 Mel Gorman 写的一款分析C/C++源代码中函数调用关系的开源工具。其基本原理是给 gcc 打个补丁,使其在编译源码时将函数调用的信息输出,之后再用 perl 脚本收集整理这些信息,最后调用 Graphviz 绘制函数调用关系图。(这么看来学会 Graph[……]

Read more

编译 OpenSSH

        转载请注明出处。

        本文展示普通用户编译 OpenSSH-6.6p1 的过程,只有编译而没有安装,编译后可正常使用,因此所有的操作均以普通用户的权限执行。

        总的来说,OpenSSH 的编译至少需要另外两个包:zlib 和 OpenSSL。前者是一个开源、通用的数据压缩库;而后者,呵呵,就是那个大名鼎鼎[……]

Read more

普通用户运行sshd

        转载请注明出处。

        sshd 是 ssh 套件中的监听守护模块,只有运行 sshd 监听程序的主机才能被远程主机通过 ssh 登录。在某些情况下(比如在一台没有系统权限的主机上,系统的 ssh 限制了某些登录)需要以普通用户的身份在某一端口启动 sshd 服务,以方便地进行 ssh 登录。本文便总结了经过实践验证的启动 sshd 的方法。

  • 设置 sshd 配置文件
  • $ mkdir e[......]

Read more

VTune 分析 MPI 程序

        本文来自于一篇英特尔的技术文档,讲解了如何用 VTune 和 Inspector 工具分析 MPI 程序。我在实际工作中用到的是 VTune 工具。没用过的不好说,不过两者操作起来很是相似。

        用 VTune 分析 MPI 程序,就像把大象装冰箱,分三步:

  • 用 amplxe-cl 和 inspxe-cl 命令行工具收集程序数据。默认情况下会分析所有进程,也可过滤数据,分析一部分进程。每个被分析[……]

Read more

文艺 shell——zsh

        最近读了一本书,作者深深地推荐了一款对我来说完全是新玩意儿的 shell——zsh。听说不光功能强大,还很文艺。无意之中看到同实验室的同学竟然也在用,给我很大触动。本着活到老折腾到老的精神,我也装一个玩玩看,当然,运行环境是 Ubuntu。

        本文主要参考终极shell定制你的zsh命令提示符

  • 安装
  • zsh据说是很难配置的,后来有人写了个方便上手的工具,叫做“oh my zsh”。所[……]

Read more

编程珠玑笔记(18)-字符串

  • 单词

  第一个问题是为文档中包含的单词生成一个列表。可以使用C++标准模版库中的sets和strings:

  int main(void){
      set <string> S;
      set <string>::iterator j;
      string t;
      while (cin >> t)
          S.insert(t);
      for (j = S.begin(); j != S.end(); ++j)
          cout << *j <<"\n";
  [......]

Read more

编程珠玑笔记(17)-堆

  本章重点关注的是一种特殊的数据结构——堆。这种结构在数据结构课和算法课中多有介绍(其实本章内容与《算法导论》中第6章的内容“堆排序”比较相似)。本章介绍了堆以及其两种用途——优先级队列和排序。

  • 堆数据结构
  •   堆有两个特定的性质。一是顺序,即任何结点的值都小于或等于其子结点的值,这意味着根结点的值最小。二是形状,一般用一棵二叉树来表示堆,树是平衡的,它最多在两层上具有叶结点,其中最底层的叶结点尽可能地靠左分布。因此,如果堆有n个结点,那么所有结点到根结点的距离都不超过lgn。

      因为堆是具有形状性质的二叉树,所以用数组来表示堆就足够了。其中常见的函数定义为:

     [......]

    Read more

    编程珠玑笔记(16)-搜索(II)

  • 二分搜索树
  •   二分搜索树可以认为是在链表的基础上进一步进行扩展——它支持快速搜索和插入。

      二分搜索树基于一个事实:任何一个结点,其左孩子的值小于其值,其右孩子的值大于其值。

      private:
          int n, *v, vn;
          struct node{
              int val;
              node *left, *right;
              node(int i) {val = i; left = right = 0; }
          };
          node * root;
    

      初始化时将根设[……]

    Read more

    编程珠玑笔记(15)-搜索(I)

      本章讨论的是搜索问题中的数据结构。作者依次描述了适用于不同情境下的数据结构,存储的数据信息均为整数。

  • 接口
  •   要实现的伪代码:

      initialize set S to empty
      size = 0
      while size < m do
          t = bigrand() % maxval
          if t is not in S
              insert t into S
              size ++
      print the elements of S in sorted order
    

      (数据结构)接口的定义:[……]

    Read more