HOME | ドキュメント |  ブログ  |  BBS  |  瓦版  | 将棋プロジェクト |  物置小屋   

ドキュメント 象歩 Web瓦版
 BBSボード RDF
こんにちは (23)
おためし板 (321)
質問箱 (94)
テスト (30)
You散歩 (4)
建築 DIY (6)
MTB (32)
(9)
節電対策 (2)
このサイトに関する話 (186)
Linux (396)
PC用ハードウェア (6)
Vine Linux 野良系 (64)
PC 工作 (31)
ドローン (0)
自家製GAFA (0)
BBS の改良 (105)
Vine Seed (520)
Zope とプロダクト (95)
Web の利用技術 (131)
DB とファイルシステム (63)
Python と C/C++ と... (29)
Zopeプロダクト開発メモ (3)
UTF-8 化 (42)
Mail 環境 (8)
COREBlog (109)
Zope3 (51)
Windows 64bit (19)
Mac (2)
Squeak スクイーク (67)
Django ぶらり一人旅 (3)
64bits (52)
Mono 思いにふける (10)
Mint Linux (8)
CentOS (2)
ディスクトップ (4)
象歩将棋 (478)
将棋よもやま (210)
サイトのデザイン (31)
心配な話 (66)
うそ (21)
うそ総集編 (0)
昔のゲストブック (20)
ボート部 (23)
Web 日記 (199)
 スパム
逮捕しる (20)
スパムお溜り (47)
ごみ箱 (6)
 リンク
kiyoさんのサイト
ペンタ郎の漫漕ブログ
端艇部員日記
TIT漕艇部の練習動画 @YouTube
墨堤の雄 @FaceBook
ペンタ(五大学ミドル) @FaceBook
Facebook
Vine Seed パッケージビルド状況
Vine Linux パッケージ情報
VineLinux バグトラッキングセンタ
VineSeed 開発用 Trac
VineSeed Specs
RPMパッケージの作成方法
Linux Standard Base
Planet Vine
Vine Linux ユーザーフォーラム
Vine Users ML アーカイブ
VineSeed ML アーカイブ
twitter#VineLinux
勝手に将棋トピックス
詰将棋おもちゃ箱

64bits

linux で 64 ビット環境を構築。そして64ビットマルチプロセス対応プログラムを作る - 志を立てるのに、遅すぎることはない -- by ピカソ河


全52件 - 01 02 03 04 05 06
45  owa  2007/11/06 22:44 id: mJs8kxp1Zus  prob: 0.0%
インラインアセンブラの勉強
GCC Inline Assembler
http://caspar.hazymoon.jp/OpenBSD/annex/gcc_inline_asm.html
http://caspar.hazymoon.jp/OpenBSD/annex/gas.html
http://www.mars.sannet.ne.jp/sci10/on_gcc_asm.html

void test1()
{
    typedef unsigned long long ULong;
    ULong m = 0x1000100010001000;
    ULong n = 0x0111011101110111;
    ULong out = 0;
    __asm__ __volatile__ (
        "movq %1, %%rax;"
        "addq %2, %%rax;"
        "movq %%rax, %0;"
        : "=r"(out)         // 出力 (%0)
        : "r"(m), "r"(n)    // 入力 (%1, %2)
        : "%rax"            // 破壊されるレジスタ
        );
    fprintf(stderr, "m=0x%016llx, n=0x%016llx, out=0x%016llx\n", m, n, out);
}

コンパイル (gcc -m64) 後の実行結果は
m=0x1000100010001000, n=0x0111011101110111, out=0x1111111111111111
44  owa  2007/11/03 22:44 id: mJs8kxp1Zus  prob: 0.4%
ビット位置の計算
0.0065秒/100万 (gcc -O3 Athlon64x2 3800+ x86_64 vine seed) 
0.0146秒/100万 (gcc -O3 Athlon64x2 3800+ i386 vine 4.1) 

ただ1ビットだけ立ってる場合のオフセットを求める方法。
---
int offset_of_onebit1(unsigned long long x)
{
    int n = 0;
    if (x & 0xffffffff00000000LL) {
        n += 32;
        x >>= 32;
    }
    if (x & 0xffff0000) n += 16;
    if (x & 0xff00ff00) n += 8;
    if (x & 0xf0f0f0f0) n += 4;
    if (x & 0xcccccccc) n += 2;
    if (x & 0xaaaaaaaa) n += 1;
    return n;
}
---
n += 16 は n |= 16 でも同じ。むしろ若干遅くなる。
また以下のように if 文を無くしても処理速度は変わらない
---
int offset_of_onebit2(ULong x)
{
    int n = 0;
    (x & 0xffffffff00000000LL) && (n += 32) && (x >>= 32);
    (x & 0xffff0000) && (n += 16);
    (x & 0xff00ff00) && (n += 8);
    (x & 0xf0f0f0f0) && (n += 4);
    (x & 0xcccccccc) && (n += 2);
    (x & 0xaaaaaaaa) && (n++);
    return n;
}
---
環境によって違いはあるかも。
43  owa  2007/10/29 22:37 id: mJs8kxp1Zus  prob: 1.5%
ビットの連続抽出
0.230秒/100万 (gcc -O3 Athlon64x2 3800+ x86_64 vine seed)
0.513秒/100万 (gcc -O3 Athlon64x2 3800+ i386 vine 4.1)

ビット位置を一個ずつ取り出すイテレータ。
肝は bits & (-bits) で LSB (Least Significant Bit) が求められること。
---
#if defined(__x86_64__)
typedef unsigned long ULong;
#elif defined(__i386__)
typedef unsigned long long ULong;
#endif

class CBitPos {
    ULong bits;
public:
    CBitPos(ULong x) : bits(x) {}
    ULong next() {
        ULong x = bits & (-bits);
        bits &= ~x;
        return x;
    }
};
---

一回あたり44ビットONのデータで測定。つまり一個のイテレータで44回ループ処理した。
for (long i = 0; i < 1000000L; i++) {
    CBitPos a(0x7777777777773333LL);
    int pos = a.next();
    while (pos)
        pos = a.next();
}

ちなみに MSB (Most Significant Bit) を求める方法を用いると三倍くらい遅くなる。
---
    x |= (x >> 1);
    x |= (x >> 2);
    x |= (x >> 4);
    x |= (x >> 8);
    x |= (x >> 16);
    x |= (x >> 32);
    x &= ~(x >> 1);
---
42  owa  2007/10/29 22:18 id: mJs8kxp1Zus  prob: 12.4%
ビット数のカウント
0.0085秒/100万 (gcc -O3 Athlon64x2 3800+ x86_64 vine seed)
0.0251秒/100万 (gcc -O3 Athlon64x2 3800+ i386 vine 4.1)

立ってるビットを数えるには隣同士の和を求めることを繰り返す。
---
int bitcount(unsigned long long x)
{
    x -= ((x >> 1) & 0x5555555555555555LL);
    x = (((x >> 2) & 0x3333333333333333LL) + (x & 0x3333333333333333LL));
    x = (((x >> 4) + x) & 0x0f0f0f0f0f0f0f0fLL);
    x += (x >> 8);
    x += (x >> 16);
    x += (x >> 32);
    return x & 0x0000007f;
}
---
参考サイト:
http://www.nminoru.jp/~nminoru/programming/bitcount.html
http://aggregate.org/MAGIC/#Most%20Significant%201%20Bit
http://graphics.stanford.edu/~seander/bithacks.html
41  owa  2007/08/22 01:01 id: mJs8kxp1Zus  prob: 2.0%
80コアチップ
http://pc.watch.impress.co.jp/docs/2007/0215/kaigai337.htm
http://pc.watch.impress.co.jp/docs/2007/0214/isscc02.htm
8x10=80CPU だそうです。おしいな 9x9=81CPU だと面白いかも^^;

64コアCPU なんてのも
http://pc.watch.impress.co.jp/docs/2007/0821/tilera.htm
http://www.tilera.com/products/processors.php
40  owa  2007/03/14 15:92 id: mJs8kxp1Zus  prob: 1.8%
円周率 300 万桁の計算
http://www.h2np.net/pi/
これは hoihoi-p 氏のブログから
http://hoihoi-p.yosiki.org/blog/435

http://h2np.net/pi/pi_quick_start.tar.gz を試してみると
Pentium4 2.8E  (32bit): 14.77 sec
Athlon64 3700+ (32bit): 10.15 sec
Athlon64 3700+ (64bit):  5.92 sec
予備マシンながら、なかなかの性能^^
39  owa  2006/07/26 23:27 id: mJs8kxp1Zus  prob: 18.3%
Debian to Run on AMD64
http://linux.slashdot.org/linux/06/07/26/0057215.shtml
http://linux.slashdot.org/comments.pl?sid=192198&cid=1578253...
明日読もう。
38  owa  2006/07/06 01:12 id: mJs8kxp1Zus  prob: 0.0%
マシンの起動時にエラーが出るので良く見たら which コマンドなどがセグメンテーションエラー。
リビルドしてみると /usr/lib/libiberty.a なんてゴミを拾ってた。
こいつは本来 binutils-*.x86_64.rpm 入れた時に削除されてるはずのもの。なんでだろう...
やっぱり大掃除しないといかんなー

追記: 一応 /lib, /usr/lib の下は掃除完了
37  owa  2006/05/29 23:57 id: mJs8kxp1Zus  prob: 0.1%
>>36 util-linux-2.12p-0vl4 ... 大量に依存関係のエラー
古い i386 版が残っていたためでした。少し間隔が空いて惚けてますね;;
gtk2 関連が整備されて来たので、試しに Sylpheed をビルドしたら OK
これでセカンドマシンとして十分機能する状態になりました w(^o^)w
36  owa  2006/05/28 23:14 id: mJs8kxp1Zus  prob: 0.0%
久しぶりに vine x86_64 を apt-get; dist-upgrade してみた。
いつの間にかいろいろ更新されてました。感謝。
http://owa.as.wakwak.ne.jp/zope/docs/Vine/release

寝る前に、もう一度 dist-upgrade を試みたら util-linux-2.12p-0vl4 を入れるとおっしゃる。
そして大量に依存関係のエラーが出ました;;
util-linux-2.12p-0vl4 はもう入ってるので、うちの rpm がおかしくなってるのか?
udev 関連の下調べがまだ出来てないし、基本的なところに少し勉強時間が必要ですね。
しかし今週も、何も出来ないことが判っています。すいません。

# と思いながらメインの Seed の方も apt-get しようとしたら沢山入れ換えがあるみたい。
# 今日は何もしない、何も足さないで寝るのが吉かも。
全52件 - 01 02 03 04 05 06