64bits
linux で 64 ビット環境を構築。そして64ビットマルチプロセス対応プログラムを作る - 志を立てるのに、遅すぎることはない -- by ピカソ河
このまま記事を入力し[投稿する]ボタンを押せば当サイトに送信されます。
以下の文章は注意書きです。
名前はかならず記入してください。ハンドルネームでも構いません。
またパスワードを入力することをお勧めします。
その場合他人による *なりすまし* と区別出来るかもしれません。
さらにブラウザでクッキーを有効に設定してある場合あなたの記事は後で修正可能になります。
コメントスパム防止のため記事の内容を機械的にモデレート
(スパムである確率を計算)
する処理を通します。
どのような投稿であれ、たまたま計算誤差によりスパムとみなされ
秘密の場所
に収納される可能性があります。
その場合、管理人が手作業で正規の場所に移動しますのでお待ちください。
-
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 しようとしたら沢山入れ換えがあるみたい。
# 今日は何もしない、何も足さないで寝るのが吉かも。
-
35
owa
2006/05/19 22:59
id: mJs8kxp1Zus
prob: 0.2%
-
-
Vine は lib/lib64 ですが lib32/lib の組合せもあるらしい。その方が自然かも。
ただ 32 ビットモードで動作するプログラムは lib/lib64 の組合せでないと動きません。
http://japan.linux.com/desktop/06/05/19/0241229.shtml?topic=...
その中で紹介されてるのが mozilla の i386 版 plug-in を x86_64 で使うためのラッパー
http://www.gibix.net/dokuwiki/en:projects:nspluginwrapper
とりあえずリンクだけ
|