J

2004 | 08 | 09 | 10 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 12 |
2008 | 01 | 02 | 04 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2011 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2012 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 12 |
2013 | 01 | 02 | 03 | 05 | 06 | 07 | 08 | 09 | 10 | 11 |
2014 | 01 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2015 | 02 | 03 | 04 | 05 | 06 | 07 | 10 | 11 | 12 |
2016 | 01 | 02 | 04 | 05 | 06 | 07 | 09 | 11 | 12 |
2017 | 01 | 02 |

ホーム

日記内の"morihyphen.hp.infoseek.co.jp"へのリンクは切れてます。必要な場合はお手数ですが int.main.jp へ書き換えをお願いします。

TODO: ファイル名確認を忘れないこと > 自分

twitter

 

2017-02-18

RaspberryPi 3 で 64bit debian を動かす 05:37

まあ今は各ディストリビューションからぼちぼち出てるから無理しなくてもいいんだけど…

RPi って結構ユーザー空間のツールやライブラリが必要で、カーネルだけ動いてもなんか機能が不足してたりして、raspbian 以外のディストリだと、なんかが動いたり動かなかったりするなどするイメージがあるね(よく知らない)

なので、raspbian の上で、debian arm64 を動かすことにする。

まず、

https://devsidestory.com/build-a-64-bit-kernel-for-your-raspberry-pi-3/

これを参考にして、64bit kernel をビルドして、64bit kernel の上で、raspbian 32bit が動くようにする。

次に、LXC を入れる(apt install lxc) 。入れたら、

 $ sudo -i
 # CONTAINER_NAME=debian64 # 好きな名前
 # lxc-create -t debian -n $CONTAINER_NAME -- -a arm64

とかする、と、LXC の debian は armhf から armv8 は作れないとか言われるので、負けないで、/usr/share/lxc/templates/lxc-debian の "armhf" でごにょごにょしてるところを消す

if [ $hostarch = "armhf" -o $hostarch = "armel" ] && \
   [ $arch != "armhf" -a $arch != "armel" ]; then
    echo "can't create $arch container on $hostarch"
#    exit 1
fi

消したら、

 # lxc-create -t debian -n $CONTAINER_NAME -- -a arm64

して、debootstrap が終わるまで待つ。

終わったら、

 # lxc-start -n $CONTAINER_NAME 

する…と、何故か起動しないので、/var/lib/lxc/$CONTAINER_NAME/config を書きかえる。(debian.common.conf がなんか良くない気がする)


とりあえず手元では以下のconfig で動いてるから。

# Template used to create this container: /usr/share/lxc/templates/lxc-debian
# Parameters passed to the template: -a arm64
# For additional config options, please look at lxc.container.conf(5)
lxc.network.type = veth
lxc.network.link = br0
lxc.network.flags = up
lxc.network.name = eth0

lxc.rootfs = /var/lib/lxc/debian64/rootfs


# Common configuration
# lxc.include = /usr/share/lxc/config/debian.common.conf

lxc.pivotdir = lxc_putold

# Default mount entries
lxc.mount.entry = proc proc proc nodev,noexec,nosuid 0 0
lxc.mount.entry = sysfs sys sysfs ro 0 0

# Default console settings
lxc.tty = 4
lxc.pts = 1024


# Container specific configuration
# lxc.mount = /var/lib/lxc/debian64/fstab
lxc.utsname = debian64
lxc.arch = arm64
lxc.autodev = 1
lxc.kmsg = 0


# Default cgroup limits
lxc.cgroup.devices.deny = a
## Allow any mknod (but not using the node)
lxc.cgroup.devices.allow = c *:* m
lxc.cgroup.devices.allow = b *:* m
## /dev/null and zero
lxc.cgroup.devices.allow = c 1:3 rwm
lxc.cgroup.devices.allow = c 1:5 rwm
## consoles
lxc.cgroup.devices.allow = c 5:0 rwm
lxc.cgroup.devices.allow = c 5:1 rwm
## /dev/{,u}random
lxc.cgroup.devices.allow = c 1:8 rwm
lxc.cgroup.devices.allow = c 1:9 rwm
## /dev/pts/*
lxc.cgroup.devices.allow = c 5:2 rwm
lxc.cgroup.devices.allow = c 136:* rwm
## rtc
lxc.cgroup.devices.allow = c 254:0 rm
## fuse
lxc.cgroup.devices.allow = c 10:229 rwm
## tun
lxc.cgroup.devices.allow = c 10:200 rwm
## full
lxc.cgroup.devices.allow = c 1:7 rwm
## hpet
lxc.cgroup.devices.allow = c 10:228 rwm
## kvm
lxc.cgroup.devices.allow = c 10:232 rwm
## To use loop devices, copy the following line to the container's
## configuration file (uncommented).
#lxc.cgroup.devices.allow = b 7:* rwm

外へネットワーク繋げたいなら、veth を設定する。

よく知らないので、

https://wiki.archlinuxjp.org/index.php/%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%83%96%E3%83%AA%E3%83%83%E3%82%B8#iproute2_.E3.82.92.E4.BD.BF.E3.81.86

あたりを参考に、br0 を作って、上のconfig のように、lxc.network を設定すればいいんじゃないかな…(うろおぼえ)

トラックバック - http://d.hatena.ne.jp/w_o/20170218

2017-02-01

4fmaps 22:48

SDE が 4fmaps サポートした記念でも書くか。

Deepleaaaarrrrning(自動で色を塗る技術) が普及し、LINPACK専用機(笑) が、シンギュラリティーを起こし、人間に反逆する日も近付いてきた昨今、ついに、x86にも行列乗算専用命令が実装されるはこびとなりました。

(書きかけ)


書きかけの間に、なんで行列乗算が重要かについて https://petewarden.com/2015/04/20/why-gemm-is-at-the-heart-of-deep-learning/ でも読んでおいて。

(なんかどうやってもsde動かないので明日試して無理そうなら諦めるかもしれない)

トラックバック - http://d.hatena.ne.jp/w_o/20170201

2017-01-06

一般市民が突然謎の世界に連れさられてバトルさせられるもの 00:35

最近読んでる漫画に、一般市民が突然謎の世界に連れさられてバトルさせられるものがそれなりの頻度で含まれていることに気付いた。

私漫画買うときあらすじとか一切見ないで買うので、別に狙って読んでるわけではないんですよ。

なんだろう、テンプレ化されているのだろうか。

大体以下のような特徴がある

  1. いきなり主人公が殺されるとか招待状が届いたりとか
  2. 目が覚めると謎の空間
  3. 勝利者はなんかメリットがあると言われる
  4. 生き残れるのはxx人だ、これはゲームだ殺し合えみたいに言われる


まあ、別にテンプレ化はいいんだ。内容がテンプレかどうかは、実際のところあんまり面白さとは関係ない。むしろテンプレに沿った内容にすることで、その作品の特徴がより目立つようになるというメリットも忘れてはいけないと思う。

そして、人間、どんなにひねくれた内容を楽しんだとしても最後には決めゼリフを叫んで必殺技が大ゴマで出てフィニッシュからの爆発みたいなのを期待しているもんだ。トラックにひかれて異世界転生してチートしたっていいじゃないか。


まあそれはそれとして、気付いたついでに、突然謎の世界に連れされて殺しあう系作品の感想でも書いておこうと思う。ネタバレは気にしたりしなかったりするので、ネタバレ嫌いな人は読まないでね。(好きな順に書いてます)


出会って5秒でバトル http://www.urasunday.com/fiveseconds/index.html

いきなり能力が与えられて、それの説明が出て、それで戦うという、能力バトルをするために設定をつくったみたいな設定のソリッドさがよい。まあでも3巻の新しい話はなんかチーム戦のかけひきみたいなのが出てきて、ソリッドさが失なわれてるという感じがある。

http://deago.web.fc2.com/01/index.html もとはweb漫画なのね。(今知った)


煉獄デッドロール http://comic-walker.com/contents/detail/KDCW_FS01000026010000_68/

みんな大好き賭ケグルイ河本ほむら先生原作のアレだよ。賭ケグルイみたいな感じで、人が集って一定のルールのもとでゲームをしていくみたいな感じ。

賭ケグルイみたいなインパクトの強いキャラが出てこないので、なんか少し寂しい感じがある。



天空侵犯

主人公の女の子が強いので見ていて良さがある。

なんか設定がゆるゆる増えていくので、なんか緊張感無くてふわふわした感じがある。


たとえ灰になっても

おっさんでも謎の世界に連れさられたら女の子になるという設定が必要無いのに付いてるのが良いと思った(こなみ)

1巻時点だとまだPart1が終わっていなくて主人公が特に活動しないのでよくわからない。


プラチナエンド

ちょっとテンプレからは外れるけど…

なんか相手がラスボスしかいないから、延々引き伸ばされてるみたいな手応えが…

確認してないけど小畑健絵で乳首が出てくるシーンがあったので良かったと思った記憶がある。


監獄実験

直接対戦するわけではないので少しテンプレからは外れている

なんか暗い内容だったからあんまり好きではなくて覚えてない。


トモダチゲーム

あんまり好きじゃなかったので特に書くことない



総括

なんかあんまり好きで読んでる感じのしない感想だな…それなりに好きなんだけど…

まあこういうのって、パート1,2 あたりは設定をフルに生かした感じがあって最初は面白いけど、だんだん設定が開示されていくにつれて普通の内容に収束していくから、読むほど印象が薄くなっていくみたいなのはかなりある。

トラックバック - http://d.hatena.ne.jp/w_o/20170106

2016-12-24

ApolloLake の gen9 09:05

そういやApolloLakeのやつGPU計測してなかった。

https://github.com/tanakamura/clminibench/tree/master/jni/linux

この CMakeLists.txt 使えば Linux でも動くようにしたから、まあなんかアレしといて。

dev = Intel(R) HD Graphics Broxton 1
enqueue kernel latency:135.280000 usec
enqueue kernel latency x16:70.048750 usec
enqueue memread latency:1.280000 usec
enqueue memwrite latency:4.830000 usec
memread bandwidth:3834.200666 MB/s
memwrite bandwidth:2063.307312 MB/s
global float1 read bandwidth:8.654418 GB/s
global float4 read bandwidth:9.002470 GB/s
float1 add latency:14.162898 clk
float2 add latency:14.445782 clk
float4 add latency:14.759183 clk
int1 add latency:0.061631 clk
int4 add latency:14.666319 clk
gmem load latency:170.041203 clk
constant load latency:169.978857 clk
gmem load latency uc:169.545412 clk
lmem load latency:135.856748 clk
mad1 throughput:117.800274 GFLOPS
mad1dep throughput:106.900008 GFLOPS
mad4 throughput:120.364875 GFLOPS

値あってるかどうかは全然検証してない。(いつもなんか値おかしいので真面目に見てはいけない)

(beignet だと名前が Broxton のままなのが唯一のみどころか)

トラックバック - http://d.hatena.ne.jp/w_o/20161224

2016-12-10

Knigts Landing とクロックダウンする石 part 2 (車 10) 01:24

昨日のまとめ

  • KNL はサイクル当たり2個の命令を実行できると資料にはある
  • 実際には1.69しか出ない

KNLのproduct briefによると、

http://www.intel.com/content/www/us/en/processors/xeon/xeon-phi-processor-product-brief.html

Frequency listed is nominal (non-AVX) TDP frequency. (略) For high-AVX instruction frequency, subtract 200 MHz

とあって、AVX負荷が高いと、1.3GHz から 200MHz 下がると書いてある。

今は、IPC=1.69 で、 1.69/2.0 = 0.845 ,クロックは 1.1/1.3 = 8.46 なので、200MHz 下がってるとすると計算は合う気がする。

が、これはおそらく現象を正しく表現していないように感じる。と、いうのは、今のLinuxでは、perf stat すると、実際に稼動したクロック数と、実時間から、プログラムが実際に動いたクロック数が取れるようになっているが、これで見てもクロックが下がっているようには見えない。

例えば、

#include <unistd.h>
#include <signal.h>
#include <stdlib.h>

#define INSN()								\
    __asm__ __volatile__("vfmadd231ps %zmm0, %zmm0, %zmm0\n\t"		\
			 "vfmadd231ps %zmm1, %zmm1, %zmm1\n\t"		\
			 "vfmadd231ps %zmm2, %zmm2, %zmm2\n\t"		\
			 "vfmadd231ps %zmm3, %zmm3, %zmm3\n\t"		\
			 "vfmadd231ps %zmm4, %zmm4, %zmm4\n\t"		\
			 "vfmadd231ps %zmm5, %zmm5, %zmm5\n\t"		\
			 "vfmadd231ps %zmm6, %zmm6, %zmm6\n\t"		\
			 "vfmadd231ps %zmm7, %zmm7, %zmm7\n\t"		\
			 "vfmadd231ps %zmm8, %zmm8, %zmm8\n\t"		\
			 "vfmadd231ps %zmm9, %zmm9, %zmm9\n\t"		\
			 "vfmadd231ps %zmm10, %zmm10, %zmm10\n\t"	\
			 "vfmadd231ps %zmm11, %zmm11, %zmm11\n\t");


int main()
{
  signal(SIGALRM, exit);
  alarm(1);

  while(1) {
    INSN();
    INSN();
    INSN();
    INSN();
    INSN();
    INSN();
    INSN();
  }
}

こういうコードで perf stat とると、

$ perf stat ./a.out 

 Performance counter stats for './a.out':

       1001.998233      task-clock (msec)         #    0.999 CPUs utilized          
                 2      context-switches          #    0.002 K/sec                  
                 0      cpu-migrations            #    0.000 K/sec                  
               117      page-faults               #    0.117 K/sec                  
     1,288,186,518      cycles                    #    1.286 GHz                      (50.06%)
   <not supported>      stalled-cycles-frontend  
   <not supported>      stalled-cycles-backend   
     2,200,109,120      instructions              #    1.71  insns per cycle          (75.06%)
        26,858,635      branches                  #   26.805 M/sec                    (75.02%)
            51,857      branch-misses             #    0.19% of all branches          (74.96%)

       1.002828425 seconds time elapsed

1.286 GHz とか出ている。

これは、CPU_CLK_UNHALTED の値から計算して出しているはず。CPU_CLK_UNHALTEDは、省電力機能によるクロック変動にあわせて変動するので、もしAVX-512に負荷をかけてクロックが下がるならば、これも下がって欲しいところだ。CPU_CLK_UNHALTEDが固定値だとしたら、rdtscとほぼ変わらないので、存在意義があやしくなる。


また、前世代のKNCでは、コア当たり最低2スレッド立てないとフル性能出ないという問題があったので、それと似た問題があるかもと思って試すものの、

#include <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <omp.h>

#define INSN()								\
    __asm__ __volatile__("vfmadd231ps %zmm0, %zmm0, %zmm0\n\t"		\
			 "vfmadd231ps %zmm1, %zmm1, %zmm1\n\t"		\
			 "vfmadd231ps %zmm2, %zmm2, %zmm2\n\t"		\
			 "vfmadd231ps %zmm3, %zmm3, %zmm3\n\t"		\
			 "vfmadd231ps %zmm4, %zmm4, %zmm4\n\t"		\
			 "vfmadd231ps %zmm5, %zmm5, %zmm5\n\t"		\
			 "vfmadd231ps %zmm6, %zmm6, %zmm6\n\t"		\
			 "vfmadd231ps %zmm7, %zmm7, %zmm7\n\t"		\
			 "vfmadd231ps %zmm8, %zmm8, %zmm8\n\t"		\
			 "vfmadd231ps %zmm9, %zmm9, %zmm9\n\t"		\
			 "vfmadd231ps %zmm10, %zmm10, %zmm10\n\t"	\
			 "vfmadd231ps %zmm11, %zmm11, %zmm11\n\t");


int main()
{
  signal(SIGALRM, exit);
  alarm(1);

  omp_set_num_threads(2);

#pragma omp parallel for
  for (int i=0; i<2; i++) {
    while(1) {
      INSN();
      INSN();
      INSN();
      INSN();
      INSN();
      INSN();
      INSN();
    }
  }
}
$ numactl -C 0,64  perf stat  ./a.out  # 手元だと0と64が同じコアなので。

 Performance counter stats for './a.out':

       2003.569207      task-clock (msec)         #    1.996 CPUs utilized          
                 2      context-switches          #    0.001 K/sec                  
                 1      cpu-migrations            #    0.000 K/sec                  
               190      page-faults               #    0.095 K/sec                  
     2,561,111,631      cycles                    #    1.278 GHz                      (50.04%)
   <not supported>      stalled-cycles-frontend  
   <not supported>      stalled-cycles-backend   
     2,201,434,021      instructions              #    0.86  insns per cycle          (75.01%)
        27,798,335      branches                  #   13.874 M/sec                    (75.02%)
           171,238      branch-misses             #    0.62% of all branches          (74.99%)

       1.003819386 seconds time elapsed

2スレッドで、IPC=0.86、 コア当たりは、1.72 しか出ていない。


なんかめんどくなってきたので結論を書くと、二個目のFPUだけクロックが落ちて動いているように見える。

Agner先生が Knights Landing のレイテンシ/スループット出してるけど、

http://agner.org/optimize/instruction_tables.pdf


FP0 でしか実行できないvplzcntd とかは、

#define INSN()								\
    __asm__ __volatile__("punpcklbw %xmm0, %xmm0\n\t"		\
			 "punpcklbw %xmm1, %xmm1\n\t"		\
			 "punpcklbw %xmm2, %xmm2\n\t"		\
			 "punpcklbw %xmm3, %xmm3\n\t");		\

IPC 1.0 出る。


FP1 でしか実行できないkortestw … あれkortestw は asm で実行したらIPC 1.0 出るんだが…よくわからん…もういいや…(完)

トラックバック - http://d.hatena.ne.jp/w_o/20161210