ビット演算
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2005/08/13(土) 16:27:550002デフォルトの名無しさん
2005/08/13(土) 16:29:010003デフォルトの名無しさん
2005/08/13(土) 16:33:44下位5ビットを0埋めする場合。
a = ( a >> 5 ) << 5;
a &= ~(( 1 << 5 ) - 1);
0004デフォルトの名無しさん
2005/08/13(土) 16:39:53nは2のべき乗-1
++a &= n;
0005デフォルトの名無しさん
2005/08/13(土) 16:40:04ttp://www.hackersdelight.org/
ハッカーのたのしみ―本物のプログラマはいかにして問題を解くか
ttp://www.amazon.co.jp/exec/obidos/ASIN/4434046683
0006デフォルトの名無しさん
2005/08/13(土) 16:41:06a = 0;
a ^= 1;
0007デフォルトの名無しさん
2005/08/13(土) 17:30:24flag = bitmap & ((~bitmap)+1)
bitmap = 0xfffff000 の時 flag は 0x1000 になる。
0008デフォルトの名無しさん
2005/08/13(土) 17:40:44それは厨房くさくないのでスレ違い
0009デフォルトの名無しさん
2005/08/13(土) 18:36:520010デフォルトの名無しさん
2005/08/13(土) 23:46:59下位5ビットを0埋めする場合。
a = ( a >> 5 ) << 5;
a &= ~(( 1 << 5 ) - 1);
0011デフォルトの名無しさん
2005/08/14(日) 02:57:28int m = (a - b) >> 31;
return ((a ^ b) & m) ^ a;
}
あってるかな??
0012デフォルトの名無しさん
2005/08/14(日) 09:07:16言語でCRC16を書いてください。
0013デフォルトの名無しさん
2005/08/14(日) 22:26:510014デフォルトの名無しさん
2005/08/15(月) 15:28:43おまえ、馬鹿じゃねぇの?
俺が正しい見本を書いてやる!
std::cout << "CRC16" << std::endl;
0015デフォルトの名無しさん
2005/08/16(火) 15:06:010016デフォルトの名無しさん
2005/08/16(火) 15:44:09しかしベッチ演算の面白さは自分で考えることにある。
面白いテクニックを発見した時は射精に至ることも多々。
0017・∀・)っ-●◎○- ◆Pu/ODYSSEY
2005/08/17(水) 00:50:17読んだ中ではHacker's Delight(邦訳:ハッカーのたのしみ)以上の本は無い
0018デフォルトの名無しさん
2005/08/17(水) 17:57:04ありがとうございました。
つ -●◎○-
0019デフォルトの名無しさん
2005/08/17(水) 18:56:28int a = 123, b = 234;
a ^= b; b ^= a; a ^= b;
printf("a = %d, b = %d\n", a, b);
0020デフォルトの名無しさん
2005/08/17(水) 19:00:49xをuの単位に切り上げる。
uは2のべき乗でなければならない。
0021デフォルトの名無しさん
2005/08/17(水) 19:54:42それは普通のスワップより高速ですか?
0022デフォルトの名無しさん
2005/08/17(水) 20:01:53メモリの使用量で有位かな?
0023デフォルトの名無しさん
2005/08/17(水) 20:19:40カリカリチューニング用コードですか。
0024デフォルトの名無しさん
2005/08/17(水) 20:23:260025デフォルトの名無しさん
2005/08/17(水) 21:04:190026・∀・)っ-●◎○- ◆Pu/ODYSSEY
2005/08/17(水) 21:48:26>>22 レジスタ使えよ
>>23 むしろ劣化
>>24 STLのstd::swapでも使って露
>>25 だから遅いってばよorz
0027デフォルトの名無しさん
2005/08/17(水) 23:25:40Hacker's Delight読め。
0028・∀・)っ-●◎○- ◆Pu/ODYSSEY
2005/08/17(水) 23:42:02a ^= b; ・・・(1)
b ^= a; ・・・(2)
a ^= b; ・・・(3)
(2)は(1)の演算が終わるまで、(3)は(2)が終わるまで実行できない。だから3クロックかかる。
これがいわゆる依存関係ってやつで、モダンなCPUアーキテクチャでは好まれない。
t = a; ・・・(1)´
a = b; ・・・(2)´
b = t; ・・・(3)´
これなら、ALUが2個以上有る場合、(1)と(2)、もしくは(2)と(3)を並列実行できるから2クロックほどで済む。
もっとも1インストラクション1クロックという前提の話だけど。
0029・∀・)っ-●◎○- ◆Pu/ODYSSEY
2005/08/17(水) 23:47:390030デフォルトの名無しさん
2005/08/18(木) 01:34:050031デフォルトの名無しさん
2005/08/18(木) 12:46:180032デフォルトの名無しさん
2005/08/18(木) 13:53:590033デフォルトの名無しさん
2005/08/18(木) 14:18:52ζ関数をCで書いてみてください
0034デフォルトの名無しさん
2005/08/18(木) 20:56:49int main(void) { printf("ζ関数\n"); return 0; }
0035デフォルトの名無しさん
2005/08/18(木) 21:59:380036デフォルトの名無しさん
2005/08/19(金) 21:43:42最適化でレジスタに割り振られるから
ビット演算よりも高速ってこと?
最近のCPU(i586以降)だと無意味どころか
有害なビット演算って>>28以外にどういうのがあるの?
0037デフォルトの名無しさん
2005/08/19(金) 22:57:03例えば乗算の代わりにビットシフトを使うと、CPUによっては却って遅くなる。
0038デフォルトの名無しさん
2005/08/20(土) 01:53:34ということは、nビットシフトを2**n乗算に置き替えるのがモダンなビット演算だね
0039デフォルトの名無しさん
2005/08/20(土) 02:09:120040デフォルトの名無しさん
2005/08/20(土) 03:23:510041デフォルトの名無しさん
2005/08/20(土) 03:26:26誰か教えて。お願い。
0042デフォルトの名無しさん
2005/08/20(土) 08:09:13例えばx86系ならば、8086-80286までは多ビットシフトの演算器を持っておらず
1bitシフトを繰り返していたため、時間がかかった。
80386以降は、バレルシフタというもの(結構面積を取るらしい)が組み込まれたので
何ビットシフトしようと、同一クロックで処理できるようになった。
ただし、32bit以上のシフトはマスクされるようになった。
と、どっかの本に載ってた。
0043デフォルトの名無しさん
2005/08/20(土) 10:50:17そんなCPUで積算が高速に実行できるとでも?
0044デフォルトの名無しさん
2005/08/20(土) 12:33:50んなもんCPUの実装による
0045デフォルトの名無しさん
2005/08/20(土) 15:08:27そうだけど、脳内CPUじゃなくてさー、実例を挙げてくれよー
0046デフォルトの名無しさん
2005/08/20(土) 16:11:070047デフォルトの名無しさん
2005/08/20(土) 16:21:000048デフォルトの名無しさん
2005/08/20(土) 16:28:04なんだかんだ言い逃れして絶対に挙げないのは分かってるけど
0049デフォルトの名無しさん
2005/08/20(土) 16:35:320050デフォルトの名無しさん
2005/08/20(土) 17:04:010051デフォルトの名無しさん
2005/08/20(土) 17:28:48☆ チン 〃 ∧_∧ / ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< 実例マダー?
\_/⊂ ⊂_)_ \______
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄ ̄ ̄ ̄:| |
| Intelはいってる .|/
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
0052デフォルトの名無しさん
2005/08/20(土) 22:07:25じゃなきゃトンズラと見なしますんで。
0053デフォルトの名無しさん
2005/08/20(土) 23:12:31勝手にどうぞ。
独りで高らかに笑っててください。捕まらん程度に。
0054デフォルトの名無しさん
2005/08/21(日) 00:04:120055デフォルトの名無しさん
2005/08/21(日) 00:59:12哀れな
0056デフォルトの名無しさん
2005/08/21(日) 11:48:16(何か言いたげなのに何故か他人に書かせることばかり必死なのはそのせい)
というのはもうお約束だな。
0057デフォルトの名無しさん
2005/08/21(日) 11:51:50>例えば乗算の代わりにビットシフトを使うと、CPUによっては却って遅くなる。
で、こういうCPUは存在するのか?
0058デフォルトの名無しさん
2005/08/21(日) 13:12:54じゃあ昔はどうだったかって考えても、高速乗算回路じゃBoothのアルゴリズムを
使ってたんだから乗算するのにそもそもシフト使ってるわけで。
最近の乗算はどうやってるんだろうな。Boothはもう使ってないのか?
0059デフォルトの名無しさん
2005/08/21(日) 13:59:25実例を出さない代わりにねちっこい質問を延々相手にぶつけ続けて、
相手が自分を放置し次第、一度も実例を出さないまま「相手は逃げた。やっぱり俺は正しい」と
勝利宣言する作戦か。
0060デフォルトの名無しさん
2005/08/21(日) 14:11:18ビットシフトが1ビットシフト命令しかない8086という16ビットCPUならまだ現役ですが何か?
0061デフォルトの名無しさん
2005/08/21(日) 14:17:06させてやりな。それで彼に英知が身に付くわけでなし。
0062デフォルトの名無しさん
2005/08/21(日) 18:19:25addを4回続けた方が早いCPUならまだ存在する。
0063デフォルトの名無しさん
2005/08/21(日) 21:29:020064デフォルトの名無しさん
2005/08/23(火) 03:24:040065デフォルトの名無しさん
2005/08/23(火) 08:39:000066デフォルトの名無しさん
2005/08/23(火) 16:44:39ビット演算じゃなかったかも。
0067デフォルトの名無しさん
2005/08/23(火) 17:03:28Zellerの公式のことかな?たしかにこれはビット演算ではないわけだが。
http://www.kumei.ne.jp/c_lang/intro/no_41.htm
0068デフォルトの名無しさん
2005/08/23(火) 23:41:48y2 = (x1 * cos[dg]) - (y1 * sin[dg]);
な点の回転を掛け算使わずにシフトでやるとか見たような気がする。
0069デフォルトの名無しさん
2005/08/24(水) 10:56:570070デフォルトの名無しさん
2005/08/24(水) 11:20:37そもそも回転になってない式持ち出されても。
回転なら、
x2 = x1 * cos(dg) - y1 * sin(dg)
y2 = x1 * sin(dg) + y1 * cos(dg)
だと思うのだが。
で、要は三角関数をテーブル参照して、乗算をシフトでやるってこと?
精度が出そうにないし、8or16ビットCPU時代のゲームの話かな?
0071デフォルトの名無しさん
2005/08/26(金) 01:08:47人をバカにするだけの人生に何の意味があるのか。
0072デフォルトの名無しさん
2005/08/26(金) 01:24:30>70は馬鹿にしてないと思うのだが。それとも、あなたは被害妄想爆発の>68ですか?
0073デフォルトの名無しさん
2005/08/26(金) 01:54:03ただ誰かを叩きたくてうずうずしてるパーポリンだろ( ´_ゝ`)
0074デフォルトの名無しさん
2005/08/26(金) 21:57:31思うのは自由ですが、あまり自分の鈍くさい判断力を
他人に当てはめない方がいいですよ。
007570
2005/08/26(金) 22:21:420076デフォルトの名無しさん
2005/08/26(金) 22:53:15(´・ω・`)カワイソス
0077デフォルトの名無しさん
2005/08/26(金) 23:36:420078デフォルトの名無しさん
2005/08/27(土) 03:04:350079デフォルトの名無しさん
2005/08/27(土) 05:23:49わかんね
今はif文の方が速いと思う
勘だけどな
0080デフォルトの名無しさん
2005/08/27(土) 07:33:01ステップ数がどの条件でも同一という利点以外はないよ。
0081デフォルトの名無しさん
2005/08/27(土) 07:35:00分岐が無いから、命令キャッシュが無駄にならない。
0082デフォルトの名無しさん
2005/08/27(土) 08:57:330083デフォルトの名無しさん
2005/08/27(土) 10:37:36実在するよ。
初期のSHは1,2,8とかの決まったシフト数しか左シフト出来なかったんで
シフトを組み合わせないといけなかったから。
DSP系だと、掛算は専用掛算器を持っているし
シフタもバレルシフタを持っているのだけど、
命令長の関係からシフトするのにレジスタをあちこち移動しなくちゃいけなくて
掛算した方が早いという場合がたまに出てくる。
0084デフォルトの名無しさん
2005/08/27(土) 10:52:21書いて試してみればいいじゃない。
でも、Cだとコンパイラによるかもね。
(a - b) >> 31 をSUB+CWD命令に置き換えてくれるくらい賢いならいいんだけど
0085デフォルトの名無しさん
2005/08/27(土) 15:02:03初期のSHってどこまで?
0086デフォルトの名無しさん
2005/08/27(土) 16:24:43そんぐらい自分で調べろヴォケ屑!
0087デフォルトの名無しさん
2005/08/27(土) 16:59:031,2シフトはわかるとしても、8シフトの中身は本当にシフト命令になってるんだろうか・・・?
0088デフォルトの名無しさん
2005/08/27(土) 17:17:130089デフォルトの名無しさん
2005/08/29(月) 17:47:340090デフォルトの名無しさん
2005/08/30(火) 07:43:011,2,8,16のシフトはそれぞれ1サイクル命令
16x16の掛算も1サイクル命令(ただし結果を利用出来るのはさらに2サイクル後)
0091デフォルトの名無しさん
2005/09/04(日) 13:19:120092デフォルトの名無しさん
2005/09/05(月) 07:37:15ttp://www.tensyo.com/urame/prog/ALGO.HTM
より
/************************************************************
符号無し同士の加算をし、結果がオーバフローしたら最大値にする
unsigned ClipAddUU(unsigned a,unsigned b)
{ unsigned c=a+b;
if(c>=a && c>=b) return c;
return (unsigned)-1;
}
************************************************************/
unsigned ClipAddUU(unsigned a,unsigned b)
{
unsigned c;
_asm {
mov eax,a ;
add eax,b ;
xor ecx,ecx;
sbb ecx,0 ;
or eax,ecx ;
mov c,eax; /*帰値はeaxなので不要だが警告を黙らせる為*/
};
return c;
}
0093デフォルトの名無しさん
2005/09/05(月) 09:06:280094デフォルトの名無しさん
2005/09/05(月) 09:39:460095デフォルトの名無しさん
2005/09/05(月) 09:52:35unsigned ClipAddUU(unsigned a,unsigned b)
{
unsigned c=a+b;
return c|-(c<(a|b));
}
0096デフォルトの名無しさん
2005/09/05(月) 10:04:540097デフォルトの名無しさん
2005/09/05(月) 10:20:29為になりそうでならないところがいい。
0098デフォルトの名無しさん
2005/09/05(月) 11:08:33そんなこたない
0099デフォルトの名無しさん
2005/09/05(月) 13:09:340100100
2005/09/06(火) 01:14:500101・∀・)っ-●◎○- ◆Pu/ODYSSEY
2005/09/08(木) 08:14:36Pentium4のことかぁぁぁ
あれは上下16ビットに分かれててタイミングずらして演算するからね。
単純なビット論理や加減算なら1命令0.5クロックだけどシフトは4クロック
だったような。Prescottはよく知らないけど。
0102デフォルトの名無しさん
2005/09/09(金) 22:05:320103・∀・)っ-●◎○- ◆Pu/ODYSSEY
2005/09/09(金) 22:23:14のs2関数をAltiVecの AND / AND-NOT / OR / NOR / XOR で構成し直して
50ゲート以内に納めたら神認定。
0104名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:01:210105・∀・)っ-●◎○- ◆Pu/ODYSSEY
2005/09/11(日) 17:35:01やねうらおの「Windowsプロフェッショナルゲームプログラミング」
って本かな。
MMXを使わずにアンパック演算やサチュエーションとか
整数ALU/レジスタで小数として使う方法とか載ってるけど
ゲームに関わらずWindowsでC/C++な人は読んでみると良いかも。
あと、Hacker's Delight公式サイトにそれなりの有用なリンクがあるよん。
この本の日本語版が出たのって某東大生のページで取り上げられてから
1年くらい後だったな。
0106名無しさん@そうだ選挙に行こう
2005/09/11(日) 17:39:39ビット演算に触れてるのは、「Windowsプロフェッショナルゲームプログラミング2」のほう
0108デフォルトの名無しさん
2005/09/28(水) 12:17:360109デフォルトの名無しさん
2005/10/08(土) 07:10:370110デフォルトの名無しさん
2005/10/28(金) 22:31:00【拷問ビデオ】恋人がAVに出演してた【許すな!これはAVじゃない】
http://ex10.2ch.net/test/read.cgi/news4vip/1130499649/
0111デフォルトの名無しさん
2005/10/31(月) 21:18:17何と、シフト1命令とadd8命令が同じ速さ
http://www.marumo.ne.jp/db2002_7.htm#25
0112デフォルトの名無しさん
2005/11/01(火) 19:44:270113デフォルトの名無しさん
2005/11/02(水) 18:16:300114デフォルトの名無しさん
2005/11/03(木) 01:58:38それなりに有名かもしれないけど128倍までならadd %eax, %eaxの方が速いってことだよね。
「変態」なだけで自慢できることじゃないけど。プレスコだとこれまで0.5サイクルだったのが
1サイクルになってしまったのであまり意味内。
0115デフォルトの名無しさん
2005/11/03(木) 04:10:34左シフトはそれでいいかもしれないけど右シフトはやっぱり4クロックかかるわけで。
やっぱPentium Mのほうが立派だわな。
0116デフォルトの名無しさん
2005/11/03(木) 16:26:260117デフォルトの名無しさん
2005/11/04(金) 15:55:05多ビットシフトで掛け算が一番速いのってプレスコか?
いや、さすがにレイテンシ4のシフトのが速いだろ。
0118デフォルトの名無しさん
2005/11/04(金) 18:12:16乗算がシフトより早いなんてありえないじゃん。
IMUL レイテンシ 14 スループット 3
MUL レイテンシ 14-18 スループット 5
0119デフォルトの名無しさん
2005/11/04(金) 18:23:360120デフォルトの名無しさん
2005/11/04(金) 18:39:29ガイシュツ
0121デフォルトの名無しさん
2005/11/04(金) 22:17:41SH1/2/DSPマニュアルでは、
シフト命令 1ステート
乗算 1(2)〜3(4)ステート
ってあり、これはSH1でも変わらない。
DSPからバレルシフタは載ってるけど。
0122デフォルトの名無しさん
2005/11/04(金) 22:23:35ということは4bit以上シフトするなら乗算の方がいいのか
0123デフォルトの名無しさん
2005/11/04(金) 22:46:53ちがうって。
1、2、8から4つ以上を重複組合せで取って合計しないと表せない数で
シフトを行う時は乗算が絶対速い。
逆に3つ以内だとシフトのほうが早い可能性がある。
具体的に挙げていくと
・1つで済む
1、2、8
・2つで済む
3、4、6、7、9、10、16
・3つで済む
5、11、12、14、15、17、18、24
てな感じでSH1/2の実用的な範囲では13以外は表せる。
0124デフォルトの名無しさん
2005/11/04(金) 23:15:12今問題にしてるのは、
シフトの代わりに乗算を使った方が早いっていうCPUがあるのか?
だと思ってたけど。
0125デフォルトの名無しさん
2005/11/04(金) 23:58:07やはりシフト用実行時ルーチンを読んで、中で分岐か。
13とか19は掛け算になってるのかな。
0127デフォルトの名無しさん
2005/11/05(土) 01:34:13アドレス生成ユニット使うから、ALUで実行する別の命令と並列化できる。
0128デフォルトの名無しさん
2005/11/05(土) 20:37:41けど、とにかく高速に処理をしたいと思っています。
何か良い方法はありますか?
使っているのはSH-2の7145です。
とりあえず、RAMに0を代入して、その領域と任意の変数(初期値0)とORしていき、次のRAMをクリア。
最終的にその任意の変数が0になっているかを確認という方法をとっています。
0129デフォルトの名無しさん
2005/11/05(土) 20:59:44ゼロクリアって言ったら昔こんなのなかったっけ?
xor eax, eax
たしか
mov eax, 0
より高速だとか聞いたけど。
SH1でどうかは知らん。
0130デフォルトの名無しさん
2005/11/05(土) 21:38:44よく状況がわからんけど、
もしメモリマップドI/Oのレジスタ操作なら、ターゲットのI/Oの仕様を確認して
必要なウェイト数だけ待たなければならない。
そうでなく単なるRAMなら0になった確認など要らないと思う。
0131デフォルトの名無しさん
2005/11/05(土) 22:46:11ネタに釣られないように。
制御系関連のスレで同じ質問見たことある。
0132デフォルトの名無しさん
2005/11/05(土) 23:22:31ようは、きちんと任意のRAMがクリアされているかの確認です。
仕様上、確認するようにとのことです。
もう少し、他に例を挙げるなら、電源投入時にRAMのチェックってやりますよね?
(0xAAAAAAAAや0x55555555など書き込んでチェック)
あれを速くする方法などありますか?
0133デフォルトの名無しさん
2005/11/06(日) 00:23:16なぜ、Aと5を書き込むのかよく考えれ。
0134ちょっとからかってみるか…。
2005/11/06(日) 00:53:380135デフォルトの名無しさん
2005/11/06(日) 00:58:18RAMが壊れてても、0xFFか0x00返すからな。
0136デフォルトの名無しさん
2005/11/06(日) 01:02:36そうそう、データ線のショートのチェックもしたいなら、1ビットづつシフトさせて書き込みチェックな。
0137デフォルトの名無しさん
2005/11/06(日) 01:22:460138デフォルトの名無しさん
2005/11/06(日) 01:32:04まあ、データバッファとかが壊れたらそうだろうけど、メモリセルの一ビット
故障だと 0x55/0xAA が特に優れてるわけじゃないよね。
>>136
> アドレスの下位ビットが同じ場所には別のアドレスの情報が転写されてる場
> 合
落ち着いて、日本語をしゃべれよ。
0139デフォルトの名無しさん
2005/11/06(日) 01:36:52十分日本語だぜ?
わからねえ奴には何言ってもわからねえらしいな。
0140デフォルトの名無しさん
2005/11/06(日) 01:42:55逃さないようにアクセスすることも考えるべきかな。
>>136
データ線の影響なら、最下位ビットとその他のビットのエラーになる確率は変わらないと思うよ。
0141デフォルトの名無しさん
2005/11/06(日) 01:43:54メモリーセルの1ビットの故障を調べるなら、なおさら0x00なんかより、0x55と0xAAを何回か書き込んでみる方がよっぽどマシだぞ。
0142デフォルトの名無しさん
2005/11/06(日) 01:48:20でもまあ他のパターンよりかは、5とAを交互に行うのが一番効率は良いよね。
俺は、0とFのパターンとか、特定ビットだけが違う(例 E, D, B, 7とその反転)のも行うけど。
0143デフォルトの名無しさん
2005/11/06(日) 01:55:19キャッシュあり・なし(ミスヒット)パターンなんてのもやらないと意味がない。
0144デフォルトの名無しさん
2005/11/06(日) 02:07:46ハイハイ、俺様日本語ね。
おまえがアフォだということだけは、伝わったよ。(w
>>141-142
だから、なぜ 0x55, 0xAA がいいのか理由を書いてよ。
0145デフォルトの名無しさん
2005/11/06(日) 02:11:19ヒント:2進数表記
0146デフォルトの名無しさん
2005/11/06(日) 02:11:42それでも判らないのなら、H/Wのお勉強をしろ。
0147デフォルトの名無しさん
2005/11/06(日) 02:15:16>>138以降のやりとりを見ててだな、
お前以外はみんな言ってる意味が判ってるとは思わんか?
そこに噛み付いてるのはお前だけだろが。
0148デフォルトの名無しさん
2005/11/06(日) 02:39:38メモリバケの要因は大量にあるので、ほんのさわりだけ。
念のために、俺はソフト屋でありハードウェアのことは門外漢なのであしからず。
隣接線上の影響とかではなく、純粋にメモリセルビットの故障なら、
0を書き込んでも1を書き込んでも、どっちでも0になるとか、
また逆に、
0を書き込んでも1を書き込んでも、どっちでも1になるとかいうことが考えられる。
この場合だけなら、0とFを交互に書き込んでも、5とAの場合と効率は同じ。
次に、隣接データ線が影響するような場合、
あるbitにread/writeしたものが、実は別のbitに対するread/writeに引きずられるとかいう場合
0とFでは見逃す可能性が大きくなる。
もちろん5とAでもそれは言えるが。
さらに、隣接データ線により多くの同じデータが流れる場合、
周りのデータに合わせたデータに化ける可能性もある。
この場合、00とかFFではより化けやすく、かつそれを発見できない。
5とAだと、0と1の量が等しいアクセスとなる。
0149デフォルトの名無しさん
2005/11/06(日) 02:46:54アクセス時間が影響する場合も考えられる。
要するに、直前のアクセスのデータが消えずにそれが流れるような場合。
この場合、0x00とか0x55とかを連続してread/writeすると検出できない。
なので0x55と0xAAを交互にアクセスするのが良い。
0150デフォルトの名無しさん
2005/11/06(日) 03:49:07書き込み後、リフレッシュ保持時間以上の間隔を空けてベリファイする。
0151デフォルトの名無しさん
2005/11/06(日) 09:59:06あんまりに簡単に釣られすぎ。(w
n bit × 1 のメモリを並べたメモリモジュールなら、各々のメモリーにとっ
て見れば 0x00, 0xFF を書くのと 0x55, 0xAA を書くのは違いはないだろ。
それこそ、>>145-146 が言うように、2進数表記 (ビット単位) で考えれば明
らかだろ。偉そうに H/W のお勉強とか言ってると恥をかくぞ。
で、マルチビットメモリーなら 0x55, 0xAA が有利なのかい?
>>147
アドレス線について語ってるのは、>>140 だけ。
しかも、アドレス線ショートについて一般的なこと言ってるだけ。
まあ、>>136 がなに言ってるかわからんから無視されてもしょうがないわ
な。(w
>>149-150
まあ、そこまで言い出すときりがない。
そもそも、D-RAM はデータ読んだだけでそのデータが消えちゃうんだから、読
み出しだけでも他のセルに影響与えるからね。
0152デフォルトの名無しさん
2005/11/06(日) 11:41:490153デフォルトの名無しさん
2005/11/06(日) 11:56:24話についていけないなら、無理してついてこなくていいんだよ。。(w
0154デフォルトの名無しさん
2005/11/06(日) 13:21:550155デフォルトの名無しさん
2005/11/06(日) 13:23:37別にメモリのテストではなく、ある処理をしていて、磁気データやバーコードデータ
をある動きの中でゼロクリア&確認したいだけです。
0156デフォルトの名無しさん
2005/11/06(日) 13:58:52だからどういうエラーが考えられるのかは、
メモリとかのH/Wを勉強しないと分からないだろ?
0157デフォルトの名無しさん
2005/11/06(日) 14:00:41マルチスレッドなら、そういう確認は意味がなく、排他制御を考えた方が良いよ。
0158デフォルトの名無しさん
2005/11/06(日) 14:04:32配線によるエラーって、それこそチップ内部の配線で
特定のメモリセルブロックのみ断線とか混線とかしてる場合とか
コンデンサのチャージエラーとかグランドへの抜け(ショート)とかって話だよね?
0159デフォルトの名無しさん
2005/11/06(日) 14:44:070160デフォルトの名無しさん
2005/11/06(日) 16:04:27お前、2進数だって説明で納得できるのか?
俺なら、0x00と0xffの場合とどう違うんだ?って思うぞ。
だからこそ、H/Wの勉強が必要なんじゃないのか?
0161デフォルトの名無しさん
2005/11/06(日) 22:09:25いったいどの分野を指してるんだ?
0162デフォルトの名無しさん
2005/11/08(火) 23:47:07それは録音様がこのスレにも降臨なされたという意味ですか?
0163デフォルトの名無しさん
2005/11/09(水) 09:16:090164デフォルトの名無しさん
2005/11/16(水) 08:57:48遅レスだが、H/W診断プログラムを作成するのに
対象のH/Wを熟知してなきゃダメだろって思うんだが。
0165デフォルトの名無しさん
2005/11/17(木) 06:00:160166デフォルトの名無しさん
2005/11/18(金) 00:10:21このポート、リード専用で、書くと物理的に壊れますから。とかなら経験あるなぁ。
0167デフォルトの名無しさん
2005/11/20(日) 02:50:53というか、outbにラッパー入っててあるポートへの出力に
アサート入ってた
0168デフォルトの名無しさん
2005/11/29(火) 13:52:20x=-!x;
ってどっちが速いの?><
0169デフォルトの名無しさん
2005/11/29(火) 14:56:32>x=-!x;
嫌がらせとしか思えない。
0170デフォルトの名無しさん
2005/11/29(火) 16:23:31!じゃなくて~だろ。
x = -~x; と x++; をgccで試したら同じアセンブラ吐いたので、答えは同じ。
0171デフォルトの名無しさん
2005/11/29(火) 21:18:03勿論x++;の方が速くタイプできるに決まっておろう。
0172デフォルトの名無しさん
2005/11/29(火) 22:49:350173デフォルトの名無しさん
2005/11/29(火) 23:41:18なんで?
0174171≠172
2005/11/29(火) 23:43:07#だとは思うが、このスレでは別に指摘するほどのことじゃないと思う。
0175デフォルトの名無しさん
2005/11/30(水) 00:02:59・・・な気がする
0176デフォルトの名無しさん
2005/11/30(水) 00:36:120177デフォルトの名無しさん
2005/11/30(水) 07:04:07毎日オナニーしています。
0178デフォルトの名無しさん
2005/11/30(水) 07:24:43こう書きたいからなぁ
0179デフォルトの名無しさん
2005/11/30(水) 08:00:28http://www5.atwiki.jp/vc310ice/pages/4.html#id_1308a768
0180デフォルトの名無しさん
2005/11/30(水) 08:22:22x++;の方が速かったです。
inc
と
not
neg
の違いでした。(-O2)
0181デフォルトの名無しさん
2005/11/30(水) 15:36:530182デフォルトの名無しさん
2005/11/30(水) 16:39:580183デフォルトの名無しさん
2005/12/04(日) 16:20:12わかりません><
0184デフォルトの名無しさん
2005/12/04(日) 16:38:41寒い時に使う奴だよ。
0185・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/04(日) 16:44:30モダンなCPUには丁度ベルトコンベアで流れ作業するような感じで、命令の実行までの処理を順番に
流していくための機構が備えられています。これをパイプラインという
これにより、見た目上、1つのパイプラインで1命令1クロックで命令が実行されることになります。
ただ、すぐ次の命令の流れが前の命令の実行結果に依存してる場合、
・投機実行を備えてないプロセッサの場合、分岐先が確定するまで
何を流せばわかりません。したがって、それだけ待たされることになります。
・分岐予測&投機実行なんかが導入されてる場合(大抵のx86アーキはそう)でも、
予測が外れた場合、投機してたステージを全部破棄して再度読み直すことになります。
10ステージのパイプラインなら10クロック+αは、分岐(or投機失敗)のたびに、
命令実行が止まることになります。これがストール。
0186デフォルトの名無しさん
2005/12/04(日) 17:01:080187・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/04(日) 17:09:060188デフォルトの名無しさん
2005/12/04(日) 19:35:52xor eax, eax
0189デフォルトの名無しさん
2005/12/04(日) 19:57:050190・∀・)っ-●○◎- ◆Pu/ODYSSEY
2005/12/04(日) 20:03:36a ^= a;
XOR演算の定義は
入力1 入力2 出力
0 0 0
0 1 1
1 0 1
1 1 0
だから、同じ値でビット排他論理和を取ると、レジスタの値によらず必ずゼロになる。
これは大概の実装ではレジスタに0をロードするより速い。
0191188
2005/12/04(日) 20:05:42詳しい説明ありがとうございました。
0192デフォルトの名無しさん
2005/12/05(月) 02:57:33わかりました><
ストールによるデメリットと、投機実行的中のメリットで期待値はトントンにはならないんですか?
ブランチフリーのが正しい姿勢なのですか?
0193デフォルトの名無しさん
2005/12/05(月) 03:06:54よくよく考えると今の質問はナンセンスでした。
ようするにブランチフリーにすると
パイプライン達を相対的に酷使し続けられるってことですね><
0194デフォルトの名無しさん
2005/12/05(月) 03:09:29っ-●○◎-
0195デフォルトの名無しさん
2005/12/05(月) 04:30:180196デフォルトの名無しさん
2005/12/05(月) 07:12:40SHC(SHっていう日立製CPUのコンパイラ)だと0をセットしてるね。
0197デフォルトの名無しさん
2005/12/05(月) 23:22:52余ったのでお返しします><
0198 ◆CHINPOGEDU
2005/12/05(月) 23:27:39きめぇw
0199デフォルトの名無しさん
2005/12/06(火) 00:28:12そんなトリップ付けた奴に言われたかないだろうな。
0200・∀・)っ-●---- ◆Pu/ODYSSEY
2005/12/06(火) 00:48:370201デフォルトの名無しさん
2005/12/06(火) 21:04:570202デフォルトの名無しさん
2005/12/06(火) 22:23:53#いや、subはフラグに影響を与えるから避けたと言うのが真相だと思うけど。
0203デフォルトの名無しさん
2005/12/06(火) 22:50:44じゃなくて、
フラグ(CY)に依存しないsub命令が8080/Z80には無かったから
XOR A でアキュームレータをゼロにするのが一般的だった。
本当に一番最初にXOR Aを見たときは、「こんなとこで何やってんだ」と思ったけどね。
XORの動作を確認して、初めて納得した。
だって、実際にXORを使う場面なんて、数値演算(暗号/画像等)以外では
ゼロクリア以外無いじゃん?
積極的に使ってあげないと。
0204デフォルトの名無しさん
2005/12/06(火) 22:59:540205デフォルトの名無しさん
2005/12/06(火) 23:49:060206デフォルトの名無しさん
2005/12/06(火) 23:59:24CRC とか パリティとかで
あ、それ数値演算?
っつーか SUB も AND も数値演算ちゃうんかと
0207デフォルトの名無しさん
2005/12/07(水) 09:14:510208デフォルトの名無しさん
2005/12/11(日) 01:01:51MSX2のスプライトで脚光をあびたな
0209デフォルトの名無しさん
2005/12/12(月) 14:40:43x>y
x==y
とか。
0210デフォルトの名無しさん
2005/12/12(月) 15:29:260211デフォルトの名無しさん
2005/12/12(月) 15:45:53addとかより時間かかりますよねきっと
0212デフォルトの名無しさん
2005/12/12(月) 15:51:370213デフォルトの名無しさん
2005/12/12(月) 15:53:040214デフォルトの名無しさん
2005/12/12(月) 16:21:49それは、例えばC言語での記述のことだと思うが、
マシン語の対応が、x,yが何であるのかによって
命令数も変わってくるし、例えそれが純粋な比較命令
cmp EAX, [mem]
一つであったとしても実行時間は
すんなり行けば、1サイクル(なおP4だと、1サイクルで最大3命令同時実行できる)
で済むかも知れないが、命令の並びによって余分に掛かることもあるし
最悪ペナルティが発生すると数十サイクル掛かることもある。
0215デフォルトの名無しさん
2005/12/12(月) 17:10:110216デフォルトの名無しさん
2005/12/16(金) 15:17:480217デフォルトの名無しさん
2005/12/16(金) 15:19:190218デフォルトの名無しさん
2005/12/16(金) 16:38:36ある数nを2進数表示して
n=u[0]+u[1]*2+u[2]*2^2+…
としたときのu[0〜N]を扱いたいんですが
どのようにしていいかわかりません。
もっと具体的に書くとある数aに対して
a^u[0],(a^u[1])^2,(a^u[2])^4,…
を求めたいのです。
わかりやすく教えていただけるとありがたいです。
よろしくお願いします。
0219デフォルトの名無しさん
2005/12/16(金) 17:05:290220デフォルトの名無しさん
2005/12/16(金) 17:17:260221デフォルトの名無しさん
2005/12/16(金) 17:30:020222ハーピィ
2005/12/17(土) 18:44:270223デフォルトの名無しさん
2005/12/18(日) 00:53:38即値使うより命令サイズが小さくなるからじゃなかったっけ?
0224デフォルトの名無しさん
2005/12/18(日) 01:00:57ただ、何故subじゃなくてxorなの?という話だった気がする。
0225・∀・)っ-●---- ◆Pu/ODYSSEY
2005/12/18(日) 01:27:57ビット演算は原則的に同じビット同士で演算すればいいけど、算術演算は桁上げがあるから
回路の負担も大きいわけ。
実装によりSUBがXORより遅くなる可能性はあるが逆は原則としてないじゃん。
いずれにせよ、同じレジスタ同士のXOR演算はレジスタリネーミングのヒントを与える効果もあるし
(少なくともここ最近のIntel CPUの実装ではそう)積極的に使うべきである。
0226デフォルトの名無しさん
2005/12/18(日) 03:11:54・・・仮にそうだとしてもホントにどーでもいいレベルの差だろうけどw
0227デフォルトの名無しさん
2005/12/18(日) 03:30:20同期回路ならまずそれはないな
0228・∀・)っ-●---- ◆Pu/ODYSSEY
2005/12/18(日) 03:50:180229デフォルトの名無しさん
2005/12/18(日) 04:14:49「x86でsubではなくxorが使われるようになった理由」にPen4を持ち出すとは。
まあxorは単独bitで演算できるのは事実だが
8086や80386でレイテンシやスループットに差があったのか
調べてから書き込んだ方が、バカをさらさないで済むと思うぞ。
#俺は調べる気はないから、本当に差がある可能性もあるけどな。
0230・∀・)っ-●---- ◆Pu/ODYSSEY
2005/12/18(日) 04:20:02攻撃的な人ですね。
事実を証明できない、調べる気もないならそんな縦読みできない長文を赤い顔して書きなさんな。
0231デフォルトの名無しさん
2005/12/18(日) 04:29:020232・∀・)っ-●---- ◆Pu/ODYSSEY
2005/12/18(日) 04:33:42http://www.intel.com/design/intarch/intel186/docs_186.htm
>>229は英語読めるようになってから出直してきてください
0233デフォルトの名無しさん
2005/12/18(日) 04:34:47x86が世に出て、コンパイラがゼロクリアに(x86の)xorを使うようになった時代に
Pentium4は有りませんでした。
証明終
0234・∀・)っ-●---- ◆Pu/ODYSSEY
2005/12/18(日) 05:13:32ノイマン型コンピュータが発明されてから、論理回路の理論は殆ど何も変わってないのですよ。
で、マニュアルによると
ADD/SUB/ADC/SBB
reg/memory with register to either 3/10
immediate from register/memory 4/16
immediate from accumulator 3/4
AND/OR/XOR
reg/memory and register to either 3/10
immediate to register/memory 4/10
immediate to accumulator 3/4
だそうだ。
ftp://download.intel.com/design/intarch/manuals/27095003.pdf
どうみてもXORのが優勢です。本当にありがとうございました。
Pentium4を例として挙げたのは、16ビットのALUを2個束ねたものを動作クロックずつタイミングずらして
実行するものだから。スタガードALUっていうらしいけど。
暇だったらZ80のマニュアルも調べてみて。こいつも「8ビットCPU」だが内部は4bitニコイチ実装だったはず。
0235・∀・)っ------- ◆Pu/ODYSSEY
2005/12/18(日) 05:14:55●XORじゃなくてSUB使うこと推奨してるはずだし
0236デフォルトの名無しさん
2005/12/18(日) 05:35:28必死だね
0237デフォルトの名無しさん
2005/12/18(日) 09:10:29↑コイツ同期回路の意味分かってねーな
0238デフォルトの名無しさん
2005/12/18(日) 12:08:450239デフォルトの名無しさん
2005/12/18(日) 13:48:34直接ゼロ書き込むほうが速そうな気もするが・・・
XORだとメモリの内容を一度レジスタに入れて、さらにそれを他のレジスタにコピー
し、XORした結果(当然ゼロ)をメモリにいれることになるよね?
お馬鹿ですまん・・・
0240・∀・)っ->229>237>238- ◆Pu/ODYSSEY
2005/12/18(日) 14:34:07とりあえず、XORよりSUBでゼロクリアしたほうが速い処理系ってのは存在し得ないでしょ。
他の演算を見ても、仮に半分のビット数のALUを2回使って出力を得るような構成だったとしても、
同じ桁のみの演算で完結するならビット論理演算は繰上げ/繰下げを無視して実行できるから、
XORがSUBと同等かそれより少ないクロックで実行できることはどんな処理系
消費電流の観点から言ってもSUBを敢えて使う理由はない。
全加算器の実装だけど、入力がx, yとci(carry-in), 出力がsとco(carry-out)とすると
s = XOR(XOR(x, y), ci)
co = OR( OR( AND(x, y), AND(x, c0) ), AND(y, c0) )
まぁ基本的な素子もNANDもしくはNORの複数の組み合わせで扱われることが多いんだけど
全加算器でXOR2個分は少なくとも使うわけだから少なくとも必要なゲート数は圧倒的に加算のほうが多い。
引き算は2の補数に変換して1加えたものを足すから、1を最下位ビットの全加算器のcarry-inとして
扱っても、ビット反転+足し算だから、これより更にNOTゲート1個分ずつ増える。
>>239両方の入力に同じレジスタから信号通すように回路を組めばいいでしょ。
レジスタの内容のコピーってなにげに時間かかるよ。
0241・∀・)っ->229>237>238- ◆Pu/ODYSSEY
2005/12/18(日) 14:36:44×1の補数に変換して
ここは理屈としてはこういうことなんだけど
-x == ~x + 1
0242・∀・)っ->229>237>238- ◆Pu/ODYSSEY
2005/12/18(日) 14:48:26俺に噛み付いてる香具師は電子の移動速度が無限に延ばせるとでも思ってるわけじゃないでしょうけど。
移動速度の限界があるからこそ、Pen4の倍速ALUは32ビットではなく16ビット×2という構成をとらざるを得なかった。
0243デフォルトの名無しさん
2005/12/18(日) 16:32:490244デフォルトの名無しさん
2005/12/18(日) 17:43:38subでもよい場面も数多くあっただろうけど、わざわざその場合だけsubにするのは逆に変だし
バグりそうな気がしてね。(あくまで気がするだけでこんなことで本気でバグるとは思ってない)
あと読む人だってxorの方が慣れてるだろうし。
今じゃ、別な意味でxor使うね。(暴れている人の意見に同意)
昔は、xorなんてループの外に出すものと決まってたけど
逆にループの中に入れて毎回実行させるほうが圧倒的に早い場面もあるし。
0245デフォルトの名無しさん
2005/12/18(日) 18:27:53一応念のために聞きますが・・・
0246デフォルトの名無しさん
2005/12/18(日) 18:39:33ゼロを代入
MOV #0, R1
MOV.L R1,@R4
XOR
MOV.L @R4, R6
MOV.L @R4, R2
XOR R2, R6
MOV.L R6,@R4
コンパイラはSHC(SHっていわれるCPU用のコンパイラ)です(ver9.0)
0247デフォルトの名無しさん
2005/12/18(日) 18:40:52どこにでもいるんだよね。
大学時代にとってた教養科目で、算術演算が整数加算しかない仮想
プロセッサで机上プログラミングをする内容の回があったんだが
引き算に補数をとって加算するのを地でやってた。
ネットで調べてみるに、どうやら昔の安いプロセッサって大抵
こういう実装だったらしい。
XOR使うって慣習はこの頃に確立されてたんじゃねーのかね。
算術演算がXOR演算を部分的に利用して実装している以上、XORそのものより
クロック数が多くなることはあっても少なくなることは絶対にないし、
むしろ高クロック化と多ビット化で桁上げの信号遅延が深刻になり、
再び乖離していくんじゃないかと思う。
だからたとえ今XORとSUBが同じクロックで実行できるとしても
ゼロクリアのXORをSUBに強いて置き換える真似はしない。
0249デフォルトの名無しさん
2005/12/18(日) 20:59:24AND, OR, NOT, NORとかで
XORとかSUBを実現させようと図を作成してみたら面白いよね。
一気にSUB使いたくなくなる。
0250デフォルトの名無しさん
2005/12/18(日) 21:18:34こんなところで真面目に言っても意味ない
図に乗るな!って言って止めればよいだけ
0251デフォルトの名無しさん
2005/12/18(日) 21:30:420252デフォルトの名無しさん
2005/12/18(日) 21:31:180253デフォルトの名無しさん
2005/12/18(日) 21:40:190254デフォルトの名無しさん
2005/12/18(日) 21:43:050255デフォルトの名無しさん
2005/12/18(日) 21:43:43なぜか2chじゃ勝ちになるっていうわけ分からん不思議世界
0256デフォルトの名無しさん
2005/12/18(日) 21:43:50ごめん、SHってなに?
0257デフォルトの名無しさん
2005/12/18(日) 21:44:470258デフォルトの名無しさん
2005/12/18(日) 21:47:28数多く揶揄して、何が何でも勝ち負けに持ち込むんだよな。
0259デフォルトの名無しさん
2005/12/18(日) 21:50:290260デフォルトの名無しさん
2005/12/18(日) 21:57:35MIPS系じゃ命令数もバイト数も増えないし、実行時間も変わらんし。
0261デフォルトの名無しさん
2005/12/18(日) 22:21:20仕方あるめー、*R4 が必ず同じ値を読み出す保証なんてないから
*R4 ^= *R4; みたいなコード書いたらそのようなコード吐くわな。
>>252-253
MC68000 では clr.l dn より moveq #0,dn の方がなぜか速かったな。
0262デフォルトの名無しさん
2005/12/19(月) 19:14:070263デフォルトの名無しさん
2005/12/19(月) 20:03:16もうどうでもいいだろ
っていうか、どうでもいいっていうこと自体まさにどうでもいいや
0264デフォルトの名無しさん
2005/12/19(月) 22:27:110265デフォルトの名無しさん
2005/12/19(月) 22:53:132〜3人でやりあってるんだな
0266デフォルトの名無しさん
2005/12/19(月) 23:07:340267デフォルトの名無しさん
2005/12/19(月) 23:35:530268デフォルトの名無しさん
2005/12/19(月) 23:36:02これならまだconstスレのほうが有意義だったぞ。
0269デフォルトの名無しさん
2005/12/19(月) 23:40:570270デフォルトの名無しさん
2005/12/20(火) 13:24:14俺に聞けスレで興奮した中学生が勃てた
ネタスレですから。
0271デフォルトの名無しさん
2005/12/21(水) 18:26:310272デフォルトの名無しさん
2005/12/29(木) 15:02:300274・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/01/01(日) 01:42:480275デフォルトの名無しさん
2006/01/01(日) 09:56:490276デフォルトの名無しさん
2006/01/01(日) 19:11:310277デフォルトの名無しさん
2006/01/02(月) 01:43:170278デフォルトの名無しさん
2006/01/12(木) 07:29:29~(~(*‘ω‘)
∧∧ ちんぽぽちんぽぽ
(*‘ω‘)
〜(,,,ι,J
∧ ∧
(*‘ω‘ *) ちんぽっぽ
( )
v v
0279デフォルトの名無しさん
2006/01/12(木) 15:12:44やっぱりフラグとトグルスイッチ
0280笹井奈琴
2006/01/14(土) 00:20:45static void bi_sort( int* a, int* b ) {
int d = ( *a ^ *b ) & -( ((unsigned int)*b - *a) >> 31 );
*a ^= d;
*b ^= d;
}
#define BI(x,y) bi_sort( a+x, a+y );
void oct_sort( int* a ) {
BI( 0, 1 ) BI( 2, 3 ) BI( 4, 5 ) BI( 6, 7 )
BI( 0, 2 ) BI( 1, 3 ) BI( 4, 6 ) BI( 5, 7 )
BI( 0, 4 ) BI( 3, 7 )
BI( 1, 2 ) BI( 3, 4 ) BI( 5, 6 )
BI( 1, 3 ) BI( 2, 4 )
BI( 1, 5 ) BI( 4, 6 )
BI( 2, 3 ) BI( 4, 5 )
BI( 2, 4 ) BI( 3, 5 )
BI( 3, 4 )
}
0281デフォルトの名無しさん
2006/01/14(土) 00:45:11> SQLにビット演算が無いのって使いにくいよね?
非常におそレスだが、あるやつもあるぞ。
http://www.postgresql.jp/document/pg812doc/html/functions-bitstring.html
まあ、あったからと言って SQL が劇的に使い易くな
るとは思えないが。
0282笹井奈琴
2006/01/14(土) 00:50:10SQLくらい高級な言語にビット演算があったところで、
高速化しそうな気もしないしな...
ディスク容量は節約できるかな?
>>280
書き忘れたけど、
「分岐なしソート・Pentium4ユーザにお勧め!」ってなとこです。
0283デフォルトの名無しさん
2006/01/14(土) 01:06:07> SQLくらい高級な言語にビット演算があったところで、
> 高速化しそうな気もしないしな...
いや、その認識はおかしいと思うぞ。
SQL って一行プログラムみたいなもんだから、一つの演算
子の高速化でも結構影響度は高いよ。
なんと言っても、その一行が 10万件とかのデータを処理し
たりするかもしれないからね。
ビット演算子がないがためにいろいろ苦労してやるよりも、
データベースエンジンの最適化も効き易いだろうし。
0284・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/01/14(土) 06:19:15掛け算・割り算より数クロック早いとかよりもSQLの構文解析のほうがよっぽどクロック数は食うと思う。
SQL文は極力単純にしてデータの加工は極力ローカルでやるってのが高速化の鍵だと思う。
ああ、必要ないデータまで取ってこないってのも大事だけど。
>>282
ヲレならPentium4限定ならSSEx使うと思う。
4byte値なら一度に4つずつ扱えるしね。
0285デフォルトの名無しさん
2006/01/14(土) 09:20:02> mod演算とかで済むんじゃないの?
言ってることが、マジわからん。
> SQLの構文解析のほうがよっぽどクロック数は食うと思う。
お前、でかい DB 使ったことないだろ。
0286デフォルトの名無しさん
2006/01/14(土) 09:46:02あるわけねーじゃん。
0287デフォルトの名無しさん
2006/01/14(土) 10:31:270288デフォルトの名無しさん
2006/01/14(土) 10:36:050289笹井奈琴
2006/01/14(土) 13:15:44そうなんだけど、そうやってSSEを効率的に使うためには、
やはり分岐の無い処理ってのが必要な訳さ。
>>285
ビット演算がmod演算で置き換えられる(?)理由は俺もよくわからんが、
ビット演算が必要な理由もまた良く分からん。
つか、最近のDBMSはSQLをネイティブコードにコンパイルするのでしょうか?
だったらOK、ビット演算したくなる気持ち、
びんびん伝わってくるぜ!
0291デフォルトの名無しさん
2006/01/14(土) 14:47:10安置乙wwww
0292デフォルトの名無しさん
2006/01/14(土) 16:03:50最近の DB は IP アドレス型とか MAC アドレス型と
か持ってたりするから、ビット演算ぐらいできないと駄
目でしょ。
それより、「ネイティブコードコンパイルされるなら、
ビット演算したくなる」の方がよくわからんのだが…。
0293・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/01/14(土) 19:07:52正解。NetBurstはロード・ストアをDQWORD単位で行わないと効率が悪いアーキテクチャだからね。
シャッフルうまく使えばL/S回数も減らせてウマーなわけです
イミディエイトの値が決めうちだからAltiVecみたいにはいかないのが難点だけど。
あとmax/minの判定するそのものズバリなインストラクション用意されてるし。
>>292
そういうことか。でもどうせサブネットマスクの生成とかっしょ。構文あるじゃん。
OracleやDB2やらにやらす必要あるわけ?
まさかDB使ってDNSやNAT、ARP/RARPのサービスの再発明しようとしてるわけじゃないよな?
0294デフォルトの名無しさん
2006/01/14(土) 19:56:31ストールしまくりで全然解決しない気がするんだが。
0295・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/01/14(土) 20:08:10コンパイルオプションでCMOV使うようにすればいいだけ、という考え方もできる。
今使ってるマシンPentium Mなんだよな。NetBurstシミュレータって無い?
0296デフォルトの名無しさん
2006/01/15(日) 23:30:59直列処理じゃなくて何個かソートを並列して実行できれば
いい感じになるんじゃないかな。
0297デフォルトの名無しさん
2006/01/17(火) 16:15:380298デフォルトの名無しさん
2006/01/17(火) 16:18:580299デフォルトの名無しさん
2006/01/17(火) 16:53:00ビット演算の有無による効率を考える前に
物理的にひとつの値に論理的に複数の意味を付加しようとする
頭のおかしい設計者を排斥した方がいいと思うが。
クロック単位で云々ぬかす莫迦もどうにか排斥できないものかね。
0300松田成子
2006/01/17(火) 16:54:090301デフォルトの名無しさん
2006/01/17(火) 16:54:23>物理的にひとつの値
>物理的にひとつの値
>物理的にひとつの値
>物理的にひとつの値
>物理的にひとつの値
>物理的にひとつの値
0302∀<)っ-●○◎- ◆Pu/ODYSSEY
2006/01/17(火) 17:59:55あー、16byte境界にあわせてあること前提ね。
#include <altivec.h>
void vQuickSort(int e[8]) {
register vector int v1, v2, v3, v4;
v1 = *((vector int)&e[0]); // lvx
v2 = *((vector int)&e[4]); // lvx
v3 = vec_max(v1, v2); // vmaxsw
v4 = vec_min(v1, v2); // vmaxsw
v1 = vec_mergeh(v3, v4); // vmrghw
v2 = vec_mergel(v3, v4); // vmrglw
v3 = vec_max(v1, v2); // vmaxsw
v4 = vec_min(v1, v2); // vmaxsw
v1 = vec_mergeh(v3, v4); // vmrghw
v2 = vec_mergel(v3, v4); // vmrglw
v3 = vec_max(v1, v2); // vmaxsw
v4 = vec_min(v1, v2); // vmaxsw
v1 = vec_mergeh(v3, v4); // vmrghw
v2 = vec_mergel(v3, v4); // vmrglw
*((vector int)&e[0]) = v1; // stvx
*((vector int)&e[4]) = v2; // stvx
}
たった16オペレーションで済む。ちなみに8bit×32要素なら24オペレーション。
ただ、依存関係があるから並列実行性能はそんなに良くない。
VSIUとVPERMはMPC7400/7450, PPC970いずれでも並列動作可能だが
このコードの場合どこにも並列化可能なところがない。
ただし要素数がもっと増えれば、たとえば4byte×16とかなら並列化は有効。
0303∀<)っ-●○◎- ◆Pu/ODYSSEY
2006/01/17(火) 18:00:26max/minをとるたび、インタリーブするたびにレジスタの値をコピーする必要がある。
しかし、Pentium4レジスタ間のmovq/movdqaのレイテンシが異常にデカイから困る。
まあPentiumMとかMeromあたりではあんま関係ないだろうけど。
なお、IntelのSIMDクラスライブラリには vec_merge{h,l} に対応する unpack_highと
unpack_lowがあるから、ただコードを移植するだけならかなり簡単。
0304)っ-●○◎- ◆Pu/ODYSSEY
2006/01/17(火) 19:22:02- v1 = *((vector int)&e[0]); // lvx
- v2 = *((vector int)&e[4]); // lvx
+ v1 = *((vector int*)&e[0]); // lvx
+ v2 = *((vector int*)&e[4]); // lvx
- *((vector int)&e[0]) = v1; // stvx
- *((vector int)&e[4]) = v2; // stvx
+ *((vector int*)&e[0]) = v1; // stvx
+ *((vector int*)&e[4]) = v2; // stvx
Cで考えれば結構簡潔に見えるけど2オペランドベースでレジスタが少ないことを
前提としたロジックって考えるの結構大変だと思う。
特にターゲットがPentium 4みたいな変態マイクロアーキテクチャだと特に
movやpush,pop命令吐きまくりでちっとも早くならないなんてことは結構ある。
所詮はCなんかも3オペランド命令ベースでレジスタが豊富な命令セットアーキテクチャ
向けの言語ってことね。
0305デフォルトの名無しさん
2006/01/18(水) 00:06:48>向けの言語ってことね。
( ゚д゚)ポカーン
0306笹井奈琴/289
2006/01/18(水) 00:18:56(1) v1とv2の要素を一個ずつ比較して、大きいのをv3に、小さいのをv4に入れる
(2) v3の前2個とv4の前2個ずつをv1に、v3とv4の後2個ずつをv2にいれる
これを3回繰り返すだけで8要素のソートになるのかー。
面白いなAltiVec。漏れもマカーなので試してみようっと。
0307・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/01/18(水) 00:20:35知ってる?GCCってレジスタが大量にある3オペランド演算ベースの仮想マシン向けにコード生成して
それから各CPU向けに帳尻合わせするのよ。
PowerPCなんかはまともなのにx86向け最適化がウンコなのってそのせいよん。
0308デフォルトの名無しさん
2006/01/18(水) 00:29:52>所詮はCなんかも3オペランド命令ベースでレジスタ
>が豊富な命令セットアーキテクチャ向けの言語って
>ことね。
ねぇ...。アセンブラ以外に、C言語より RISC 向き
の言語を教えて欲しいものだ。
0309デフォルトの名無しさん
2006/01/18(水) 00:44:04レジスタ数が多ければソースを破棄しても痛くはない。
当然自由度が高くなる。
下らん事をいまさら自慢げに書かれてもなぁ・・・
真にC言語向きなのはアドレッシングモードが豊富なCICS。と書いてみるテス(ry
0310デフォルトの名無しさん
2006/01/18(水) 00:46:050311笹井奈琴/289
2006/01/18(水) 00:53:5068000系は、なんかアドレッシングモードがCに最適化してあったとか、
聞いたことがあります。
>>307
それでx86向けの最適化だと、Intelのコンパイラに遅れをとるのね。
>>309
まあ、そのくだらないことも、
書いてくれないと、漏れとか知らない訳だし。
そもそもここ、厨房向けっぽいらしいし。
0312・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/01/18(水) 07:23:27やってることは、1位から最下位まで全部順位の出るトーナメント戦です。
人数がn人なら一人当たりlog(n)/log(2)回対戦すればいいことになります。今回は8人だから3回対戦すればいい。
最終的な並びはvec_perm(vperm)使ってやればもう好きなようにやってヨシ。
>>309
だってMMX/SSEって痛い仕様なんだもの。
pandnってあるじゃん。 a = ~a & b
マスク破壊されるじゃん。なんで a = a & ~b じゃないの。みたいな。
Appleのデベロッパー向けサイトでもその点について言及してたが。
今回問題になる点は
「値を破壊される前に退避してください。あ、Pentium 4ではmovqもmovdqaもレイテンシ大きいからね」
どないせいっちゅうねん。まぁだから整数演算はPentium Mに負けるんだろうけど。
unpack high( or low)オペレーションって対として使うケースのほうが多いと思うんだけど。
このへんだけでも3オペにしてくれれば良かったのにさ。
で、オレみたいにAltiVecを使いたいがためだけにIntel移行発表後にPPC版Macを買う厨房もいるわけだ。
0313・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/01/18(水) 07:28:26最初の比較で1番目に大きいものと2番目に大きいものが比較されたら・・・。
正確に出るのは最上位と最下位だけか。
0314デフォルトの名無しさん
2006/01/18(水) 11:51:29>pandnってあるじゃん。 a = ~a & b
>マスク破壊されるじゃん。なんで a = a & ~b じゃないの。みたいな。
どっちが楽か考えれば理由はわかる。
マスク値を保持するにはコピーするか2回notするしかないからね。
>このへんだけでも3オペにしてくれれば良かったのにさ。
Instruction Formatを見てどうすればいいか考えてみてくれよ。
これ以上デコーダを複雑にならないようにできるならな・・・
0315 ◆Pu/ODYSSEY
2006/01/18(水) 12:16:16デコーダだけの問題だとすればなら、パイプラインから分離されてる
NetBurstアーキテクチャならx86のコード体系とはかなり違うSIMD拡張
命令フォーマットってサポート可能だったんじゃないの?
まぁIntelも従来型CRISC殺す気も無かったんだろうな。
NetBurstを継続しAMDに嫌がらせするには絶好の拡張方法に違いない。
まあ消えるけど。
0316デフォルトの名無しさん
2006/01/18(水) 12:34:26まぁ一般に普及してればの話ですがx86互換CPU(と言っていいのか?)では
Itaniumが理想です。
0318 ◆Pu/ODYSSEY
2006/01/18(水) 13:13:43opcode・src1, src2, destでもopcode・dest・src1・src2でも
何か不都合でも?
困難なのは知ってますが、互換ベンダが実装が困難なもの作ったほうが優位でしょ。
レジスタ間move命令のレイテンシが十分に短くて命令帯域に余裕があるなら
既存のものでも十分だとは思ってはいるけど、NetBurstはどっちも×だから。
まぁ半年後には死ぬアーキテクチャについて語る未来はないし
不毛なことは考えませんよ。
ただ、AltiVecからSSEへの移植は苦労するだろうなって話。
0319デフォルトの名無しさん
2006/01/18(水) 15:04:01汚いx86がさらに汚くなってうんざりだな。
0320デフォルトの名無しさん
2006/01/18(水) 17:18:50消えっぷりが半端で無いので笑える
ファビョって連レス乙
0321デフォルトの名無しさん
2006/01/18(水) 17:29:18それもまた由
0322 ◆Pu/ODYSSEY
2006/01/18(水) 18:35:04消えるアーキだからもうどうしようもないけど、せっかく分厚いデコード層で
仮想化してるんだから、この際それくらいやって欲しかったけどねー。
もしくはデコード無しでダイレクトにトレースキャッシュにμOPsをロードする
命令をサポートするとか。これならx86の命令セット自体は汚れない。
ま、こんなことやっても盲腸がまた増えるだけ、ってのはわかってるけど。
0323 ◆Pu/ODYSSEY
2006/01/18(水) 19:34:05void Transpose8x8(BYTE a[8], BYTE b[8]) {
_asm { //8x8のビット配列の転置, 最適化あんまやってない
movq mm0, mmword ptr [a]
pmovmskb eax, mm0
mov byte ptr [b+7], al
paddb mm0, mm0
pmovmskb eax, mm0
mov byte ptr [b+6], al
paddb mm0, mm0
pmovmskb eax, mm0
mov byte ptr [b+5], al
paddb mm0, mm0
pmovmskb eax, mm0
mov byte ptr [b+4], al
paddb mm0, mm0
pmovmskb eax, mm0
mov byte ptr [b+3], al
paddb mm0, mm0
pmovmskb eax, mm0
mov byte ptr [b+2], al
paddb mm0, mm0
pmovmskb eax, mm0
mov byte ptr [b+1], al
paddb mm0, mm0
pmovmskb eax, mm0
mov byte ptr [b], al
emms
}}
0324デフォルトの名無しさん
2006/01/18(水) 20:07:57組み込み関数が無いのは何かの嫌がらせです。
もっとも、 a = _m_paddd(a, a); で生成されるコードのアホさ加減を見れば、
VC++のレジスタカラーリングなんて全くあてにしたくないわけで。
0326デフォルトの名無しさん
2006/01/19(木) 00:39:35>消えるアーキだからもうどうしようもないけど、せっかく分厚いデコード層で
>仮想化してるんだから、この際それくらいやって欲しかったけどねー。
そういう問題じゃないって言っているだろ。
x64も同じ問題を持っている。ビット演算スレなんだから命令とオペランドの
ビットパターンを見てから発言すれば?
pandn命令を2オペランドでやるとすればデータとマスクどちらを破壊するのが
良いかはマスク破壊が正しいのでは?大量のデータを処理する際にスループットは
どうにもできないけどレイテンシは投機的な処理で隠蔽できます。では、一般的に
マスクとデータのどちらが投機的にロードし易いか?
内部のロジックだけでなく用途を考えても答えはでますよね。
所要クロックスレの1の方がマシだな。
0327デフォルトの名無しさん
2006/01/19(木) 05:22:220328デフォルトの名無しさん
2006/01/19(木) 06:40:350329・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/01/19(木) 08:16:25反転するほうが保持したいデータだった場合は?そんなの場合によるだろ。
第1オペランドに入れる値のほうは明示的にレジスタにロードしないといけない。
しかもそれを破壊しないといけない。
おいら的問題は、
・NOT(全ビット反転)を取るのが1命令でできない
・替わりにあるpandnが異常に使い勝手が悪い
まぁ正確に言えば両方サポートして欲しい。
あと、pornとかpnorとかも欲しいかな。NORなら単独でNOT演算ができる。
で、MMX/SSEでビット反転の手段
pcmpeqでレジスタ1個潰して全ビット立ててpxor
もしくは全ビット立ったQWORD/DQWORD値をメモリに持っておいて
pandn(Intelのラッパー関数はこーやってるようだ)、あるいはpxor
0330デフォルトの名無しさん
2006/01/19(木) 11:44:250331デフォルトの名無しさん
2006/01/19(木) 17:29:350332デフォルトの名無しさん
2006/01/19(木) 19:53:33>マスクとデータのどちらが投機的にロードし易いか?
データはどっちにしろロードするわけで・・・
両方ロードするのと、データだけロードするのとどっちが良いかという話では?
0333デフォルトの名無しさん
2006/01/24(火) 16:44:160334デフォルトの名無しさん
2006/01/24(火) 18:46:410335デフォルトの名無しさん
2006/01/26(木) 12:13:05団子さんみたいになるには、何を勉強すればいいのでしょうか?
0336・∀・)っ-○○◎- ◆.CzKQna1OU
2006/01/26(木) 14:49:000337デフォルトの名無しさん
2006/01/26(木) 15:54:45お前はHONDA車に乗ってる事はおみとおしだ。
0338デフォルトの名無しさん
NGNGトリがいつもと違う様な・・・
0339>∀<)っ-○●◎- ◆Pu/ODYSSEY
2006/01/26(木) 20:32:130340335
2006/01/26(木) 21:47:30そんなこと言わないで教えてください><
0341デフォルトの名無しさん
2006/01/27(金) 11:13:540342デフォルトの名無しさん
2006/01/27(金) 12:19:32団子汁
0343デフォルトの名無しさん
2006/01/28(土) 21:22:350344デフォルトの名無しさん
2006/01/29(日) 09:21:38色んなスレを荒らしまわってるデムパ乙。
自分を攻撃してくるやつは全て同一人物だと思ってしまうかわいそうな子。
0345>∀<)っ-○●◎- ◆Pu/ODYSSEY
2006/01/29(日) 15:30:560346>∀<)っ-○●◎- ◆Pu/ODYSSEY
2006/01/29(日) 15:43:32SSEのmaskmovq, pextrw, pinsrwの活用法について考える、とか。画像処理以外で。
こいつは巧いと思った。
http://www.dawgsdk.org/tripmona/index.php/optimization
0347デフォルトの名無しさん
2006/01/29(日) 16:17:270348デフォルトの名無しさん
2006/01/29(日) 19:04:08シフトではみ出た桁は0になる
0349デフォルトの名無しさん
2006/01/29(日) 19:06:59IA-32だと何も変わらないがなw
0350デフォルトの名無しさん
2006/01/30(月) 12:16:53>どっちが荒らしか
そりゃあ、糞コテの方に決まっている。内容を読むまでもない。
0351デフォルトの名無しさん
2006/01/30(月) 16:08:250352デフォルトの名無しさん
2006/01/30(月) 17:09:010353デフォルトの名無しさん
2006/01/30(月) 17:35:490354366
2006/01/30(月) 20:09:160355デフォルトの名無しさん
2006/01/31(火) 06:22:070356デフォルトの名無しさん
2006/02/03(金) 12:14:520357デフォルトの名無しさん
2006/02/03(金) 14:49:110358デフォルトの名無しさん
2006/02/04(土) 10:29:24基本情報の教科書でも読んでろ
商業高校にでも行って
0359デフォルトの名無しさん
2006/02/04(土) 11:19:37学部1年レベルな.
ttp://www.amazon.co.jp/exec/obidos/ASIN/4274131912/249-8278027-6955557
0360デフォルトの名無しさん
2006/02/05(日) 19:29:080361デフォルトの名無しさん
2006/02/05(日) 21:47:49・柔軟
・速い
0362デフォルトの名無しさん
2006/02/06(月) 01:00:53とうとう自作板にまでしゃしゃり出て来るようになったぞ
怒
0363デフォルトの名無しさん
2006/02/06(月) 04:10:01学位だって持ってるんです。
ちょっとあおり耐性が足りなかっただけなんです。
仲良くしてあげて><
0364デフォルトの名無しさん
2006/02/06(月) 07:35:25どこ?
0365デフォルトの名無しさん
2006/02/06(月) 07:42:480366デフォルトの名無しさん
2006/02/06(月) 09:04:360367デフォルトの名無しさん
2006/02/06(月) 09:11:16つーかキチガイと張り合うのはキチガイだけ。相手にしないといい
0368デフォルトの名無しさん
2006/02/06(月) 12:16:330369デフォルトの名無しさん
2006/02/08(水) 11:08:290370デフォルトの名無しさん
2006/02/08(水) 11:38:270371デフォルトの名無しさん
2006/02/08(水) 12:47:070372デフォルトの名無しさん
2006/02/08(水) 16:26:320373デフォルトの名無しさん
2006/02/08(水) 16:38:370374デフォルトの名無しさん
2006/02/08(水) 18:13:58このスレ = このスレ >> 374;
0375デフォルトの名無しさん
2006/02/08(水) 21:44:310376デフォルトの名無しさん
2006/02/08(水) 21:59:54団子が来ますよ?
0377デフォルトの名無しさん
2006/02/08(水) 22:33:32例えば16→4、 128→7、 1→0を返す様な。
1引いてループ分岐なしビットカウント、でもいいのだけど
「1ビットしか立っていない」って条件を生かすと
もっと少ない手間で出来そうな気がする。
0378デフォルトの名無しさん
2006/02/08(水) 22:50:49>もっと少ない手間で出来そうな気がする。
表引き。
0379>∀<)っ-○●◎- ◆Pu/ODYSSEY
2006/02/08(水) 22:52:060380>∀<)っ-○●◎- ◆Pu/ODYSSEY
2006/02/08(水) 22:54:29表引きなら何ビット立ってようが同じ希ガス
0381デフォルトの名無しさん
2006/02/08(水) 22:59:02x86なら bsf/bsr で十分速い
と書くと団子が能書き垂れ始めます
ていうか逆にビット位置を保持してそれからビットを作れよ
0382デフォルトの名無しさん
2006/02/08(水) 23:09:11来ますたよ?
あーあ
0383デフォルトの名無しさん
2006/02/08(水) 23:13:33やってることはlog(x,2)の簡単化
素直にbsr でいいんじゃない?
0384>∀<)っ-○●◎- ◆Pu/ODYSSEY
2006/02/08(水) 23:14:13( ´,_ゝ`)プッ
0385デフォルトの名無しさん
2006/02/08(水) 23:25:11"\26\37\17\35\12\14\6\0\25\16\11\5\24\10\23\22"[i%37u];
ジョークで書いてみたものの除算が入るから遅いだろうなぁ
0386デフォルトの名無しさん
2006/02/08(水) 23:31:190387>∀<)っ-○●◎- ◆Pu/ODYSSEY
2006/02/09(木) 00:00:3332, 0, 1,12, 2, 6, 0,13, 3, 0, 7, 0, 0, 0, 0,14,
10, 4, 0, 0, 8, 0, 0,25, 0, 0, 0, 0, 0,21,27,15,
31,11, 5, 0, 0, 0, 0, 0, 9, 0, 0,24, 0, 0,20,26,
30, 0, 0, 0, 0,23, 0,19, 29, 0,22,18,28,17,16, 0
};
table[ (i*0x0450FBAF) >> 26];
クォリティ低いスレだな。
0388>∀<)っ-○●◎- ◆Pu/ODYSSEY
2006/02/09(木) 00:01:39ほげほげ
};
Rubyでテストして変換し損ねたwww
0390>∀<)っ-○●◎- ◆Pu/ODYSSEY
2006/02/09(木) 00:17:050391デフォルトの名無しさん
2006/02/09(木) 00:47:48それ速いの?
0392・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/09(木) 01:49:09毒吐こうかと思ったけどやっぱり辞めた。x86じゃなかったらどういうコード書く気だかそっちのほうが気になるわ。
0393デフォルトの名無しさん
2006/02/09(木) 01:53:190394・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/09(木) 02:16:420395・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/09(木) 02:21:40答えられて納得するとでも思うのかな?テラクォリティ低す
0396デフォルトの名無しさん
2006/02/09(木) 02:27:440397・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/09(木) 02:33:330398デフォルトの名無しさん
2006/02/09(木) 02:49:120399デフォルトの名無しさん
2006/02/09(木) 05:02:070400デフォルトの名無しさん
2006/02/09(木) 07:38:520401デフォルトの名無しさん
2006/02/09(木) 14:54:590402デフォルトの名無しさん
2006/02/09(木) 15:05:59別の環境で動かしたいなら
その時に変換すりゃいいだろ
0403デフォルトの名無しさん
2006/02/09(木) 15:10:32人それぞれいろんな状況があるんだよ
0404デフォルトの名無しさん
2006/02/09(木) 15:21:380405デフォルトの名無しさん
2006/02/09(木) 15:23:570406デフォルトの名無しさん
2006/02/09(木) 15:28:19逆だろ。
あらゆる環境で動くものを用意しておいて、ハード依存の高速化手法があればそれを適用すればいい。
ハードありきな回答しか出せないのを居直る時点で駄目駄目。
0407403
2006/02/09(木) 15:37:200408デフォルトの名無しさん
2006/02/09(木) 15:41:53あらゆる「ハードありき」のコードの寄せ集めだろ。
試しにあらゆる環境で動作する
ハードに依存しないコードとやらを書いてみろよ
0409デフォルトの名無しさん
2006/02/09(木) 15:46:4468kやAlphaのBSRはどうみても別物です。
本当にありがとうございました。
0410デフォルトの名無しさん
2006/02/09(木) 15:52:43コンパイラが四則演算・ビット論理演算・ビットシフト演算、諸々を
ネイティブコードに置き換えてくれることを保障してくれる。
馬鹿だね。
0411デフォルトの名無しさん
2006/02/09(木) 15:57:36Cコンパイラはコンパイル時にそれをやってるだけの事
馬鹿も糞もねーよ。
ハードが隠蔽された高級言語こそが偉いと言うなら
c++.netでもjavaでもスクリプト言語でもなんでもいいからどっかいっとけ
0412デフォルトの名無しさん
2006/02/09(木) 15:58:31「○○には組み込みの命令が用意されてるからそれを使え」じゃ全く話にならないと思うが。
逆に使えなかったら>>405みたいな解決法なんだろ。くだらねー。
>>411
>>409
0413デフォルトの名無しさん
2006/02/09(木) 16:20:460414デフォルトの名無しさん
2006/02/09(木) 16:56:03int numofbits5(long bits) {
bits = (bits & 0x55555555) + (bits >> 1 & 0x55555555);
bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
bits = (bits & 0x0f0f0f0f) + (bits >> 4 & 0x0f0f0f0f);
bits = (bits & 0x00ff00ff) + (bits >> 8 & 0x00ff00ff);
return (bits & 0x0000ffff) + (bits >>16 & 0x0000ffff);
}
これは?
0415デフォルトの名無しさん
2006/02/09(木) 17:00:08散々既出な上に、立ってるビットの数は1個と決まってるので話題違い。
とりあえずPentium 4で確認したがBSF/BSRは「遅い」。
Northwoodでレイテンシ-スループットは8-4, Prescottで16-2。
わざわざ移植性を犠牲にしてまで利用する価値があるかは、疑問。
掛算とシフトとロードは並列動作可能なので何個か同時処理すれば>>387のが
速いかもしれんね。
定数との剰余(or掛け算+シフト)を使って一意なダイジェストを得るのは
かなりうまい方法だな。1バイトずつ分割してテーブル参照すると遅いし。
ただ、SIMDじゃ基本的にテーブル参照は使えないんで、論理・算術演算のみ
を使ったいい方法があればと思う。
AltiVecで16bit程度までならAltiVecレジスタ上にテーブルを展開できそうだから、
>>387的な手法+vpermで写像をとって解決できるのだが。
0416デフォルトの名無しさん
2006/02/09(木) 17:00:11その素朴な方法だと無駄が多い。
最低でもこれくらいにしなきゃ
int numofbits5(unsigned long bits) {
bits -= bits >> 1 & 0x55555555;
bits = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
bits = (bits + (bits >> 4)) & 0x0f0f0f0f;
bits += bits >> 8;
bits += bits >> 16;
return bits &0xFF;
}
ただ、テーブル使う方が俺は好みだけどな
0417デフォルトの名無しさん
2006/02/09(木) 17:07:090418デフォルトの名無しさん
2006/02/09(木) 17:22:59c = (0xFFFF < n) * 16
n = n >> 16 | n & 0xFFFF;
c += (0xFF < n) * 8;
n = n >> 8 | n & 0xFF;
c += (0xF < n) * 4;
n = n >> 4 | n & 0xF;
c += (0x3 < n) * 2;
n = n >> 2 | n & 0x3;
c += n - 1;
0419デフォルトの名無しさん
2006/02/09(木) 17:23:04{
bits -= bits >> 1 & 0x55555555;
unsigned tmp = (bits & 0x33333333) + (bits >> 2 & 0x33333333);
tmp += tmp >> 4;
tmp &= 0x0f0f0f0f;
tmp += tmp >> 8;
tmp += tmp >> 16;
return (unsigned char) tmp;
}
static inline unsigned count(unsigned short bits)
{
bits -= bits >> 1 & 0x5555;
unsigned tmp = (bits & 0x3333) + (bits >> 2 & 0x3333);
tmp += tmp >> 4;
tmp &= 0x0f0f;
tmp += tmp >> 8;
return (unsigned char) tmp;
}
0420デフォルトの名無しさん
2006/02/09(木) 17:29:26分岐・テーブル不要で32bit数をlog_2に折り畳むには、最低限5回の加算は必要な気がする
0421デフォルトの名無しさん
2006/02/09(木) 17:33:56依存関係が無いからSIMDでもVLIWでもこれでスケジューリング楽々。
!(0x0000FFFF & n) * 16 + !(0x00FF00FF & n) * 8 + !(0x0F0F0F0F & n) * 4
+ !(0x33333333 & n) * 2 + !(0x55555555 & n) ;
0423デフォルトの名無しさん
2006/02/09(木) 21:06:59x86向けだけど、コンパイルしたらこんなコードになった
and edx,0xFFFF ; cmp edx,1 ; sbb ecx,ecx ; neg ecx ; shl ecx,4 ; 後略
でも、gccだとどうオプションつけても分岐ができちゃった
0424デフォルトの名無しさん
2006/02/09(木) 21:15:54そうでないなら分岐使いまくりスタック操作しまくりの糞コードでいい。
糞コードでもいいならば単純な置換でいいんだし
別のハードで動かす場合に速度が必要になった時にだけそのハード専用のコードを書けばいい。
つまるところハード依存を気にせず良いと思ったコードを書くのが一番だ。
0425424
2006/02/09(木) 21:16:260426デフォルトの名無しさん
2006/02/09(木) 21:19:37どうみても誤爆に見えないぐらいスレに沿ってるw
0427424
2006/02/09(木) 21:25:18団子がどこにでもいるから一瞬どこに書いたのかわからん
0428デフォルトの名無しさん
2006/02/09(木) 21:40:30ハッカーズ・ディライトもそういう前提で書かれてたんじゃなかったかな?
標準コンパイラのgccで団子鬼門の分岐ができちゃうんじゃ使えない気がする
0429デフォルトの名無しさん
2006/02/09(木) 21:42:040430・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/02/09(木) 23:03:11コンパイラによってはひょっとしたらこっちのほうが効率いいかも。
(0x0000FFFF & n ? 0 : 16) + (0x00FF00FF & n ? 0 : 8) + (0x0F0F0F0F & n ? 0 : 4)
+ (0x33333333 & n ? 0 : 2) + (0x55555555 & n ? 0 : 1);
>>422は単に「こうやったらleaを吐くんだろーな」とか思って書いたもので
これが最速という確証とかも無し。
むしろテーブル参照のほうが速いでしょ。
-(expr)>>31とかやってやれば確実に0か1を取り出せるし、更にnegをとれば全ビット1か0に。
まあコンパイラの最適化性能を最大限生かしたいタチなのでこういうコードにしたけど、
ショボければショボイコードができることを意味する。まあ工夫は各自で。
>>429
x86ではsbbかcmov*を使ってくれること前提で書いた。
最適化無しの状態だとVC++でもヤバいコード吐くね。
GCCの最適化は安定しないので基本的にあてにしない。
HDの和訳本無くしたかも。文庫サイズなんで持ち歩きに便利だから買ってたけど><
まぁ原著(わざわざAmazon経由で海外から取り寄せで購入)は家においてるんで支障ないが。
0431笹井奈琴/377
2006/02/10(金) 01:01:28たすかったよ。
0432デフォルトの名無しさん
2006/02/10(金) 10:46:300433デフォルトの名無しさん
2006/03/08(水) 23:29:07本当でしょうか?
0434デフォルトの名無しさん
2006/03/08(水) 23:34:050435デフォルトの名無しさん
2006/03/08(水) 23:41:510436デフォルトの名無しさん
2006/03/08(水) 23:44:39あと氏ね
0437デフォルトの名無しさん
2006/03/08(水) 23:45:37xor, and, not, 論理右シフト, or, 左シフト, 算術右シフトで異論はないね?
0438デフォルトの名無しさん
2006/03/08(水) 23:52:26放置した方がいいよ
0439デフォルトの名無しさん
2006/03/08(水) 23:54:200440デフォルトの名無しさん
2006/03/08(水) 23:57:320441デフォルトの名無しさん
2006/03/09(木) 00:41:09できるけど、今時のCPUだと却ってお荷物な方策だよ。
0442デフォルトの名無しさん
2006/03/09(木) 00:44:55べらぼうに速いフラグ判定くらいじゃね?
のみ、いずれか、等価あたりはifでやるより個人的には簡単だし
0443デフォルトの名無しさん
2006/03/09(木) 00:58:00ぷえ乙
0444デフォルトの名無しさん
2006/03/09(木) 01:06:50例えばビット演算全く使わないと
映像音関係ぜんぶウンコになると思う。
0445デフォルトの名無しさん
2006/03/09(木) 09:31:20nand, norは万能
0446デフォルトの名無しさん
2006/03/10(金) 15:00:39損をしてるかのどちらか。とはいえxorでの交換はお勧め
できない
0447デフォルトの名無しさん
2006/03/10(金) 15:15:54最速で検索するのはどうすればいいですか?
0448デフォルトの名無しさん
2006/03/10(金) 18:25:24ビット位置は、見つけた数をaとするなら
(a and (a - 1)) xor a
で最下位ビットを得ろ。
ビット位置を得る具体的な方法は、このスレ内を検索しろ。
お団子が色々提案してる
0449デフォルトの名無しさん
2006/03/10(金) 18:29:13これを組み合わせて、ビット単位に前回と比べて変化があったビットだけ採用するような事が簡単に出来る
0450デフォルトの名無しさん
2006/03/10(金) 18:34:340451・∀・)っ-●○◎- ◆Pu/ODYSSEY
2006/03/10(金) 18:42:45JPEGでバイト飽和演算つかいまくりんぐwwww
0452デフォルトの名無しさん
2006/03/10(金) 19:01:520453・∀・)っ-●○◎- ◆Pu/ODYSSEY
2006/03/10(金) 19:02:49いまx64環境使えるんだけどなんか試してほしいものある?
0454デフォルトの名無しさん
2006/03/10(金) 20:13:06試しに回線切って首吊ってみてくれ。
0455デフォルトの名無しさん
2006/03/10(金) 20:34:15それだと結果が得られないからどうせなら実況中継してもらったほうがよくはないか?
0456・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/10(金) 23:14:06>>455 それなんてエロゲ?
0457デフォルトの名無しさん
2006/03/10(金) 23:44:470458・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/10(金) 23:47:030459デフォルトの名無しさん
2006/03/11(土) 00:06:150460デフォルトの名無しさん
2006/03/11(土) 00:09:02俺と同じか少し下くらいだったのか。意外。
0461デフォルトの名無しさん
2006/03/11(土) 00:23:300462・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/11(土) 00:28:141982年生舐めんなよ><
0463デフォルトの名無しさん
2006/03/11(土) 00:53:35工エエェェ(´д`)ェェエエ工工
0464デフォルトの名無しさん
2006/03/11(土) 01:03:280465デフォルトの名無しさん
2006/03/11(土) 01:10:04相手が詳しければ年上、年下なんてどうだっていいこと
0466デフォルトの名無しさん
2006/03/11(土) 01:13:24まあ、小学生とかだとショックだけどな。
20いってりゃ特定分野の知識は年令関係ないでしょ。
0467・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/11(土) 01:15:07学生ニートやってたときに彼の本にずいぶんお世話になった(彼は当時高校生
0468デフォルトの名無しさん
2006/03/11(土) 03:16:16頭痛が痛くない
0469デフォルトの名無しさん
2006/03/11(土) 11:04:430470デフォルトの名無しさん
2006/03/11(土) 17:20:37知識範囲が狭い事は判明しているので20代は納得。
0471・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/11(土) 18:07:19定数テーブル参照を1ビットマシンでビット演算だけで実現するくらいかな。
逆に30代以上なんて退役じゃんwww
脳みその老化には逆らえんだろ
でも2ちゃんねらーって統計によれば30〜40台が一番多いらしいね。道理でリアルニートが(ry
0472デフォルトの名無しさん
2006/03/11(土) 18:33:04つーか、30代以降なら見識を疑う。
0473デフォルトの名無しさん
2006/03/11(土) 18:34:09>学生ニート
要は、「引き篭もり学生」か?
0474デフォルトの名無しさん
2006/03/11(土) 19:08:440475デフォルトの名無しさん
2006/03/11(土) 21:28:190476・∀・)っ-○●◎- ◆Pu/ODYSSEY
2006/03/11(土) 21:34:320477デフォルトの名無しさん
2006/03/11(土) 21:47:420478デフォルトの名無しさん
2006/03/12(日) 12:12:070479デフォルトの名無しさん
2006/03/14(火) 01:04:13>xorでの交換は、指定したビット位置だけ交換出来るのがメリット
>これを組み合わせて、ビット単位に前回と比べて変化があったビットだけ採用するような事が簡単に出来る
「指定したビット位置だけ交換」を組み合わせて
前回と比べて変化があったビットだけを採用する...
ようなことを簡単にやるにはどうすれば良いのだろう。
おしえてくだちい
0480デフォルトの名無しさん
2006/03/14(火) 06:48:49このばあいの 「これ」 はタイトルの ビット演算の事だろう
0481デフォルトの名無しさん
2006/03/17(金) 23:18:26あえて限界に挑戦した、みたいなサイトありませんか?
0482デフォルトの名無しさん
2006/03/17(金) 23:40:49FAとかで使うシーケンサは普通にAND,OR,NOTだけ(ラダー)でプログラミングしますがなにか?
0483デフォルトの名無しさん
2006/03/18(土) 00:42:10http://www.xbox-news.com/
0484デフォルトの名無しさん
2006/03/18(土) 01:08:18どうやって?どうやって?
0485デフォルトの名無しさん
2006/03/18(土) 01:32:26http://www.nagoya.melco.co.jp/fair/fa_basic/02/21.htm
0486デフォルトの名無しさん
2006/03/18(土) 01:36:18ちょっと語弊があるかも知れないけどわかりやすく簡単に説明すると
シーケンサで扱うデータは(例外もあるけど)基本的に全部ブール値なのよ。
センサーやらボタンやらの入力もブール値(On/Off)だし、
シリンダーやコンベアを動かす出力もブール値(On/Off)。
で、制御はそれらの入力をAND,OR,NOTで加工したブール値を出力とすることで行うわけ。
実際のラダーのコードは↓こんな感じになります。
│ A C D │
├┤├┬┤├─────────────○┤
│ B │ │
├┤├┘ │
│ │
これで D = (A | B) & C; てな意味になります。
0487http://www.vector.co.jp/soft/win95/util/se072729.html
2006/03/18(土) 19:01:46もしくは64bitにネイティブ対応したテキスト置換ソフトありますか?
0488デフォルトの名無しさん
2006/03/19(日) 01:33:34おまえあっちこっちに貼ってるな
0489デフォルトの名無しさん
2006/03/19(日) 03:29:49返事書いといただろ
ちゃんと読めよ
0490デフォルトの名無しさん
2006/03/19(日) 07:15:24今は退屈でコピペで済ましたくなるな・・
好奇心も老化するんだろーか・・w
0491デフォルトの名無しさん
2006/03/25(土) 11:09:04if( ((unsigned) a) <= 10 )
2の補数表現の負数をそのまま 符号無で評価すると、INT_MAXより大きくなる事を利用
0492デフォルトの名無しさん
2006/03/25(土) 11:43:45汗んブラ世代には至極当たり前田の事項だったりする
手元の gcc-3.4.4(-m86)ではどちらとも同じコードを吐くけど
つまるところ、
MIN <= a && a <= MAX
のコードが
(unsigned)(a - MIN) <= (unsigned)(MAX - MIN)
に変形されるので、条件比較分岐が減る罠
0493デフォルトの名無しさん
2006/03/26(日) 10:17:34ハード的にはビット演算しかないわけだが。
0494デフォルトの名無しさん
2006/03/26(日) 21:41:45まさか、NOT、NAND、NORゲートだとか言い出さないだろうな?
0495デフォルトの名無しさん
2006/03/26(日) 23:05:310496デフォルトの名無しさん
2006/03/27(月) 00:30:170497デフォルトの名無しさん
2006/03/27(月) 08:41:52if( (n-1) & n ) { ,,, }
nが0または 2^xで表現出来る時 のみ実行される
たとえば入力ポートのどれか1つがonであると判ってる時に
多重押しになってないかのチェックに使える
0498デフォルトの名無しさん
2006/03/27(月) 09:32:55ならば
a<=x<=b <=> (unsigned)(x-a)<=b-a
0499デフォルトの名無しさん
2006/03/27(月) 09:42:52○ nが0または 2^xで表現出来ない時のみ実行される
0500デフォルトの名無しさん
2006/03/27(月) 09:55:060501デフォルトの名無しさん
2006/03/27(月) 11:08:15他に何があるのか。
0502デフォルトの名無しさん
2006/03/27(月) 17:01:04この3つの論理回路で全てが構成されてるのは明らかなんだし。
0503デフォルトの名無しさん
2006/03/27(月) 17:05:330504デフォルトの名無しさん
2006/03/27(月) 17:51:24つ[等価回路]
0505デフォルトの名無しさん
2006/03/27(月) 18:34:22フリップフロップだって、結局NAND、NOR、NOTの組み合わせのような気がするなあ。
単純なRS-FFとかNAND 2個で出来るし。
0506デフォルトの名無しさん
2006/03/27(月) 19:25:45#つーか、TTLの基本はNANDゲートだ。
0507デフォルトの名無しさん
2006/03/27(月) 19:37:040508デフォルトの名無しさん
2006/03/27(月) 20:07:36ECLだとNORが基本だがな
0509デフォルトの名無しさん
2006/03/27(月) 20:22:01何故に回路(TTLとか)は負論理が多いんですかね?
0510デフォルトの名無しさん
2006/03/27(月) 21:49:37ヒント:電子の移動度
0511デフォルトの名無しさん
2006/03/27(月) 22:27:450512デフォルトの名無しさん
2006/03/27(月) 22:47:130513デフォルトの名無しさん
2006/03/28(火) 06:49:33たとえば何よ
0514デフォルトの名無しさん
2006/03/28(火) 11:00:51アドレス/データバスは普通、正論理。
>>509
TTL は特にそうなんだけど、スレッショルドがLレベルに近いから
Hアクティブな信号線はノイズに弱くなる。
0515デフォルトの名無しさん
2006/03/28(火) 12:05:04H68TRは負論理でちょっと泣いた事ある。
ちぇー
0516デフォルトの名無しさん
2006/03/28(火) 12:14:13Hは抵抗でプルアップという事になるから
Lの時はその抵抗にムダに電流を流す事になり、
消費電流を減らすには 普段をH 出力にしておいた方が都合が良いというのもあるかもね
0517デフォルトの名無しさん
2006/03/28(火) 12:55:51プルアップもプルダウンも抵抗に電気を流すので多ければそれだけ消費電力UPするような
0518デフォルトの名無しさん
2006/03/28(火) 13:03:27CMOSなら不定だけど。
0519デフォルトの名無しさん
2006/04/09(日) 14:56:240520デフォルトの名無しさん
2006/04/15(土) 19:39:270521デフォルトの名無しさん
2006/04/15(土) 20:34:190522デフォルトの名無しさん
2006/04/15(土) 23:37:43,.r'´,. -┐ ':..,゙ヽ
,r' ,::;:' ,ノ ヽ、 ゙:::.ヽ
,.' _.,:;:'___ _立_ ___;;ミ゙、  ̄ノ ̄| ̄
.l厄巳厄巳厄 i王i ,.巳厄巳厄巳l ,勹 .├‐''
l´ , "´  ̄ ̄ ̄ `'''′  ̄ ̄ ̄`.:`{ ´_フ ヽ、_,
| l ;;:.,. ::、. ... '゙|
,.-''、.,! ,.::' ヽ、:.゙、 ;;.:' '' ヽ | ,.、 __l__
./ 、/ `ヾー─tッ−ヽ'' kーtr─ツ'´〕. ヽ. |
/ {´i Y::::.. ` ̄ ̄´.: "i! ::. 、` ̄´ ゙:::.、} r、 l i,____
| ヾ_,,入;:::.. `'' " ´.::; .::i! ::.. ``` :. }ツl l
\ ノ ヾ ;:::. .:r'' :: ll! :ヽ;:..:. .: j,ノ ,! ┬‐┌,┴┐
ヽ',,;l ゙i ;::.. _ `ヽ、;;,,,,'.ィ'' _,, .::,;r'1,,,/ l__ ノl士
ッジ::::::| ゙ ,r'´:::;;;;;;;::> 弋´;;;;;::::ヽ'" |:::::゙'イィ ノ凵 l土
弍:::::::::::l /:::;r'´ ,,..-ー…ー-、 ヾ;:::'、 |:::::::::::ヒ
シ:::::::::::l i':::,! ´ __ ゙ l::::l:. |::::::::::ス __ヽ__‐┬┐
彡;:;:::::l l:::l ''''''''⇒;;;:, l:::l |::::;;ャ` ニ メ ,ノ
,r', 广'`ヽl:::l ::::. .:: ゙::. l::l ノ^i`、 l ̄l ハヽヽ
,イ(:::j i::;ヘ :;:. .:: l::l'" l:ヽヽ  ̄  ̄
|;:ヽヽ l::l ヽ ;:.... .. .. : /l::l ノ ,.イ
|;:;:;:;\\ l::l ', :;.:;::::::::::..::. / l::l,r'' /;:;:;|
0523デフォルトの名無しさん
2006/04/19(水) 21:48:07♪ ∠__ノ ∠__ノ ∠__ノ エーライヤッチャ
〈,(・∀・;)ノ・∀・;)ノ・∀・;)ノ エーライヤッチャ
└i===|┘i===|┘.i===|┘ ヨイヨイヨイヨイ
〈__〈 〈__〈 〈__〈
0524デフォルトの名無しさん
2006/04/20(木) 02:45:34問題:割り算をビト演算で書け。
0525デフォルトの名無しさん
2006/04/20(木) 07:15:41加減算とシフト命令を使って書くのは出来るが、ビット演算はキツイなあ
0526デフォルトの名無しさん
2006/04/20(木) 12:12:180527デフォルトの名無しさん
2006/04/20(木) 14:20:30加算は
c+a+b
0 0 0 0
0 0 1 1
0 1 0 1
0 1 1 0 c
1 0 0 1
1 0 1 0 c
1 1 0 0 c
1 1 1 1 c
だからxor と or とシフトでは何度か繰り返さないといけないからなあ
0528・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/21(金) 02:52:14スループット稼げることもあるから覚えておいて損は茄子
0529デフォルトの名無しさん
2006/04/21(金) 03:03:330530デフォルトの名無しさん
2006/04/21(金) 04:59:260531デフォルトの名無しさん
2006/04/21(金) 07:27:390532デフォルトの名無しさん
2006/04/21(金) 07:51:51function add(a,b:Integer):Integer;
var c:Integer;
begin
repeat
c:=(a and b);
a:=a xor b;
b:=c shl 1;
until b=0;
Result:=a;
end;
0533デフォルトの名無しさん
2006/04/21(金) 08:02:210534デフォルトの名無しさん
2006/04/21(金) 14:19:01奴さんは全然関係ない独り言を唐突に書き込んだだけだから
相手しなくていい
0535デフォルトの名無しさん
2006/04/21(金) 14:57:57>>534
ああ、なんでいきなり SIMD とか言い出したのかと思ったら
言い出したのはあいつか。やれやれだぜ。
0536デフォルトの名無しさん
NGNG0537/
NGNGいや、それでOK。
たとえばAltiVecで128個の3bitデータを(1bit×128)×3本レジスタに
転置したデータの加算はこれで実現できる。
; dataA : v0, v1, v2
; dataB : v3, v4, v5
; result : v6, v7, v8
vand v31, v0, v3
vxor v6, v0, v3
vxor v30, v1, v4
vand v29, v1, v4
vxor v7, v30, v31
vxor v31, v30, v31
vor v31, v30, v31
vxor v8, v2, v5
vxor v8, v8, v31
AltiVecやSSE2で扱えるのはせいぜい16個のデータまでだから
算術演算は微妙だが、桁上げの無い論理演算主体のコードならスループットは十分稼げる。
DESやAESにあるような複雑なビット転置にかかるコストも軽い(この場合ECBにしか使えないが)
0538\
NGNG転置マトリクスをどうやって作るかなんてのは野暮だから辞めてくれな。
スループットの向上が転置のコストに勝るという前提の話。
0539・∀・)っ-@{}@{}@{} ◆DANGO/KW4s
NGNG4月から有給なんてあり得ないからwww
現実で無能の烙印押された人間が2chなら居場所あるとでも思ったかケケケ
0540・∀・)っ-@{}@{}@{} ◆PoizonIkwU
NGNG0542デフォルトの名無しさん
2006/04/21(金) 19:06:010543デフォルトの名無しさん
2006/04/21(金) 19:18:570544デフォルトの名無しさん
2006/04/21(金) 20:37:24俺の職場、4月が最も稼働率が低いんだが。
年度始めって仕事少なくない?
0545・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/21(金) 21:42:57単純に会社の営業力弱くて大手に相手にされてないだけだろwwww
0546デフォルトの名無しさん
2006/04/21(金) 21:52:150547デフォルトの名無しさん
2006/04/21(金) 22:39:30大手から勤務時間中に大量に来てるわけだが
0548デフォルトの名無しさん
2006/04/21(金) 23:34:140549デフォルトの名無しさん
2006/04/21(金) 23:37:460550デフォルトの名無しさん
2006/04/21(金) 23:47:05gatekeeper10.sony.co.jpとか。
今日の午前中。
「検索キーワード指定で来てるのでロボットじゃなさそう。
0551デフォルトの名無しさん
2006/04/21(金) 23:55:45幸運(シアワセ)のときめき 覚えているでしょ
パステルカラーの季節に恋した
あの日のように 輝いてる あなたでいてね
負けないで もう少し
最後まで 走り抜けて
どんなに 離れてても
心は そばにいるわ
追いかけて 遥かな夢を
何が起きたって ヘッチャラな顔して
どうにかなるサと おどけてみせるの
“今宵は私(ワタクシ)と一緒に踊りましょ”
今も そんなあなたが好きよ 忘れないで
0552・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/21(金) 23:57:090553デフォルトの名無しさん
2006/04/22(土) 00:02:39仕事中に個人メールや仕事外のサイトを訪れる社員は8割とかいう記事見たっけな
(8割はあいまい。7割、もしくは9割だったかも)
0554デフォルトの名無しさん
2006/04/22(土) 00:20:01アクセス規制されてる大手って、具体的にどこ?
0555デフォルトの名無しさん
2006/04/22(土) 00:38:350556・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 00:40:16基本的に参照できるのはWAN内のコンテンツだけ。microsoftだけに限ってブロックされてない。
0557デフォルトの名無しさん
2006/04/22(土) 00:46:310558デフォルトの名無しさん
2006/04/22(土) 00:51:07今時それやっちゃうと
取引先のサイトとか会員制や非公開のBBS、
技術資料検索なんかに多大な不都合を起こすだろうに。
お役所ぐらいかと思ってたよ。
まあそんな会社は早晩衰退していっちゃうだろうさ。
0559デフォルトの名無しさん
2006/04/22(土) 00:53:490560デフォルトの名無しさん
2006/04/22(土) 00:55:12おいおい、そんなのは何処の会社でだってあるだろが。
お前、会社勤めじゃないだろ?
0561デフォルトの名無しさん
2006/04/22(土) 01:01:24●蔵●杉?
●蔵●杉?
●蔵●杉?
大蔵省!??
0562・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 01:03:45必要な資料は全部WAN内にミラーリングされてるし、外部サイトはかろうじて
msdn.microsoft.comは読めたんで仕事には困らなかったけど何か?
仕事に関係ない外部掲示板に書き込み放題の某GKなんかのほうがおかしいだろ。
>>561 大ヒント:最寄駅名 すまんこれ以上は無理
0563デフォルトの名無しさん
2006/04/22(土) 01:05:21おいらは、LANと対比して「インターネット側」と認識していたが。
ひょっとして、支社内LANとの対比で「本社側」という意味のWANもありなのか?
0564デフォルトの名無しさん
2006/04/22(土) 01:06:410565デフォルトの名無しさん
2006/04/22(土) 01:08:000566デフォルトの名無しさん
2006/04/22(土) 01:08:340567デフォルトの名無しさん
2006/04/22(土) 01:11:33申請してもそれなりの理由がないといけない。
そんなわけでネットすらつなげれん。
とりあえず、イントラとメールはできるが、外部につないで調べ物もできん。
一応ソフト会社なのに・・・
まあ、糞みたいな会社だからね・・・
Nなんて
Sすてきな
Dだめ会社
0568デフォルトの名無しさん
2006/04/22(土) 01:13:53Eいー
Cかいしゃ?
0569デフォルトの名無しさん
2006/04/22(土) 01:15:05管理営業部門?
研究開発部門でネットから締め出し喰らっちゃ今時手かせ足かせ状態になるなあ
0570デフォルトの名無しさん
2006/04/22(土) 01:20:19r'丁´ ̄ ̄ ̄ ̄`7¬‐,-、 /
r'| | | |/ >、 /
! | | | |レ'´/| | 待 て
| | | /\ | |l /⊂う |
| | |__∠∠ヽ_\ | リ / j ヽ あ わ て る な
|´ ̄ O  ̄ ̄ ̄ ̄ ̄`! 〉
l'"´ ̄ ̄ヾ'"´ ̄ ̄`ヾ::幵ー{ / こ れ は 団 子 の 罠 だ
⊥,,,,,_、 ___,,,,,ヾ| l::::::| |
lヾ´ f}`7 ヘ´fj ̄フ | l::i'⌒i |
l ,.ゝ‐イ `‐=ニ、i | l´ ( } ヽ
l { U | l 、_ノ ∠ヘ
l / ̄ ''ヽ、 | l ヽ_ \,_________
! ハ´ ̄ ̄ ̄`ト、 |亅〃/\
,人 f ´ ̄ ̄ ̄``ヾ j ,!// {_っ )、
// `ト、__iiiii______,レ'‐'// _,/ /スァ-、
,.イl{ { 々 !/´しllllト、 ̄`ヽ、 // /´,.-、 /彑ゝ-{スァ-、
,.イ彑l l > ゞ く l 〃 l|ハ.lヽ、 ハVゝヽ二ノ/ゝ-{、彑ゝ-{、彑ァ-、
,.イ彑ゝ-'l l ( (,) レシ′ !l `ソァ'´ _ノ7{、彑ゝ-{、彑ゝ-{、彑{
ュゝ-{、彑l l ` -イヘ !l // /⌒ヽヾ/_ゝ-{、彑ゝ-{、彑ゝ-{、
{、彑ゝ-'l l f⌒Yハ ', !l/ / ヽ_う ノ /-{、彑ゝ-{、彑ゝ-{、彑ゝ
彑ゝ-{、彑l l{ に!小 ヽ /!l / ,/ /彑ゝ-{、彑ゝ-{、彑ゝ-{、
0571デフォルトの名無しさん
2006/04/22(土) 01:56:110572・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 02:56:060573デフォルトの名無しさん
2006/04/22(土) 03:15:17あと GK 連中はマじゃないからな
連中のいる会社の頭にはSさえつかない可能性も高いぞ
なのに同じ目でみられるんだよなぁ・・・
0574デフォルトの名無しさん
2006/04/22(土) 03:30:20常識的に、オフィスは営業拠点だけじゃないでしょ。
0576デフォルトの名無しさん
2006/04/22(土) 04:17:48今そんなんできてんのか? そういや工事してたな
あのへんでツインタワーってったら新川崎じゃないのか?
0577デフォルトの名無しさん
2006/04/22(土) 04:22:25むかいがわらだっけか? 専用改札のあるのは
0578デフォルトの名無しさん
2006/04/22(土) 04:34:100579デフォルトの名無しさん
2006/04/22(土) 05:08:580580デフォルトの名無しさん
2006/04/22(土) 08:19:15function sub(a,b:Integer):Integer;//a-b
var c:Integer;
begin
repeat
c:=((not a) and b);
a:=a xor b;
b:=c shl 1;
until b=0;
Result:=a;
end;
加算を利用する場合
function sub(a,b:Integer):Integer;//a-b
begin
result:=add(add(a,not b),1);
end;
0581デフォルトの名無しさん
2006/04/22(土) 10:15:54実生活でよほど人から認められてないんだな。
0582デフォルトの名無しさん
2006/04/22(土) 10:23:22許せないおまえらも十分キモイYo!
0583デフォルトの名無しさん
2006/04/22(土) 10:27:080584デフォルトの名無しさん
2006/04/22(土) 10:32:20c 言語なら (x >> bitpos) &( (1<<4)-1)
delphiなら (x shr bitPos) and ( (1 shl 4) -1)
0585デフォルトの名無しさん
2006/04/22(土) 10:35:25ありがと、試してみる。
0586デフォルトの名無しさん
2006/04/22(土) 10:55:31>そのWANの使い方はよくわからん。
つか、「WAN内コンテンツって何だ」って訊かれて
物理層I/Fを答える莫迦も、そうそういないけどな。
いつのまにか
>勤務中のネットの私的利用も規制されてない時点で少なくとも大手はあり得ない。
この主張はウヤムヤになってるし。
0587デフォルトの名無しさん
2006/04/22(土) 11:34:35団子「WAN内コンテンツ」
団子「勤務中のネットの私的利用も規制されてない時点で少なくとも大手はあり得ない」
他人「そのWANの使い方はよくわからん。」
団子「インターネット」
別にコンテンツが何かを意味してるんじゃなく、「WAN内の」ってところにひっかかりが
あるわけで、「WAN内のコンテンツ」だと「普通にインターネットのコンテンツのことじゃん」
って自分で気づいて自嘲したものだと思うな。
俺なら、「インターネット(^^:)」とか明らかに自嘲したようなリアクションで答えるところだけど。
まあこんなところも嫌われる性格がにじみ出たんだろうな。
確かに間違った使い方かもしれんが、会社規模が大きく、クラスCで納まらないほど
広域(全世界的)に広がったイントラネットだとLANというよりWANと言った方が
しっくりくるかもしれんけど、それならきちんと謝ってから訂正しろよ、なあ。
0588・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 13:11:09数GBのファイル転送が数分で終わる。
うちの知り合いが通い詰めてる会社は、URLに bbs とか 2ch が入ってるだけで
閲覧自体できないらしい。それくらいやっても当然とは思うがな。
まぁ、BBSも見ればたまに役に立つことも在るかもしれんにしても、GETやHEADを
許すまではアリにしてもPOSTは弾くのが当然でしょ。
自宅に串立てて自宅のIPの足しかつかないようにすれば文句も言えまいて。
まぁ、私的利用をそこまでして必死に申し出る香具師もどうかと思うけどな。
0589デフォルトの名無しさん
2006/04/22(土) 14:22:18「当然」と「思う」のは勝手だがな。
0590・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 14:58:43大きな会社だとそうもならんと思うのよ。
0591デフォルトの名無しさん
2006/04/22(土) 15:04:52たとえばこんなの?
GateKeeper**.Sony.CO.JP
0593デフォルトの名無しさん
2006/04/22(土) 15:16:42ここまで厚顔無恥だと無視するしか手は残ってないな。
0594デフォルトの名無しさん
2006/04/22(土) 15:21:500595デフォルトの名無しさん
2006/04/22(土) 15:26:45何考えてるんだろ。マゾかな?
0596・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 15:27:27>>593 何を詫びる必要があるのかサッパリ。名無しで書き込んでる人にに下げる頭はないっすよ正直。
世間の影響力の小さい会社や働いてない人だと、堂々と平日日中に2chでカキコできていいよね、って話。
0597デフォルトの名無しさん
2006/04/22(土) 15:27:360598・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 15:32:27なんかこんなソフト作ったとか実績のある人間にそのハンドルネームでも付けて意見されたら
へこむけど、名無しで攻撃するのは基本的になんたらの遠吠えに等しいからね。
実際実績皆無なんだろうけど。
0599デフォルトの名無しさん
2006/04/22(土) 15:33:05漏れのどう考えても仕事に役立ちそうに内部ログにも来てるよ、それ。
ほかにも曰立とか講壇社とか花押とか。
0600デフォルトの名無しさん
2006/04/22(土) 15:35:30本当に実力のある者はHNなんてくだらないものつけない
0601デフォルトの名無しさん
2006/04/22(土) 15:36:370602・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 15:37:520603デフォルトの名無しさん
2006/04/22(土) 15:37:57function unsigned_div(x,y:dword;var modu:dword):dword;
var a,b,c,v,w,lpc:dword;
begin
a:=0;
b:=0;
lpc:=1;
repeat
a:=a shl 1;
if (x and $80000000)<>0 then a := a or 1;
x := x shl 1;
b := b shl 1;
w:=y;
v:=a;
repeat
c:=((not v) and w);
v:=v xor w;
w:=c shl 1;
until w=0;
if (c and $80000000)=0 then begin
b:= b or 1;
a:= v;
end;
lpc:=lpc shl 1;
until lpc=0;
if @modu<>nil then modu:=a;
result:=b;
end;
0604デフォルトの名無しさん
2006/04/22(土) 15:46:320605デフォルトの名無しさん
2006/04/22(土) 15:49:040606デフォルトの名無しさん
2006/04/22(土) 15:51:59そもそも「ハンドルネーム」の時点で変。
(wiki には言い訳がましい理由が書いてあるが)
0607デフォルトの名無しさん
2006/04/22(土) 15:56:15この板じゃ初心者じゃなくて、フリー(じゃなくても)ソフト作家ばっかりが
集まってる(見てる)と思ってたら(ここに突っ込むなよ)
もう少し言い方を考えてみてもよいだろう?
他人をもっと尊重しようぜ。
0608デフォルトの名無しさん
2006/04/22(土) 15:58:25次はビット演算だけによるループカウンタの効率的表現方法だな
一つのアイデアは M系列を使う事
0609・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 16:01:05PNとHNが別ってならそれでもいいけど
そのPNでも教えていただければ、発言に説得力あるわな。
逆に言えば名無しに成り下がってる時点で、そこらの能無しと同じ立場として発言してるってことじゃね?
0610デフォルトの名無しさん
2006/04/22(土) 16:14:25なんか問題があるとは思わない?
同じソフトウェア仲間から総スカン喰って平気なの?
俺も当然webで公開してるけど、そんな挑発に乗って
ここで公開しようって気には全然ならないよ。
0611デフォルトの名無しさん
2006/04/22(土) 16:21:12下を見る前に上を見ろ
0612・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 16:25:43ソフト作家ってのは自分自身の時間を使ってソフトの企画から設計・コーディングまで自分でやって
自分の名義でソフトを出してる人だと思ったが違ったかな。
客から、上からの指示ありきでせこせこコード書いて、その所有権を勤め先や会社に譲渡して、
それを対価にしてる職業プログラマはその範疇に入らないと思うけど。
両者には画家と塗り絵職人の違いがあるし。
見習いの情報学科の学生とかも含め、この板っての全てが作家やその卵ってわけじゃないのは
普通に考えればわかることだけど。
俺の小学校からの先輩が某有名オンラインソフトの開発メンバーだけど(今のとこ
唯一尊敬できる人)はこの板はそもそもレベル低すぎて見てないっていうし、そんなもんだと思う。
それに>>1にあるようにここ厨スレだしwww
0613デフォルトの名無しさん
2006/04/22(土) 16:30:06そういうことならこっちは了解です。バイバイ。
0614デフォルトの名無しさん
2006/04/22(土) 16:30:55>>537みたいにな 未完成品はちゃんと完成させろよ
0615デフォルトの名無しさん
2006/04/22(土) 16:33:10では早速M系列とやらの講義に入ってくれ。
0619デフォルトの名無しさん
2006/04/22(土) 16:38:10まずは背景の説明を
>603 のコードではビット幅だけループする必要があるが、
ここでfor文を使ってしまうと、論理演算だけで実現した事にならない。
そこで、1をビット数だけ左シフトした時にオーバーフローしてゼロになる事を利用してループカウンタとしている
しかし、当然ビット幅を超える回数はこの方法では指定出来ない。
出来るだけ少ないビット演算でループカウンタが実装出来ないかというのが、現在の課題である
0620デフォルトの名無しさん
2006/04/22(土) 16:38:130621デフォルトの名無しさん
2006/04/22(土) 16:38:160622デフォルトの名無しさん
2006/04/22(土) 16:39:470623デフォルトの名無しさん
2006/04/22(土) 16:39:50読めないからCで書いてくれませんか
0624デフォルトの名無しさん
2006/04/22(土) 16:45:16beがついてるんだから>>537が誰なのかは判ってる
何度もリンク先を間違うぐらい沸騰してるのか
そんなことじゃ、挑発してるというよりされてる方じゃないの?
0625デフォルトの名無しさん
2006/04/22(土) 16:46:22var ⇒ 参照渡し cならポインタ渡し
:= ⇒ =
dword ⇒ unsigned
$ ⇒ 0x
repeat 〜 until 条件⇒ do while(! 条件 )
result:= ⇒ return
0626・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 16:48:54その考え方を応用したソフトなら(どんな名義で出してるかはあえて言わないが)既に世に出てるよ。
0627デフォルトの名無しさん
2006/04/22(土) 16:51:31if @modu<>nil then modu:=a;
これは
if (modu) *modu=a;
かな
Cと書き方逆っぽいけど
0628デフォルトの名無しさん
2006/04/22(土) 17:01:20そう。その通り。 @ はcの& 演算子相当。
参照渡しだから単純代入になってる。
0629604
2006/04/22(土) 17:04:53ハンドルはあくまで只のハンドル。名前ではないのでハンドルネームなんて言葉は(本来)ない。
#つまり、チャットなどで便宜上使っているニックネームのようなものだな。
ペンネームはあくまで別名としての名前。書いたものを発表するために使っている名前だな。
漏れ自身はここではなんら議論に関与していないので、PNを公表する意義は見出せないな。
そういう意味では、無名化していると言う点では誰でもない。
0630デフォルトの名無しさん
2006/04/22(土) 17:13:30>勤務中のネットの私的利用も規制されてない時点で少なくとも大手はあり得ない。
~~~~~~~~~~~~
>>590
>大きな会社だとそうもならんと思うのよ。
~~~~~~~~~~
0631デフォルトの名無しさん
2006/04/22(土) 17:14:37332とか 555とかの(a+b)/2 をこんな方法で並列してやったような記憶もあるな。
0632デフォルトの名無しさん
2006/04/22(土) 17:32:46インラインアセンブラを組み込んでる言語だけあるな(^^
0633・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 17:36:24勤務中の2chへの書き込みが許されてる企業があるなんて知らなかったんだ。
視野が狭いのでごめんね。
0634デフォルトの名無しさん
2006/04/22(土) 18:13:27VIPPERスレにいきましょうか?
0635デフォルトの名無しさん
2006/04/22(土) 18:18:14会社で与えられた業務だけをやってる奴は
こんな板にまでやって来ないもんだ。
ちょっと舞い上がってない?
0636デフォルトの名無しさん
2006/04/22(土) 18:37:59勤務中に2chに来るのを許してるところなんて無いだろうって思う。
それでもここにやって来るのは会社への帰属意識が低い甘ちゃんな奴だろう。
でも昼間アクセスするのが会社員だけではない。
アマチュアソフト作家の半分程度は学生だと思うし。
それを即ニート扱いは無いだろう。
またニートや引きこもりがここで喧嘩するとはとは思えん。
それほどの意気があったら社会に出てるって。
0637デフォルトの名無しさん
2006/04/22(土) 18:42:060638・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 18:44:29Wikipediaに書いてあることの劣化コピーなんて求めてないから。このURL貼れば済むことでしょ。
http://ja.wikipedia.org/wiki/%E3%83%8F%E3%83%B3%E3%83%89%E3%83%AB%E3%83%8D%E3%83%BC%E3%83%A0
浴衣(ゆかた)が正しくは湯帷子(ゆかたびら)だとかいちいち文句つける人ですか?
うちはご覧の通りコテハンとペンネームの区別がない人間なんで(というかコテハン名義で
作品作ってきた人間なんで)その手の揚げ足取りとられても、はい、覚えておきます、
って答えるほかないです。
そういうやり方で自分の作品(ソフト・イラスト・etc..)の一部または全部を公開してる人と
長く馴れ合ってたから感覚ズレてるかもしれんけど。
自分が話題に関与してないって解ってるのに引きずる理由は理解できん。
ちなみに、あなたが何かのソフト作家だなんてあたしゃまったく信じてないし。
一言一句、なにもこたえるものもなく右から左に抜けていくだけです。
それなら吉野家や宇宙ヤバイコピペのほうがまだ印象に残るよ。
自分がクリエイターだって言いたいんならきちんとそれを証明すればいいだけの話だと思うのね。
「自分は本当は作家だけど正体は明かせない」・・・なんて虚勢にしか聞こえないんで
証明できないなら黙っておくほうが綺麗です。
2ちゃんねらーは虚言大好きだから、そういう風に思われても仕方ないってこと。
それを理解したうえで2chやってるんじゃないの違うの?
>>635
日中平気でサボる駄目社員っぷりを開き直られてもこまりますが><
0639デフォルトの名無しさん
2006/04/22(土) 18:45:43海外では本名で出す場合が多く思えるんだけどどうなの?
0640デフォルトの名無しさん
2006/04/22(土) 18:47:440641デフォルトの名無しさん
2006/04/22(土) 18:52:35>ソフト作家ってのは自分自身の時間を使ってソフトの企画から設計・コーディングまで自分でやって
>自分の名義でソフトを出してる人だと思ったが違ったかな。
これに対するレスだろ。ちゃんと反応しろよ。
0642・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 19:02:542ch関連かそれ以外かで線引きしてるつもり。
中の人自身のソフト開発の暇が削られすぎなんで、コテハン名義のソフト開発は
縮小していこうかなと思ってたりもする。
・∀・)っ-○●◎名義で出してるソフトはあって、それが俺の作品だって誰もがわかる。
「デフォルトの名無しさん」名乗っててもどんな作品作ってるかすらわからないし、
何も作品無い人かもしれない。そういう話。
0643デフォルトの名無しさん
2006/04/22(土) 19:07:00>それを対価にしてる職業プログラマはその範疇に入らないと思うけど。
0644デフォルトの名無しさん
2006/04/22(土) 19:10:09振る舞いなんかマネするものじゃないかな?
その尊敬する人から逆にどう見られてるのか気にしないものなのかね?
0645デフォルトの名無しさん
2006/04/22(土) 19:12:48いやきっとそれは知識量を尊敬してるのであって
きっと人品卑しからない人って訳じゃないんだろうて(w
名無しに対してそういうstanceになるのは、ある意味当然だろうね。
とか書いてみるテスト。
コテハンというものは、情報に信頼性を付与する程度の物。
有益な情報を提供する時のみに用いれば、価値は上がるだろうね。
0647デフォルトの名無しさん
2006/04/22(土) 19:29:28ちょっとは考えてくれよ。
いくら名無しだとはいったってこの板にいるんだから何らかの作品を提供してる人だって
結構いるだろうって推測ぐらいつくだろ?
自分に噛み付くその程度の低さを思ってそう言っているのかも知れないけれど
無頼者に対してはそれなりの態度で臨むものだよ。
自分のサイトを公表するかどうかってのは個々人のそれぞれのポリシーがあって隠している
わけなんだから挑発されたってコロコロ考えが変わるわけないじゃん。
逆にコロコロ考えを変える人は大したことはない人だよ。
0648デフォルトの名無しさん
2006/04/22(土) 19:39:44技術があっても既に作りたいものが世に出てれば作らないだろうし、
出しててもそれが本当に素晴らしいものなのかどうか
ソースコードに無駄は無いのか、バグ取りは完全か
てか、自分より技術が下のものを馬鹿にしてる時点で氏ねよと思う
0649604=629
2006/04/22(土) 19:42:54漏れがきちんと名乗りたいスレでは名乗るってだけの話だから。
0650デフォルトの名無しさん
2006/04/22(土) 19:51:490651デフォルトの名無しさん
2006/04/22(土) 19:52:580652デフォルトの名無しさん
2006/04/22(土) 19:54:01おまいバカ?
0653デフォルトの名無しさん
2006/04/22(土) 20:05:31コテハンで検索してみても貴殿のサイトは発見できませんでした。
0654デフォルトの名無しさん
2006/04/22(土) 20:11:10まずはジョンソンカウンタ
これはbit幅の2倍の値がカウント出来る。
ジョンソンカウンタは シフトしながらMSBの反転をLSBに入れる事で実現出来る
0655デフォルトの名無しさん
2006/04/22(土) 20:17:46ジョンソンカウンタ方式による (N+1)*2 回のループの例
repeat
x:=( ( x shl 1) or (((not x shr N) ) and 1)) and ((2 shl N)-1);
until x=0;
0656・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/22(土) 20:27:54仕事以外ではプログラムやりません
先越されてるから、もっといいものがあるから、ソフト作りません
なんてのはプログラミングに対する愛がないんじゃね?
模倣からでも地道に始めてやがて独自性を開拓していく、それが技術立国ニッポン。
俺もパブリックドメインとかのコードをパクリマ・クリスティ。
0657デフォルトの名無しさん
2006/04/22(土) 20:48:380658デフォルトの名無しさん
2006/04/22(土) 21:56:28タイトルを100回読もうな!
0659デフォルトの名無しさん
2006/04/22(土) 22:28:10ジョンソンカウンタ方式で64回までループを回せるようになった。
しかし1万回とか100万回のループをどうやれば実現出来るのか
ジョンソンカウンタは MSBを単純に反転してMSBに入れたが
これをMSBと途中の複数のビットとの論理演算をしてLSBに返したらどうなるかを考える
こういう時の論理演算は xor
x:=( ( x shl 1) or ((( x shr 15) xor x ) and 1)) and $ffff
とすると 1から初めて1に戻るまでは255回 だいぶ改善された。
x:=( ( x shl 1) or ((( x shr 14) xor x ) and 1)) and $7fff;
これで x=1から開始して x=1に戻るまで 32767回かかる
こういうビットサイズ N で (2^N-1)の周期が出るのをM系列というらしい。
0660デフォルトの名無しさん
2006/04/23(日) 00:09:05裁量勤務になれば会社の設備を使わないで2chへのアクセスは許可なんていらない。
国内大手だと優秀な奴から駄目な奴まで様々。むしろ不遇な境遇に居る優秀な人間が
出ていくから駄目な奴が多く感じるぐらいだな。そんな環境で生き残るには
> 大きな会社だとそうもならんと思うのよ。
みたいな社畜くさい発言しているようじゃ埋もれるだけだな。
> 仕事以外ではプログラムやりません
はいそれが?会社で面白そうなモノを選んで作れる立場にいますから。
もっともその立場になるには運と実力が必要。社畜には無理。
0661デフォルトの名無しさん
2006/04/23(日) 00:24:37(サテライト勤務できるとこあるのかな)
施設内から2chは自由時間でもちょっとまずかろう
それに自由なテーマなんてそれほど選べないもんだし
大人数でシステム開発を行うことがほとんど
(でも意欲的なプロジェクトへの参加はありだね)
実力のある奴は先進的な面白い開発を行い、メンテをダメな奴に引き継いで
次から次へとプロジェクトを渡り歩くことが出来るが、そんなのは100人に1人ぐらいだ
0662デフォルトの名無しさん
2006/04/23(日) 00:27:46そういう立場だと実開発に携われないで管理業務に従事することになっちゃう
0663デフォルトの名無しさん
2006/04/23(日) 00:33:05> 実力のある奴は先進的な面白い開発を行い、メンテをダメな奴に引き継いで
> 次から次へとプロジェクトを渡り歩くことが出来るが、
実力だけじゃなかなか無理。強引に過去の仕事を切り離す意思が無いと引き継いだ
駄目な奴から変な依頼が来て潰れる。
> そんなのは100人に1人ぐらいだ
100人に1人ぐらいになれんでどうする?
部長だって100人に1人ぐらいじゃねーのか?
0664デフォルトの名無しさん
2006/04/23(日) 00:37:17ようするにプログラマーから管理者に転身しちゃうわけだ
いまのところまだまだ開発に従事したいと思ってる
0665デフォルトの名無しさん
2006/04/23(日) 00:48:29そこで部下をつけて仕事をこなして稼いで来いって話になるわけだがそうなると当然、
管理に時間を取られるし管理能力が必要になるしで結局管理職になるのと変わらなくなる。
0666デフォルトの名無しさん
2006/04/23(日) 00:50:38評価もSランクには到底なれないし。
情けないけど俺にはこれが現実だ。
0667・∀・)っ-○●◎ ◆Pu/ODYSSEY
2006/04/23(日) 00:55:56Rubyの開発で国からも金もらってたりするし、好きなことやれてるってのは
まぁわかる。
てか、そういうレベルのプログラムを個人レベルででも作れるってのは理想。
そうなると、1から会社作ったほうがよくね?的な話に。
あと、研究所勤務とか?ああいうところこそ、それこそビット演算とかプリミティブなレベル
の作りこみできるわな。
ただアレは学位持ちのPDが大学や国研からダイレクトに企業にわたってくるもので
現場上がりにやれることなんて皆無だわな。
0668デフォルトの名無しさん
2006/04/23(日) 01:01:02100人の中の1人は無理じゃないって話のたとえ話はそういう方向に行くかな?
さすがに部長はコード書かんが最近はうちの会社では部署によっちゃ課長でもコード
書いていたりする。まぁ、課長職になってコード書けなくなった優秀なエンジニアが
退職するケースが増えていたのが原因かと思われるが・・・
> 情けないけど俺にはこれが現実だ。
努力はしろよ。自分が討ち死にしても次の若者がその道を引き続き開拓してくれれば
いいじゃないか。
0669デフォルトの名無しさん
2006/04/23(日) 01:01:430670デフォルトの名無しさん
2006/04/23(日) 01:03:190671デフォルトの名無しさん
2006/04/23(日) 01:09:07それは目的じゃなくて手段だからな・・・そういうのをやりたければ研究所だろうね。
0672デフォルトの名無しさん
2006/04/23(日) 01:12:44別にそれほど悲観してるわけじゃないよ。
一応同期の中じゃトップクラスだと自負してる。
(A評価で特別ボーナスも貰った経験はある)
0673デフォルトの名無しさん
2006/04/23(日) 01:22:48器用貧乏になるなよ。重要な事は周りに、
「マネジメントよりエンジニアやらせたほうが得だ」
と思わせる事だ。ただし組織が壊れるような事や閑職に追い込まれないように注意しろ。
0674デフォルトの名無しさん
2006/04/23(日) 02:03:55それは無理だって。
A評価だって普通に開発だけに従事してたら貰えっこない。
自分で目標設定して必要な人材(社内にリソースが足りない場合は社外からも)
集めて特許も何件か出してそれなりの成果をださないと。
0675デフォルトの名無しさん
2006/04/23(日) 02:06:48> 書いていたりする。まぁ、課長職になってコード書けなくなった優秀なエンジニアが
> 退職するケースが増えていたのが原因かと思われるが・・・
ちょっと気になったんだけど、プログラミングできる人は
ずっとプログラマであり続けたいと思う、ってこと?
0676デフォルトの名無しさん
2006/04/23(日) 02:18:20それは違う。
数年前から課長職だなんて無駄だという方向に会社の意識が向いてきてて
中間管理職を無くして、言わばプレーイングマネージャーとしてもっと活用しよう
ってことになってるだけ。
課長なんて役職はほとんど消えて、管理は部長にがんばってもらうというようになっている。
0677デフォルトの名無しさん
2006/04/23(日) 07:25:28大きくなると 15, 22,30,40 しかない。
またピッタリ16bit,32bitのM系列は作れない。
x:=( ( x shl 1) or ((( x shr 14) xor x ) and 1)) and $7fff
上位ビットは、下位ビットがシフトされているだけなので
最後の and 命令を取り外してしまう。
x:=( ( x shl 1) or ((( x shr 29) xor x ) and 1))
ループ回数を1万回とかの場合は、この演算を
1万回回した時の表を用意しておいて使う事になる
0678デフォルトの名無しさん
2006/04/23(日) 09:28:110679デフォルトの名無しさん
2006/04/23(日) 09:40:19調べると回路技術でも似たような問題があって キャリールックアヘッド というので解決してるそうだ
0680デフォルトの名無しさん
2006/04/24(月) 13:31:32おまいの使ってるCPUでは、キャリーフラグ立てるのに何か特別な命令を追加発行しなきゃならないのかね?
0681デフォルトの名無しさん
2006/04/24(月) 13:51:39このスレ的には加減算は禁止だから シフト・回転だな。
で、それが何か >>679の問題と関係するのかい?
0682デフォルトの名無しさん
2006/04/24(月) 15:42:54>>679
キャリールックアヘッドは、キャリーの計算を並行してやっちまうという
手段なんで、ソフトであれやると (計算が面倒な分) 却って遅くなりそうな
気がしなくもないんで、いっそ表引きするのはどうか。
0683デフォルトの名無しさん
2006/04/24(月) 15:52:45>>580 ビット演算だけの引算
>>603 ビット演算だけの割算
半加算器を繰り返し使って実現してるから、最悪(ビット幅-1)のループになるんで
ループしない方法は無いかという事だね。
あれば特許モノだろうな
0684デフォルトの名無しさん
2006/04/24(月) 16:11:21CPLDとかの設計なら必要かも知れんが
0685デフォルトの名無しさん
2006/04/24(月) 16:24:21次に高速化に使える場面があるかもしれないから。
たとえば、32bit1ワードに4bitのデータが8桁入ってる場合に 2つの平均を出すのを高速にやりたいとかさ
0686デフォルトの名無しさん
2006/04/24(月) 16:47:39いまどきのカスタムCPUは、ニーモニックまでカスタムできるからな。
0687デフォルトの名無しさん
2006/04/24(月) 17:19:42そこらのベンチャーが気軽にASIC起こせるような環境なんて日本にゃない。
そういう面じゃ台湾どころか韓国にも完全に負けてるぜ。
0688デフォルトの名無しさん
2006/04/24(月) 17:37:34>>685 の前者が理由の殆どだと思うが。
それより
>いまどきのカスタムCPUは、ニーモニックまでカスタムできるからな。
1. 「カスタムCPU」とは?「チップ作って組込」むのではなかったのか?
2. ニーモニックはアセンブラが認識するもので、プロセッサとは関係ない。
3. 「カスタムできる」→「カスタマイズできる」では?
0689デフォルトの名無しさん
2006/04/24(月) 17:50:020690デフォルトの名無しさん
2006/04/24(月) 18:20:080691デフォルトの名無しさん
2006/04/24(月) 19:38:28そりゃおまえさんの視野がせまいんじゃないのか?
気軽の程度にもよるけどな。
0692デフォルトの名無しさん
2006/04/24(月) 21:34:34請け負ってるところは結構大手でもあるし。
0693デフォルトの名無しさん
2006/04/24(月) 21:39:430694デフォルトの名無しさん
2006/04/24(月) 21:55:20ワイヤードロジックで作成しなきゃ。
0695デフォルトの名無しさん
2006/04/24(月) 22:55:060696デフォルトの名無しさん
2006/04/25(火) 07:24:13begin
result:=0;
while b<>0 do begin
if (b and 1)<>0 then result:=add(result,a);
a:=a shl 1;
b:=b shr 1;
end;
end;
0697デフォルトの名無しさん
2006/04/25(火) 07:58:09a*b = (a*2)*(b/2) = (a*2)*(b div 2 + 余り) = (a*2)*(b div 2) + a*余り
b を左シフト、aを右シフトしながら
bが奇数の時のaの値を合計してゆけば等号を満たす
0698デフォルトの名無しさん
2006/04/25(火) 07:58:59○b を右シフト、aを左シフトしながら
0699デフォルトの名無しさん
2006/04/25(火) 13:48:53勉強になった
0700デフォルトの名無しさん
2006/04/26(水) 08:25:33a,bの合計ビット数は ビット数を数える関数BitCntを使って
BitCnt(a ) + BitCnt( b) = BitCnt(a and b )*2 + BitCnt(a xor b) ・・・・・無理かな
0701デフォルトの名無しさん
2006/04/27(木) 21:04:450702デフォルトの名無しさん
2006/04/29(土) 14:31:160703デフォルトの名無しさん
2006/04/29(土) 16:29:270704デフォルトの名無しさん
2006/04/30(日) 05:19:371Wordの変数edgeL,edgeRについて
必ずedgeL<=edgeRになるように必要に応じてスワップする関数をビット演算のみで作成していただけますか?
0705デフォルトの名無しさん
2006/04/30(日) 07:33:29計算なしでいけるぞ。
配列f(a,b),g(a,b)を用意する。
fはaとbの大きい方の値を返す。
for(a)for(b){if (a>b) f(a,b)=a; else g(a,b)=b;}
だ!
0706デフォルトの名無しさん
2006/04/30(日) 11:16:580707デフォルトの名無しさん
2006/04/30(日) 11:19:551、分岐命令を使わない
2、四則演算を使わない
代入、論理、シフト・回転のみ? 符号付か符号無しかは自由?
0708デフォルトの名無しさん
2006/04/30(日) 11:46:15>>580の減算で 結果ではなくcのMSBを返して
f= (a xor b) and c,msb
a=a xor f
b=b xor f
0709デフォルトの名無しさん
2006/04/30(日) 12:29:44符合付き
四則演算は加算と減算のみ使用可でお願いします
0710デフォルトの名無しさん
2006/04/30(日) 13:16:21加算と減算だけ? and もシフトも無しかよ
0711デフォルトの名無しさん
2006/04/30(日) 13:21:360712デフォルトの名無しさん
2006/04/30(日) 13:34:54inline void swap_if(WORD&a,WORD&b){
WORD c = a-b>>16 & (a^b);
a^=c;b^=c;
}
0713デフォルトの名無しさん
2006/04/30(日) 13:37:060714デフォルトの名無しさん
2006/04/30(日) 13:59:140715デフォルトの名無しさん
2006/04/30(日) 13:59:54つ 整数の昇格
0716デフォルトの名無しさん
2006/04/30(日) 14:14:510717デフォルトの名無しさん
2006/04/30(日) 19:27:41{
struct
{
unsigned short AAA 2:
unsigned short BBB 2:
unsigned short CCC 2:
unsigned short DDD 2:
unsigned short EEE 2:
unsigned short FFF 2:
unsigned short GGG 2:
unsigned short HHH 2:
}BIT;
};
こんな構造体があったと仮定して
unsigned BBBに0x01をセットした場合、上位4ビット目(2^12ビット)
に値が入ると仮定していいのでしょうか?
0718・∀・)っ-○◎●
2006/04/30(日) 19:33:270719デフォルトの名無しさん
2006/04/30(日) 19:46:38やはりBigエンディアンとLittleエンディアンとでは違うものなのでしょうか?
今、作成しているプログラムがSuperHというCPUなのですが、
それを作成するための統合開発環境HEWが吐き出すIOレジスタのヘッダファイルが
こんな形です。
しかし、プログラムを作成する際、雛形の作成においてCPUの種別として
Bigエンディアンを選んでもLittleエンディアンを選んでも同じヘッダを作成します
その場合、きちんとIO設定できるか不安で質問しました。
0720デフォルトの名無しさん
2006/04/30(日) 19:52:33大嘘を書くな。ビットフィールドが下から使われるなんて規格はない。
>>719
環境ごとに調べるしかないわけだ。CPUによっては、8ビットアクセスと32ビットアクセスで
出力されるラインが換わる可能性もあるから要注意。
0721・∀・)っ-○◎● ◆toBASh....
2006/04/30(日) 19:56:30> CPUと処理系に依存する。H8用GCCの場合、先に書いたほうが上位ビットになるが、
> CPUやコンパイラが異なる環境では、逆になることもあるので注意しよう
> (たとえば、パソコンのx86系CPUはリトルエンディアンなので、通常、先に書いた方が
> 下位ビットになる)。
0723デフォルトの名無しさん
2006/04/30(日) 20:48:50外付けのI/Oの場合はエンディアンが違えば違う事になります。
内蔵I/Oの場合、エンディアンを変更するのですから、結果としてワードアクセスでは同じ事になります
0724デフォルトの名無しさん
2006/05/02(火) 10:24:50しばしばリトルエンディアンよりも優れたものとされている
リトルエンディアン
しばしばビッグエンディアンよりも優れたものとされている
0725デフォルトの名無しさん
2006/05/02(火) 10:27:46リナクス -> リナックスを参照
リナックス -> リナクスを参照
とかあったなぁw
0726デフォルトの名無しさん
2006/05/02(火) 21:28:000727デフォルトの名無しさん
2006/05/03(水) 01:24:44広辞苑で循環参照したのがあったような気がするが何だか忘れた。
0728デフォルトの名無しさん
2006/05/03(水) 10:49:230729デフォルトの名無しさん
2006/05/03(水) 10:51:57同志よ、よく覚えてたなw
0730デフォルトの名無しさん
2006/05/03(水) 19:55:550731デフォルトの名無しさん
2006/05/03(水) 20:12:280732デフォルトの名無しさん
2006/05/03(水) 20:25:470733デフォルトの名無しさん
2006/05/03(水) 22:46:530734デフォルトの名無しさん
2006/05/04(木) 00:01:58やはりアセンブラか・・・Cでは無理かな?
0735デフォルトの名無しさん
2006/05/04(木) 00:18:360736デフォルトの名無しさん
2006/05/04(木) 00:24:00究極の最適化Cコンパイラを作るべきかと。
0737デフォルトの名無しさん
2006/05/04(木) 09:10:14memsetを呼び出すメモリ側のアドレスを最適化したりとか?
0738デフォルトの名無しさん
2006/05/04(木) 09:55:57MOV.L R12,@-R15
MOV.L R13,@-R15
MOV.L R14,@-R15
MOV R6,R1
MOV #H'1F,R2
MOV R4,R6
CMP/HS R2,R1
ADD R1,R6
BF/S @H'1510:8
MOV R5,R13
MOV R6,R0
AND #H'0F,R0
MOV #H'01,R12
CMP/GT R12,R0
MOV R0,R5
BF/S @H'14C8:8
SUB R0,R1
ADD #H'FE,R5
MOV R6,R2
ADD #H'FE,R6
CMP/GT R12,R5
MOV.B R13,@-R2
BT/S @H'14BA:8
MOV.B R13,@R6
CMP/PL R5
BF @H'14CE:8
MOV.B R13,@-R6
EXTU.B R13,R5
0739デフォルトの名無しさん
2006/05/04(木) 09:56:35SHLL8 R7
OR R7,R5
MOV R1,R7
SHLR2 R7
SHLR2 R7
MOV R7,R2
SHLL2 R2
MOV R5,R14
SHLL16 R5
SHLL2 R2
CMP/GT R12,R7
OR R5,R14
BF/S @H'1504:8
SUB R2,R1
MOV.L R14,@-R6
MOV.L R14,@-R6
MOV.L R14,@-R6
MOV.L R14,@-R6
MOV.L R14,@-R6
ADD #H'FE,R7
MOV.L R14,@-R6
MOV.L R14,@-R6
CMP/GT R12,R7
BT/S @H'14EE:8
MOV.L R14,@-R6
CMP/PL R7
BF @H'1510:8
0740デフォルトの名無しさん
2006/05/04(木) 09:58:350741デフォルトの名無しさん
2006/05/04(木) 09:58:52MOV.L R14,@-R6
MOV.L R14,@-R6
MOV.L R14,@-R6
MOV #H'01,R12
CMP/GT R12,R1
BF @H'1524:8
ADD #H'FE,R1
MOV R6,R2
ADD #H'FE,R6
CMP/GT R12,R1
MOV.B R13,@-R2
BT/S @H'1516:8
MOV.B R13,@R6
CMP/PL R1
BF @H'152A:8
MOV.B R13,@-R6
MOV R4,R0
MOV.L @R15+,R14
MOV.L @R15+,R13
RTS
MOV.L @R15+,R12
0742デフォルトの名無しさん
2006/05/04(木) 10:00:110743デフォルトの名無しさん
2006/05/04(木) 10:19:400744デフォルトの名無しさん
2006/05/04(木) 15:24:18最適化はスピード優先です。
どうやっても自作のメモリクリア関数とmemsetでのゼロクリアとでは
memsetのほうが速かったです(最適化なしのmemsetなら自作のほうが速い)
他のCPUではどうなのかわかりませんが、SH-2では私ではmemsetに勝てる関数は作成できませんでした
なにか知恵がありましたら教えてください。
・・・あとひとつ
MOV R10, @R14+
と
MOV R10. @-R14
では速度は変わらないのでしょうか?
上のmemsetではやたら@-R6などやってましたけど・・・
とりあえず
MOV R0 ,@-R15
と
MOV @R15+, R0
ではサイクル数など同じでしたけど。
0745デフォルトの名無しさん
2006/05/04(木) 16:05:09Cで最適化し易いコードを書く > ヘタにアセンブラで書く
となってしまう。
最適化し易いコードってのは、構造体のサイズをアドレッシングに合わせて小さくするとか
ある程度のサイズの関数に書くとかの事ね
アセンブラで書くとなると
最適化用に、HEWにソフトウエアでシミュレートする機能があるでしょ?
それ見てスロットを埋めてゆかないといけないのさ
これがなかなか厄介なパズル
0746デフォルトの名無しさん
2006/05/04(木) 19:32:550747デフォルトの名無しさん
2006/05/04(木) 19:41:44それを、可能な組み合わせを全部調べてもっともスロットが綺麗に埋まるように配置してるんだろう。
これに人力で勝とうとするとアルゴリズムで勝つしかないだろうけど、
memsetじゃ、やりようがないだろ?
0748デフォルトの名無しさん
2006/05/04(木) 21:02:45アセンブラとCに精通しているみなさん教えてください。
0749デフォルトの名無しさん
2006/05/04(木) 23:19:040750デフォルトの名無しさん
2006/05/05(金) 00:00:54確か 32bitマシンで バイト境界になるようにポインタの下位2bitでswitchし
ループは32bit単位で行うと
そのヒントで考えてみたら?
0751デフォルトの名無しさん
2006/05/06(土) 17:30:01欲しいんですがいい方法ありますか?
0 1 0 2 0 1 0 3 0 1 0 2 0 1 0 4 ...
というのが欲しいです。
0752デフォルトの名無しさん
2006/05/06(土) 17:34:07とりあえず意味不明
0753デフォルトの名無しさん
2006/05/06(土) 17:37:46ビット演算で解きたいんだろうな・・
0754デフォルトの名無しさん
2006/05/06(土) 17:38:082 010 1
3 011 0
4 100 2
5 101 0
6 110 1
左が十進、真ん中が二進、右が二進表現で立っている最右ビットの位置です。
なにかいい方法がありそうな気がするんですが。
0755デフォルトの名無しさん
2006/05/06(土) 17:39:37単純に数えればいいんじゃないの?
一番左のビット位置を知るには >>7
それをカウントする方法は>>277
もっと効率いい方法が無いかという事? 表を作るんだから、それほど効率は上がらないだろう
0756デフォルトの名無しさん
2006/05/06(土) 17:40:320757デフォルトの名無しさん
2006/05/06(土) 17:45:58表を作るというかその場でつかいたいんですよね。
表を作るんならエラトステネスのふるいみたいなかんじで2のべき乗のところをインクリメント
していけばできそうですけどね。
元のコードが
for(i = 1; i < (1 << 16); i++){
func(ffs(i));
}
みたいな感じで、ちょっと改良したのが
func(0);
func(1);
func(0);
for(i = 1; i < (1 << 16) >> 2; i++){
func(ffs(i) + 2);
func(0);
func(1);
func(0);
}
みたいな感じです。
0758デフォルトの名無しさん
2006/05/06(土) 17:48:49unsigned ffs(unsigned n){
n = (~n & (n - 1));
n = n - ((n >> 1) & 0x5555);
n = (n & 0x3333) + ((n >> 2) & 0x3333);
n = (n + (n >> 4)) & 0x0F0F;
n = n + (n >> 8);
return n & 0x1F;
}
としています(高々16ビットなので)。
インクリメントしていくんなら ffsを呼ばないでできないかなあ
と思っているんですが無理でしょうか?
0759デフォルトの名無しさん
2006/05/06(土) 17:51:00使い道は何? その逆にMSBの位置を知るのは浮動小数点化なんかで必要になるのは判るのだけど
0760デフォルトの名無しさん
2006/05/06(土) 17:58:26しかも、それをmemsetよりも速い、もしくは近いレベルまでにしたいと思ってます。
何かよい方法はありますか?
0761デフォルトの名無しさん
2006/05/06(土) 18:00:26学校の宿題でブロック符号の符号語の重み分布を求めるプログラムを書くというやつでして
ハミング距離が1の符号を辿っていくときにグレイコードの反転するビットの位置がこれなんです。
nビット目が反転する時は生成行列の下からn行目を足すという感じで 2^16-1回足すと
2^16個ある符号を全て得ることができるんです。
別に高速化する必要はないんですが、かっこいいやりかたがあるんじゃないかっていう好奇心です。
0762デフォルトの名無しさん
2006/05/06(土) 18:01:56再帰的にスタックを16段使って出力すればいいんじゃないの?
0763デフォルトの名無しさん
2006/05/06(土) 18:06:17具体的に目的を提示しないと答えが出ないと思うよ。
つーか、制御系スレ向きかな。
0764デフォルトの名無しさん
2006/05/06(土) 18:08:54どういうやり方なんでしょうか?
コルーチンぽいのがあればできる予感はするんですが。
0765デフォルトの名無しさん
2006/05/06(土) 18:09:01ちょっと理屈で考えてみろ
メモリーに書き込むにはサイクルが必要だ
メモリーから読み込むにもサイクルが必要だ。
両方をやろうと欲張ってるのに、片方だけやってるのと同じコストで出来る筈がない。
0766デフォルトの名無しさん
2006/05/06(土) 18:11:31として仮に1024バイト分0x35を書き込んだと仮定します。
その際に本当に0x35で書き込まれたのかをチェックしたいのです。
そのチェック方法と、さらに
1.書き込みながら随時チェック
2.すべてのデータを書き込んだ後全部チェック
のどちらが速いかなどです。
0767デフォルトの名無しさん
2006/05/06(土) 18:18:140768デフォルトの名無しさん
2006/05/06(土) 18:21:16ではキャッシュのエラーを検出出来ないので、
"2.すべてのデータを書き込んだ後全部チェック"
が正解。
なんてね
0769デフォルトの名無しさん
2006/05/06(土) 18:28:430770デフォルトの名無しさん
2006/05/06(土) 18:30:250771デフォルトの名無しさん
2006/05/06(土) 18:31:220772デフォルトの名無しさん
2006/05/06(土) 18:34:06再帰的に書けばいいという事
最初に 0 0x10000 16 16 の4つを渡して
先頭で最後の引き数を1減らす 16->15...0と
これが0になったら2番目を出力して終わり
でなければ、自分自身を2度呼び出す
1番目は 0+,0x10000/2,16,15
2番目は 0+0x10000/2,0x10000/2,15,15
結果、最後の引き数が0の時は、1番目の引き数は2進数を順を刻むことになり3番目の引数が目的
0773デフォルトの名無しさん
2006/05/06(土) 18:47:29void doit(int i)
{ printf("%d\n", i);}
template<int N> void FFS()
{ FFS<N-1>(); doit(N); FFS<N-1>();}
template<> void FFS<2>( )
{ doit(0); doit(1); doit(0); doit(2); doit(0); doit(1); doit(0);}
int main()
{ FFS<16>();}
ビット演算関係ないけど(w
0774デフォルトの名無しさん
2006/05/06(土) 19:39:020775デフォルトの名無しさん
2006/05/06(土) 19:52:460776デフォルトの名無しさん
2006/05/06(土) 20:00:24しかし、逆アセンブルした奴は目を剥くだろうな
0777デフォルトの名無しさん
2006/05/06(土) 20:45:51よく分からないんですが、それは条件分岐をたくさんするんでしょうか?
だったら ffsと変わらない気がします。
0778デフォルトの名無しさん
2006/05/06(土) 20:57:15条件分岐が嫌なら、同じような関数を16個ほど書いてネストすればいい
それでも >>773よりマシだ
0779デフォルトの名無しさん
2006/05/06(土) 20:58:520780デフォルトの名無しさん
2006/05/06(土) 21:00:48また、ネスト深さの引き数はいらない
1番目2番目の引き数も、何の数かが必要なければいらない。
つまり引き数は一つでいい
0781デフォルトの名無しさん
2006/05/06(土) 21:04:13void dispffs( int level){
if( level == 2 ) { doit(0); doit(1); doit(0); doit(2); doit(0); doit(1); doit(0); return;}
dispffs( level-1); doit( level ); dispffs( level-1);
}
0782デフォルトの名無しさん
2006/05/06(土) 21:22:48おお、できました。深さは高々16だし、幅が2^16-1ってだけで負担にはならないですね。
再帰で解くという発想がありませんでした。やりたかったこととは違うんですが、これは美しいですね。
関数呼び出しのコストとか考えると微妙なのかもしれませんが。
ただ if(level == 0) doit(0) でいいですよね。
0783デフォルトの名無しさん
2006/05/06(土) 21:30:40実際に速度を測ったら普通に ffs呼んだ方が速かったので悲しかったです。
自分でスタック用意すれば速くなるかもしれませんね。
0784デフォルトの名無しさん
2006/05/06(土) 21:43:10unsigned Stack[16];
unsigned *SP = Stack + 1;
void comp(unsigned n){
for(;;){
if(n == 0){
func(0);
n = *--SP;
if(n == 0) return;
}
else {
*SP++ = n;
--n; continue;
}
func(n);
--n;
}
}
0785デフォルトの名無しさん
2006/05/06(土) 21:44:23Cで書いて、より速いのはなかなか作れんだろう。
巨大テーブル使うんなら別だが。
0786デフォルトの名無しさん
2006/05/06(土) 21:58:15>>758
たしかにそうですね。>>758より速かったです。
インラインアセンブラで bsf使って書いたらすごい遅かったんですけどね。
/usr/src/lib/libc/string/ffs.c は普通のCのコードだしソースがどこにあるのか
分からない...
0チェックしなくていいからもっと高速にかけるかもしれないんですけどね。
void comp(unsigned n){
for(;;){
if(n == 0){
func(0);
n = *--SP;
if(n == 0) return;
func(n);
}
else {
*SP++ = n;
}
--n;
}
}
0787デフォルトの名無しさん
2006/05/06(土) 22:11:15最適化でコードがばっさりなくなってたりとか。
0788デフォルトの名無しさん
2006/05/06(土) 22:27:23ここらかね。
http://cvsweb.netbsd.org/bsdweb.cgi/src/common/lib/libc/arch/i386/string/ffs.S?rev=1.1
0789デフォルトの名無しさん
2006/05/06(土) 22:47:170790デフォルトの名無しさん
2006/05/06(土) 22:54:43*address = data;
address++;
*address = data;
address++;
*address = data;
address++;
*address = data;
address++;
と
2.
address[0] = data;
address[1] = data;
address[2] = data;
address[3] = data;
address += 4;
の処理があったとして、これをループ処理を行った場合、1と2ではどちらが速いでしょうか?
0791デフォルトの名無しさん
2006/05/06(土) 22:59:3064bitまとめて〜とか、アラインメントを〜とかを考えないと、
CPU側に多少無駄があっても変わらない。
0792デフォルトの名無しさん
2006/05/06(土) 23:01:26>>790 基本的にコンパイラと環境による
話題のSHでは
下の場合は効率の良いアドレッシングモードがあるので速いかもしれないし
上の方が巧く命令が馬って速いかもしれないし
パソコンのCPUならメモリアクセスに隠れてしまうし
という事で、どっちが速いか判らん
0793デフォルトの名無しさん
2006/05/06(土) 23:12:22最適化支援
0794デフォルトの名無しさん
2006/05/07(日) 00:23:14ヘッダに
#ifdef __GNUC__
#define ffs __builtin_ffs
の類があったりしないか?
ところで、遅くなった bsf の淫乱アセンブラの表記に興味がある。
0795デフォルトの名無しさん
2006/05/07(日) 09:20:04strings.h にも ffs.cにも書いてありませんが、
/usr/src/lib/libc/arch/i386/string/ffs.Sに >>788と同じファイルが
ありました(NetBSDです)。
インラインアセンブラは
asm("ffs2:");
asm("bsfl 4(%esp), %eax");
asm("ret");
って書いただけです。
ffsは-O2以上で
xorl %eax, %eax
bsfl %ecx, %edx
sete %al
negl %eax
orl %eax, %edx
incl %edx
というのが埋めこまれていました。ffs2は
pushl %ebx
call ffs2
movl %ebx, (%esp)
となっていました。他にもGCCの最適化が頭良すぎてちゃんと計れてないっぽいです。
副作用を起こさない、とか引数一緒なら返り値一緒ってどうやって判断してるんでしょうか?
0796デフォルトの名無しさん
2006/05/07(日) 10:27:44GCC on NetBSD/x86だったら以下のサンプルをコンパイルしてみそ。
int f(unsigned a)
{
return __builtin_ffs(a);
}
int b(unsigned a)
{
int r;
asm("bsfl %1,%0": "=r"(r): "g"(a));
return r;
}
インラインアセンブラの使い方がよくない。
gcc asm constraint でぐぐれ。
0797デフォルトの名無しさん
2006/05/07(日) 16:16:17インライン展開されるようになりました。
オリジナルの ffsより若干速いって感じです。
この改良ffsを >>757の下のコードで使うと >>786をちょっと改良したやつより速かったです。
そしてテーブル使うよりも速かったです。
僕がイメージしていたのは変数二つをループでいじくりまわして
0 1 0 2 0 1 0 3 という結果を得るという感じだったんですけど
bsfがあるならそれを使った方がよさそうですね。
移植性考えるなら ffs(i) - 1を使ってもいいと思うんですが
インライン展開されて
incl %eax
decl %eax
となっていて萎えました。
0798デフォルトの名無しさん
2006/05/07(日) 21:55:46メモリをクリア&確認する際に
1.
アドレスに0をセット
0になってるかORしてチェック
アドレスを加算
以下サイズ分ループ
2.
アドレス+サイズを算出(終了アドレス+1)
アドレスを減算
アドレスに0をセット
0になってるかORしてチェック
以下サイズ分ループ
1と2で、やってることは似たようなもののはずなのに(ただ単にアドレスを加算してるか減算しているかの違いぐらい)
なぜか処理速度(サイクル数)が異なってました。
原因として何が考えられますか?
0799デフォルトの名無しさん
2006/05/07(日) 22:46:150800デフォルトの名無しさん
2006/05/07(日) 22:47:19アセンブリ出力を見て調べろ。
0801デフォルトの名無しさん
2006/05/08(月) 02:05:35jnz loop
と
inc eax
cmd eax,ecx
jne loop
のちがいじゃねーの
0802デフォルトの名無しさん
2006/05/08(月) 08:15:380803デフォルトの名無しさん
2006/05/08(月) 09:05:020804デフォルトの名無しさん
2006/05/21(日) 13:12:490805デフォルトの名無しさん
2006/05/21(日) 13:29:27ようはパイプラインの問題だけだと思う
0806デフォルトの名無しさん
2006/05/21(日) 16:35:410807デフォルトの名無しさん
2006/05/28(日) 21:50:290808デフォルトの名無しさん
2006/06/01(木) 04:03:020809デフォルトの名無しさん
2006/06/03(土) 03:19:550810デフォルトの名無しさん
2006/06/03(土) 10:04:280811デフォルトの名無しさん
2006/06/05(月) 17:02:57ttp://www.amazon.co.jp/exec/obidos/ASIN/4434046683
この本を読めるようになるには数学以外でどの程度の知識が必要でしょうか?
0812デフォルトの名無しさん
2006/06/05(月) 17:20:11その書籍が記述されている言語の基本知識は最低限必要です
例:日本語
あかいさくらのはながさいた
0813デフォルトの名無しさん
2006/06/05(月) 17:59:180814デフォルトの名無しさん
2006/06/05(月) 22:48:550815デフォルトの名無しさん
2006/06/06(火) 02:14:190816デフォルトの名無しさん
2006/06/06(火) 02:14:53ごめん
7^7^7 の 1 桁目の数字は?
0817デフォルトの名無しさん
2006/06/06(火) 04:23:27最下位ビットを聞いているのなら1だ。
a^aは常に0だから、簡単にわかる。
0818デフォルトの名無しさん
2006/06/06(火) 14:52:567
0819デフォルトの名無しさん
2006/06/06(火) 17:35:120820デフォルトの名無しさん
2006/06/06(火) 22:39:490821デフォルトの名無しさん
2006/06/08(木) 05:04:350822デフォルトの名無しさん
2006/06/08(木) 05:18:190823デフォルトの名無しさん
2006/06/08(木) 16:12:37と翻訳してみたが
0824デフォルトの名無しさん
2006/06/24(土) 22:15:33http://money4.2ch.net/test/read.cgi/employee/1151055613/
(((( ;゚Д゚)))ガクガクブルブル2005年度入社278人目
http://money4.2ch.net/test/read.cgi/employee/1151055613/
(((( ;゚Д゚)))ガクガクブルブル2005年度入社278人目
http://money4.2ch.net/test/read.cgi/employee/1151055613/
(((( ;゚Д゚)))ガクガクブルブル2005年度入社278人目
http://money4.2ch.net/test/read.cgi/employee/1151055613/
0825デフォルトの名無しさん
2006/06/24(土) 22:18:470826デフォルトの名無しさん
2006/06/25(日) 00:15:53n x nの正方pixelのfontデータを90度回転させる
効率のよい処理方式でも考えてみれ
0827デフォルトの名無しさん
2006/06/25(日) 00:42:250828デフォルトの名無しさん
2006/06/25(日) 01:42:02n=16用だがfontx[]に16x16のbitmapが格納されているとして
fonty[]に90度左回転したビットマップを格納する処理w
unsigned short fontx[16],fonty[16];
#define ROT(var,x,y) (0!=((var)[(x)] & (1 << (y))))<<(x)
#define ROT1616(to,fr,x) (to)[(x)]= \
ROT((fr),15,15-(x))|ROT((fr),14,15-(x))|ROT((fr),13,15-(x))|ROT((fr),12,15-(x))|\
ROT((fr),11,15-(x))|ROT((fr),10,15-(x))|ROT((fr), 9,15-(x))|ROT((fr), 8,15-(x))|\
ROT((fr), 7,15-(x))|ROT((fr), 6,15-(x))|ROT((fr), 5,15-(x))|ROT((fr), 4,15-(x))|\
ROT((fr), 3,15-(x))|ROT((fr), 2,15-(x))|ROT((fr), 1,15-(x))|ROT((fr), 0,15-(x))
:
ROT1616(fonty, fontx, 0); ROT1616(fonty, fontx, 1);
ROT1616(fonty, fontx, 2); ROT1616(fonty, fontx, 3);
ROT1616(fonty, fontx, 4); ROT1616(fonty, fontx, 5);
ROT1616(fonty, fontx, 6); ROT1616(fonty, fontx, 7);
ROT1616(fonty, fontx, 8); ROT1616(fonty, fontx, 9);
ROT1616(fonty, fontx,10); ROT1616(fonty, fontx,11);
ROT1616(fonty, fontx,12); ROT1616(fonty, fontx,13);
ROT1616(fonty, fontx,14); ROT1616(fonty, fontx,15);
0829デフォルトの名無しさん
2006/07/16(日) 17:27:14今日もネタもないのにageてやるからな!
 ̄ ̄∨ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
∧_∧ ∧_∧ age
(・∀・∩)(∩・∀・) age
(つ 丿 ( ⊂) age
( ヽノ ヽ/ ) age
し(_) (_)J
0830デフォルトの名無しさん
2006/07/16(日) 17:30:210831デフォルトの名無しさん
2006/07/16(日) 17:45:010832830
2006/07/16(日) 18:02:49すまん
x86です
0833デフォルトの名無しさん
2006/07/16(日) 18:10:40こんな感じの反転
110100
↓
001011
0834デフォルトの名無しさん
2006/07/16(日) 18:12:210835デフォルトの名無しさん
2006/07/16(日) 18:13:1410011
↓
11001
こんな感じの最上位から最下位ビットの並びを
最下位から最上位へ変換ということです
0836デフォルトの名無しさん
2006/07/16(日) 18:18:130837・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/07/16(日) 18:22:505bitなら8bitで十分ですな
n = (n << 4) & 0xF0 | (n >> 4) & 0x0F;
n = (n << 2) & 0xCC | (n >> 2) & 0x33;
n = (n << 1) & 0xAA | (n >> 1) & 0x55;
n >>= 3;
あんまりビット数が多い場合はbyteレベルならbswapとかシャッフル命令とかを使って、
バイト単位の反転を行っておいてからやると高速化できるかと思われます
0838デフォルトの名無しさん
2006/07/16(日) 18:23:34ダンゴきたあああああああああああああああああああああああああ
0839・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/07/16(日) 18:25:47n = ((n << 2) & 0xCC) | ((n >> 2) & 0x33);
n = ((n << 1) & 0xAA) | ((n >> 1) & 0x55);
n >>= 3;
演算子の評価順位が不安なので修正
0840デフォルトの名無しさん
2006/07/16(日) 18:37:230841デフォルトの名無しさん
2006/07/17(月) 06:19:000x00, 0x80, 0x40, 0xC0, ....
};
って、テーブル作っとく。
0842デフォルトの名無しさん
2006/07/17(月) 10:15:03尤も、そもそも最近のCPUでxlatが速いかどうかが問題だけど。
0843デフォルトの名無しさん
2006/07/17(月) 10:51:02switch(n&0xf){
case 0x0:H=0x00;break;
case 0x1:H=0x80;break;
...
}
switch(n&0xf0){
case 0x00:L=0x0;break;
case 0x10:L=0x8;break;
...
}
return H|L;
の4パターンを関数にしてざっと測ってみたところ、時間的にはどれも同じだった。
関数コールのオーバーヘッドで埋まる程度の処理って事だ。
なので素直に>>839でおk
0844デフォルトの名無しさん
2006/07/17(月) 11:43:350845・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/07/17(月) 12:02:06ビット数が増えるとテーブルじゃ苦しいんだよね
32bitなら
n = (n << 16) | (n >> 16);
n = ((n << 8) & 0xFF00FF00) | ((n >> 8) & 0x00FF00FF);
n = ((n << 4) & 0xF0F0F0F0) | ((n >> 4) & 0x0F0F0F0F);
n = ((n << 2) & 0xCCCCCCCC) | ((n >> 2) & 0x33333333);
n = ((n << 1) & 0xAAAAAAAA) | ((n >> 1) & 0x55555555);
VC2005使う限りでは組み込みのbswap使うほうが速かった
n = _bswap( n );
n = ((n << 4) & 0xF0F0F0F0) | ((n >> 4) & 0x0F0F0F0F);
n = ((n << 2) & 0xCCCCCCCC) | ((n >> 2) & 0x33333333);
n = ((n << 1) & 0xAAAAAAAA) | ((n >> 1) & 0x55555555);
0846デフォルトの名無しさん
2006/07/17(月) 12:19:19なんでもmemsetやmemcpyやmemmoveなどを改良して高速動作するように
作れとのこと。何かしらサンプルはありますか?
そもそも標準関数であるmem系を改良する価値はあるのか?
0847デフォルトの名無しさん
2006/07/17(月) 12:23:00つ memcpy_amd
0848・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/07/17(月) 12:26:33一番有効と思われるのがMMX/SSEを使う方法ですな。
ビット演算云々よりアセンブラとかSIMD関連になります
ただ、キャッシュ内でこね回すだけならともかく、メインメモリからの読み書きなら
FSBで律速されるのであんまり意味は薄いです
0849デフォルトの名無しさん
2006/07/17(月) 12:59:350850デフォルトの名無しさん
2006/07/17(月) 13:41:04しかし、よしんば速くなったところで2〜3倍速なので
劇的に速くなるとも思えない。
まだボトルネックを確認してなければプロファイルが先。
0851864
2006/07/17(月) 13:47:24用途はシーケンサ制御です。
そのため、あるバッファからあるバッファへメモリ展開などを行う際に
高速化する必要があるらしいのです。
CPUはSH-3というものを使っています。
コンパイラはSHの純正であるSHCの最新版です。
正直、じゃあ上司が作れば?と思うのですがいえない今日この頃。
でもある意味ここで聞く内容ではない気もしてきました。
聞くとしたら組み込み系?それともC言語系ですかね?
ここで聞いた理由はここの人たちはレベルが高いような気がしましたので
0852デフォルトの名無しさん
2006/07/17(月) 13:50:120853デフォルトの名無しさん
2006/07/17(月) 14:10:07あとは素直にalignmentで場合分けして最適化すれば十分速くなる。
0854デフォルトの名無しさん
2006/07/17(月) 14:11:54どこがビット演算なのかと。で、本当にボトルネックがmemcpy()なのかどうかの確認はすること。
「メモリ展開」処理そのものが遅かったら転送速度を上げても無駄だぞ。
0855デフォルトの名無しさん
2006/07/17(月) 14:22:06SH4をSHCでやってる仲間wだが、
ちょっといいたいことがある。
上司をここに呼べwww
つーかビット演算と関係ネーシ。
0856デフォルトの名無しさん
2006/07/17(月) 14:24:29>ここで聞いた理由はここの人たちはレベルが高いような気がしましたので
だからじゃねーの?
何を持ってレベルが高いのかは不明だが
0857デフォルトの名無しさん
2006/07/17(月) 14:27:160858デフォルトの名無しさん
2006/07/17(月) 14:48:38まあ846もここで聞くのがお門違いってこと。
0859デフォルトの名無しさん
2006/07/17(月) 15:28:10アホな事やらせてみるのもありだと思う。
0860デフォルトの名無しさん
2006/07/17(月) 18:02:58バイト単位ならエンディアン変換関数があるんだから、それをかけた後に各バイトにビット反転かければいいじゃん。
0861デフォルトの名無しさん
2006/07/17(月) 18:04:101の補数?
0862デフォルトの名無しさん
2006/07/17(月) 18:58:22ここの493。
x86なら、leaやbswapが使えておいしい。
0863・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/07/17(月) 21:16:20いや、2個目はそれと全く同じことやってますが。
VC2005の_bswap()はそのまんまbswapに展開されますぜ
0864デフォルトの名無しさん
2006/07/17(月) 21:27:13いや、単に解説投下しただけで、他意はないです。
0865デフォルトの名無しさん
2006/08/08(火) 23:08:26x が与えられたとき,2^(a+1) > x ≧ 2^a となる 2^a を高速に(ループ等を使わ
ず,できればビット演算のみで)求める方法を探しているのですが,そういうア
ルゴリズムご存じの方いらっしゃらないでしょうか?
言語は C です.
よろしくお願いします.
0866・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/08/08(火) 23:23:02答書いちゃうけど
unsigned int flp32(unsigned int x) {
x |= x >> 1;
x |= x >> 2;
x |= x >> 4;
x |= x >> 8;
x |= x >> 16;
return x - (x >> 1);
}
機種依存の方法を使うなら、組み込みのビットスキャンを使うなり、
浮動小数にキャストしてSIMDレジスタ上でごにょごにょ(ry
0867デフォルトの名無しさん
2006/08/08(火) 23:28:23有り難うございます.元スレでもどうようの答えをいただけました.
>浮動小数にキャストしてSIMDレジスタ上でごにょごにょ(ry
指数部を取り出すということだと思ったのですが,ここで SIMD レジスタが出
てくるのは何ででしょうか?よろしければご教授ください.
0868・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/08/08(火) 23:41:13仮数部に相当する23bitをマスクしてゼロクリアしてしまってから整数に戻す手もある。
0869デフォルトの名無しさん
2006/08/09(水) 00:54:26有り難うございます.元スレでもどうようの答えをいただけました.
0870デフォルトの名無しさん
2006/08/09(水) 21:29:51DSPとかにも、BSRのような命令はある。
浮動小数点への変換とか圧縮とかに便利だから。
でもBSRって書くと、どうもサブルーチンコール命令に勘違いしてしまうから嫌だな
0871デフォルトの名無しさん
2006/08/20(日) 09:24:060872デフォルトの名無しさん
2006/08/25(金) 21:44:23一連の反転値数列が欲しい場合は、
///////////////////////////////
n = 1 << 5;
j_rev[0] = 0;
i=0;
for( j=1; j < n-1; j++ ){
for( k=n>>1; k > (i^=k); k>>=1 );
j_rev[j] = i;
}
j_rev[n-1] = n-1;
//////////////////////////////////
これで、j_rev[b10011] = b11001
のようになります。
今日、fft の勉強しててやり方を知りました。
0873デフォルトの名無しさん
2006/08/26(土) 22:28:57黒石の打てる箇所をビット演算で求めたいのですが、どうしたらいいですか?
0874デフォルトの名無しさん
2006/08/26(土) 22:35:42ルールに則って打てる場所なら�_
0875デフォルトの名無しさん
2006/08/26(土) 23:17:41↑にZebraのソースコードが公開されているのですが、何がなにやらよくわりません
0876デフォルトの名無しさん
2006/08/27(日) 09:02:13黒石のbitboardを black_board, 白石のを white_board とすれば、以下のようになる
blank = ~(black_board | white_board); // 空白の箇所
t = (blank >> 1) & white_board & 0x7f7f7f7f7f7f7f7f; // 空白 のパターン
t = (t >> 1) & black_board & 0x7f7f7f7f7f7f7f7f; // 空白黒 のパターン
mobility = t << 2; // 右方向に1個返せる箇所
これであってる?
0877デフォルトの名無しさん
2006/08/27(日) 09:19:53t = (black_board << 1) & white_board & 0xfefefefefefefefe; // 白黒 のパターン
blank = ~(black_board | white_board); // 空白の箇所
mobility = blank & (t << 1) & 0xfefefefefefefefe; // 右方向に1個返せる箇所
0878デフォルトの名無しさん
2006/08/27(日) 09:31:43inline uint64 move_left(b) { return (b<<1)&0xfefefefefefefefe; }
と定義しておく。
1方向に返る石の数は最大6個なので、右方向の処理は以下のようになる
t1 = white & move_left(black); // 白黒 のパターン
t2 = white & move_left(t1); // 白白黒 のパターン
t3 = white & move_left(t2); // 白白白黒 のパターン
t4 = white & move_left(t3); // 白白白白黒 のパターン
t5 = white & move_left(t4); // 白白白白白黒 のパターン
t6 = white & move_left(t5); // 白白白白白白黒 のパターン
blank = ~(black | white); // 空白の箇所
mobility = blank & move_left(t1 | t2 | t3 | t4 | t5 | t6); // 右方向に返せる箇所
あとはこれを残りの7方向についてやればおけ?
0879デフォルトの名無しさん
2006/08/27(日) 11:25:28t = w & (black << 1);
t |= w & (t << 1);
t |= w & (t << 1);
t |= w & (t << 1);
t |= w & (t << 1);
t |= w & (t << 1);
blank = ~(black | white); // 空白の箇所
mobility = blank & (t << 1);
もうちょっとすっきりしたかな?
合ってる?
0880デフォルトの名無しさん
2006/08/27(日) 13:03:20>>878 と比べると
・ 論理積演算が1回で済んでいる
・ 使用する変数の数が減っているので、アセンブラにするときに都合がよい
・ 0x7e...7e と 論理積をとっているので、逆方向の処理についてもこの結果が使用できる
というアドバンテージがある
念のために、8ビットの全パターンについてプログラムを組んで動作を確認してみたところ、
878 と 879 は同じ結果を返した。
なので、879 は合ってるようだ
0881デフォルトの名無しさん
2006/08/27(日) 13:16:49白石を反転させて、盤面を更新したい。
どう書いたらいい?
打つ場所は、Bitboard で表したときに1が立っているビットの位置(0..63)で指定するものとする。
int pos;
これをbitboradパターンに変換するために Bitboard set_mask[64] という変換テーブルが既に
用意されているものとする
0882デフォルトの名無しさん
2006/08/27(日) 13:29:45Bitboard mobility = getMobility(black, white); // すべての着手可能箇所を取得
while( mobility != 0 ) {
int pos = getFirstOne(mobility); // ビット値が1の一番下の位置を返す
Bitboard rev = getRevBlack(black, white, pos); // pos に黒石を打ったときに反転する白のパターンを取得
Bitboard m = (1<<pos); // 着手位置のビットパターン
black |= m | rev; // 黒石を更新
white ^= reb; // 白石を更新
// なんらかの処理
black ^= m | rev; // 黒石を元に戻す
white ^= reb; // 白石を元に戻す
mobility ^= m;
}
0883デフォルトの名無しさん
2006/08/27(日) 14:58:090884デフォルトの名無しさん
2006/08/27(日) 21:47:54三三三 >>883
三三三 >>883
_ ∩
⊂/ ノ ) 三三三 >>883
/ /ノノノ 三三三 >>883
し'⌒∪
0885デフォルトの名無しさん
2006/08/27(日) 21:57:49と答えてみる
0886デフォルトの名無しさん
2006/08/27(日) 22:54:15まずは1方向のみ&ループを使ったコード:(m に着手可能なのは次善にチェック済みとする)
Bitboard rev = 0;
Bitboard mask = m;
for(;;) {
mask >>= 1;
if( (mask & black) != 0 ) break;
rev |= mask;
}
さあ、ループを無くすことができるか?
0887デフォルトの名無しさん
2006/08/27(日) 23:00:38>>886 のコードではまずいぞ
0888デフォルトの名無しさん
2006/08/27(日) 23:45:33それぞれの方向の値を保持しておけば、特定の方向に返るかどうかがわかる。
そうであれば、>>886 のコードでも大丈夫だ
0889デフォルトの名無しさん
2006/08/28(月) 12:38:49シフトと論理和が分配法則をみたし、論理和が重複法則を満たすからなんだね
(x | y) << 1 == (x << 1) | (y << 1) // 分配法則
x | y | y == x | y // 重複法則
0890デフォルトの名無しさん
2006/08/30(水) 21:27:30これを高速に90度回転するにはどうしたらいいんですか?
0891デフォルトの名無しさん
2006/08/30(水) 21:28:5532ビットレジスタ2つ、または64ビットレジスタに入っているものとします
0892デフォルトの名無しさん
2006/08/30(水) 21:29:160893デフォルトの名無しさん
2006/08/30(水) 22:48:16首を90度曲げる
0894デフォルトの名無しさん
2006/08/30(水) 22:51:010895デフォルトの名無しさん
2006/08/30(水) 23:17:13少々馬鹿な方法でやろうが、CPUがその程度の処理をこなす速度に
人間が首を曲げる速度で対抗できるわけがなかろうが。
0896・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/08/30(水) 23:23:43とりあえず汎用性のあるのは
uint64 a[256] ;
memset(a, 0, sizeof(a);
for ( int i = 0; i < 256; i++ ) for ( int j = 0; j < 8; j++ ) a[i] += (i & (1 << j)) << (7 * j);
//↑ここまではあらかじめ計算しておく
reg = a[reg & 0xFF] | (a[(reg >> 8) & 0xFF] << 1) | (a[(reg >> 16) & 0xFF] << 2)
| (a[(reg >> 24) & 0xFF] << 3) | (a[(reg >> 32) & 0xFF] << 4) | (a[(reg >> 40) & 0xFF] << 5)
| (a[(reg >> 48) & 0xFF] << 6)| (a[reg >> 56] << 7);
0897デフォルトの名無しさん
2006/08/30(水) 23:23:53一応、ハッカーの楽しみを読めば乗っているよ。
typedef unsigned long long ulong;
ulong rotate(ulong x){
x =
x << 1 & 0xAA00AA00AA00AA00ULL |
x >> 1 & 0x0055005500550055ULL |
x >> 8 & 0x00AA00AA00AA00AAULL |
x << 8 & 0x5500550055005500ULL ;
x =
x << 2 & 0xCCCC0000CCCC0000ULL |
x >> 2 & 0x0000333300003333ULL |
x >> 16& 0x0000CCCC0000CCCCULL |
x << 16& 0x3333000033330000ULL ;
x =
x << 4 & 0xF0F0F0F000000000ULL |
x >> 4 & 0x000000000F0F0F0FULL |
x >>32 & 0x00000000F0F0F0F0ULL |
x <<32 & 0x0F0F0F0F00000000ULL ;
return x;
}
0898・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/08/30(水) 23:34:09と。。。
論理和・論理積・シフト演算の優先順位ってどうだったっけ?
0899デフォルトの名無しさん
2006/08/30(水) 23:39:43シフト演算は、加減算のすぐ下、各種論理演算よりは上。
論理和と論理積では論理積の優先順位が高い。
通常の和と積では、積の優先順位が高いのと同じ。
0900デフォルトの名無しさん
2006/08/30(水) 23:39:52論理積と論理和の優先順位の並びは算数の積と和の優先順位と同じ並びかたで、
なおかつシフトより優先度が低い。
自分はこの辺体にしみついちゃってるから結構()は省きがち。
0901デフォルトの名無しさん
2006/08/30(水) 23:58:31何で、これで回転できるの?
さぱーりわからん
0902897
2006/08/31(木) 00:11:48分割統治方をつかってますです。
最初は2*2の回転。
次は4*4の回転。既に4*4の中身の2*2の回転は済んでいるので外側だけの回転。
最後は8*8の回転。既に8*8の中身の4*4の回転は済んでいるので外側だけの回転。
とりあえず、下は4*4だけどこんな感じに回転する。
1234
5678
ABCD
EFGH
↓2*2の回転
2648
1537
BFDH
AECG
↓4*4の回転
48DH
37CG
26BF
15AE
0903デフォルトの名無しさん
2006/08/31(木) 08:12:35転置してバイトオーダを入れ替える方が速くないかい?
uint64 rotLeft90(uint64 x)
{
uint64 t = ((x >> 7) ^ x) & 0x00aa00aa00aa00aa;
x = x ^ t ^ (t << 7);
t = ((x >> 14) ^ x) & 0x0000cccc0000cccc;
x = x ^ t ^ (t << 14);
t = ((x >> 28) ^ x) & 0x00000000f0f0f0f0;
x = x ^ t ^ (t << 28);
return byteSwap(x);
}
こっちは (シフト演算*2 + 論理演算*4) * 3 + byteSwap
byteSwap は x86 の bswap を使えば4命令でできる
>>897 は (シフト演算*4 + 論理演算*7) * 3
0904デフォルトの名無しさん
2006/08/31(木) 08:57:14@Athlon 64 2.0GHz
>>897 は 5.55秒
>>903 は 3.45秒 (byteSwap() の部分を __asm で記述した)
0905デフォルトの名無しさん
2006/08/31(木) 09:08:25memset の閉じカッコが抜けている
しかも、テストプログラムを実行すると正しい値を返さなかった
0906デフォルトの名無しさん
2006/08/31(木) 09:18:192.53秒/1億回ループ
デバッグすると遅くなるかもしれんが、今は速いぞ
0907デフォルトの名無しさん
2006/08/31(木) 09:54:53static uint64 g_rotTable[256];
void setup_rotTable()
{
//ix のビットパターンを左回転させたものを g_rotTable[ix] に格納
for(int ix = 0; ix < 256; ++ix) {
uint64 v = 0;
uint64 vm = 0x0100000000000000;
for(int mask = 1; mask < 0x100; mask <<= 1, vm >>= 8) {
if( (ix & mask) != 0 )
v |= vm;
}
g_rotTable[ix] = v;
}
}
uint64 rotLeft90_table(uint64 x)
{
uint64 t = g_rotTable[x & 0xff];
t |= (g_rotTable[(x >> 8) & 0xff] << 1);
t |= (g_rotTable[(x >> 16) & 0xff] << 2);
t |= (g_rotTable[(x >> 24) & 0xff] << 3);
t |= (g_rotTable[(x >> 32) & 0xff] << 4);
t |= (g_rotTable[(x >> 40) & 0xff] << 5);
t |= (g_rotTable[(x >> 48) & 0xff] << 6);
t |= (g_rotTable[(x >> 56) & 0xff] << 7);
return t;
}
0908デフォルトの名無しさん
2006/08/31(木) 10:04:135.09秒
>>903 より全然遅い
それぞれの演算数を比べると以下のとおりだ
>>907 : 5.09秒 シフト演算 * 14 + 論理演算 * 15 + 配列によるメモリアクセス * 8
>>897 : 5.55秒 シフト演算 * 12 + 論理演算 * 21
>>903 : 3.45秒 シフト演算 * 6 + 論理演算 * 12 + byteSwap (アセンブラ4命令)
>>907 のコードだとメモリは食うし遅いしで、いいこと無いね
>>896 に書いてある「汎用性のある」とはどういう意味だ?
0909デフォルトの名無しさん
2006/08/31(木) 10:17:130910デフォルトの名無しさん
2006/08/31(木) 10:20:14相当広い面積になった場合は首を曲げるほうが早いけどな
0911デフォルトの名無しさん
2006/08/31(木) 10:26:58ところで、時間計測は Athlon 64 2.0Ghz WinXP VC6 32ビットモードで計測している
VC6 の __int64 のシフト演算はサブルーチンコールになるので、非常に遅い
Athlon 64 の64ビットモードでコンパイルするとかなり高速になりそうだ
それと >>907 のコードはシフト処理を減らせばもっと高速になるはず
0912デフォルトの名無しさん
2006/08/31(木) 10:47:20uint64 rotLeft90_table(uint64 x)
{
uint32 hi = (uint32)(x >> 32);
uint32 low = (uint32)x;
uint64 t =g_rotTable[(uchar)(hi >> 24)];
t = t + t | g_rotTable[(uchar)(hi >> 16)];
t = t + t | g_rotTable[(uchar)(hi >> 8)];
t = t + t | g_rotTable[(uchar)hi];
t = t + t | g_rotTable[(uchar)(x >> 24)];
t = t + t | g_rotTable[(uchar)(x >> 16)];
t = t + t | g_rotTable[(uchar)(x >> 8)];
t = t + t | g_rotTable[(uchar)x];
return t;
}
しかし、処理時間は 6.69秒/1億回ループ と逆に増えてしまった。
何故だろう?
結局テーブルを用いる方法はテーブルアクセスが頻繁になりバス幅を使い切ってしまうので
よろしくない、ということなのかなぁ
0913デフォルトの名無しさん
2006/08/31(木) 10:47:56ヘッダ見る限り、インラインアセンブリで書いているようだけど。
0914デフォルトの名無しさん
2006/08/31(木) 19:01:28妄言のような気もするが、念のために MMX を使用した版も作ってみた。
アルゴリズムは最速の 転置を行って、バイトスワップをするのを使用
処理時間は 3.16秒/1億回ループ と期待したほどには高速化されなかった
uint64 rotLeft90_MMX(uint64 x)
{
__asm {
movq mm0, x
movq mm2, td_00aa00aa00aa00aa
movq mm1, mm0
psrlq mm1, 7
pxor mm1, mm0
pand mm1, mm2
pxor mm0, mm1
psllq mm1, 7
pxor mm0, mm1
=== 長いので省略 ===
movq x, mm0
mov edx, long ptr x ; 上下32ビット反転
mov eax, (long ptr x) + 4
bswap edx
bswap eax
}
}
0915デフォルトの名無しさん
2006/08/31(木) 20:38:31r (ulong x)
{
unsigned int a, b, c, d;
unsigned int y[2];
asm volatile ("movq %0, %%mm0" : : "m" (x));
asm volatile ("pmovmskb %%mm0, %0" : "=g" (a) :);
asm volatile ("psllq $1, %mm0");
asm volatile ("pmovmskb %%mm0, %0" : "=g" (b) :);
asm volatile ("psllq $1, %mm0");
asm volatile ("pmovmskb %%mm0, %0" : "=g" (c) :);
asm volatile ("psllq $1, %mm0");
asm volatile ("pmovmskb %%mm0, %0" : "=g" (d) :);
y[0] = a | (b << 8) | (c << 16) | (d << 24);
asm volatile ("psllq $1, %mm0");
asm volatile ("pmovmskb %%mm0, %0" : "=g" (a) :);
asm volatile ("psllq $1, %mm0");
asm volatile ("pmovmskb %%mm0, %0" : "=g" (b) :);
asm volatile ("psllq $1, %mm0");
asm volatile ("pmovmskb %%mm0, %0" : "=g" (c) :);
asm volatile ("psllq $1, %mm0");
asm volatile ("pmovmskb %%mm0, %0" : "=g" (d) :);
y[1] = a | (b << 8) | (c << 16) | (d << 24);
return y[0] | ((ulong) y[1] << 32);
}
pmovmskb使ったのってこういうのだと思ったけどコンパイラの最適化にかなりたよった
これより速いの書けなかった
ちなみに>>897のが5.96秒でこれが3.41秒だった
0916デフォルトの名無しさん
2006/08/31(木) 21:13:26and, or, xor (not)
right shift, left shift
ほかにある?ローテートとかもOK?
一応、addやmulとかもビットの演算にすぎないんだけど・・
0917デフォルトの名無しさん
2006/08/31(木) 21:31:370918デフォルトの名無しさん
2006/08/31(木) 21:33:29ただし、mul や div は論理演算に比べると実行速度が遅いので、
それを補って余りあるメリットがなければ使用しない方がよろし
0919・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/08/31(木) 23:03:531ビット左シフトはユニットの空きを考慮して適宜同一レジスタ間の加算で代用するのは常識
あと、SIMD整数ユニットは大概2本あり、AMDのSIMDはLatencyが大きいのでその辺も考慮されたい。
movq mm0, mmword ptr [src]
pmovmskb eax, mm0
mov byte ptr [dest + 7], eax
movq mm1, mm0
paddb mm0, mm0
psllq mm1, 4
pmovmskb edx, mm1
mov byte ptr [dest + 3], edx
paddb mm1, mm1
pmovmskb eax, mm0
pmovmskb edx, mm1
mov byte ptr [dest + 6], eax
mov byte ptr [dest + 2], edx
paddb mm0, mm0
paddb mm1, mm1
pmovmskb eax, mm0
pmovmskb edx, mm1
mov byte ptr [dest + 5], eax
mov byte ptr [dest + 1], edx
paddb mm0, mm0
paddb mm1, mm1
pmovmskb eax, mm0
pmovmskb edx, mm1
mov byte ptr [dest + 4], eax
mov byte ptr [dest], edx
つーか、全てにおいて最適なスケジューリングなんてねーだろよ
0920・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/08/31(木) 23:10:49何も出来ないゴミが喚いても無駄
0921デフォルトの名無しさん
2006/08/31(木) 23:11:230922・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/08/31(木) 23:14:42並列化してレイテンシを隠蔽すればいい。
pmovmskbはP6系アーキでもレイテンシ3くらいだったと思う。
0923デフォルトの名無しさん
2006/09/01(金) 00:02:280924・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/09/01(金) 00:03:100925デフォルトの名無しさん
2006/09/01(金) 00:04:18センスを感じない
0926デフォルトの名無しさん
2006/09/01(金) 00:10:10ulong y;
asm volatile ("movq %0, %%mm0" : : "m" (x));
asm volatile ("pmovmskb %mm0, %eax");
asm volatile ("movb %%al, %0" : "=m" (((unsigned char *) &y)[0]) :);
asm volatile ("movq %mm0, %mm1");
asm volatile ("paddb %mm0, %mm0");
asm volatile ("psllq $4, %mm1");
asm volatile ("pmovmskb %mm1, %edx");
asm volatile ("movb %%dl, %0" : "=m" (((unsigned char *) &y)[4]) :);
asm volatile ("paddb %mm1, %mm1");
asm volatile ("pmovmskb %mm0, %eax");
asm volatile ("pmovmskb %mm1, %edx");
asm volatile ("movb %%al, %0" : "=m" (((unsigned char *) &y)[1]) :);
asm volatile ("movb %%dl, %0" : "=m" (((unsigned char *) &y)[5]) :);
asm volatile ("paddb %mm0, %mm0");
asm volatile ("paddb %mm1, %mm1");
asm volatile ("pmovmskb %mm0, %eax");
asm volatile ("pmovmskb %mm1, %edx");
asm volatile ("movb %%al, %0" : "=m" (((unsigned char *) &y)[2]) :);
asm volatile ("movb %%dl, %0" : "=m" (((unsigned char *) &y)[6]) :);
asm volatile ("paddb %mm0, %mm0");
asm volatile ("paddb %mm1, %mm1");
asm volatile ("pmovmskb %mm0, %eax");
asm volatile ("pmovmskb %mm1, %edx");
asm volatile ("movb %%al, %0" : "=m" (((unsigned char *) &y)[3]) :);
asm volatile ("movb %%dl, %0" : "=m" (((unsigned char *) &y)[7]) :);
return y;
}
これだと3.57秒で>>915のよりちょっとだけ遅かった
CPUによって全然違うと思うけど
自分のはペンティアム3
0927デフォルトの名無しさん
2006/09/01(金) 00:16:35同一環境で試した他の結果も一緒に貼らんと無意味
0928デフォルトの名無しさん
2006/09/01(金) 00:21:260929デフォルトの名無しさん
2006/09/01(金) 00:26:320930・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/09/01(金) 00:31:580931デフォルトの名無しさん
2006/09/01(金) 11:54:20キチガイ構っちゃ駄目。
0932デフォルトの名無しさん
2006/09/01(金) 12:01:520933デフォルトの名無しさん
2006/09/01(金) 12:39:41出てくるたびにトラブルを引き起こすのは何故か考えてみたら?
0934デフォルトの名無しさん
2006/09/01(金) 13:23:040935デフォルトの名無しさん
2006/09/01(金) 13:59:08>>920
0936デフォルトの名無しさん
2006/09/01(金) 16:09:32奴の知識と経験に疑いはない。
ただキチガイだと言っている。
0937デフォルトの名無しさん
2006/09/01(金) 21:35:31g_plus1[pos] にpos (0..63) の位置から盤の右端までビットを立てたテーブルをあらかじめ作っておけば、
int pos に黒石を置いたとき、右方向に返る白石は以下のようにして取得できると思う
uint64 nwh = ~(white & 0x7e7e7e7e7e7e7e7e);
uint64 rev = 0, m;
if( (m = g_plus1[pos] & nwh & black) != 0 )
rev |= g_plus1[pos] ^ m ^ g_plus1[getLSSetBit(m)];
getLSSetBit(uint64) は一番下位のセットされたビットのビット番号を返す関数
x86 であれば BSF 命令を使用すれば高速に処理できる
こんなんでどうでしょうか?
0938デフォルトの名無しさん
2006/09/02(土) 01:34:200939デフォルトの名無しさん
2006/09/02(土) 06:27:21なんでわざわざ出しゃばってくるのか解らんよ。
0940デフォルトの名無しさん
2006/09/02(土) 10:07:15最後の行の真ん中に人がいる w
0941デフォルトの名無しさん
2006/09/02(土) 10:08:090942デフォルトの名無しさん
2006/09/02(土) 12:56:52オセロでは、絶対に返されることのない石を「確定石」といいます。
隅の石は無条件で確定石ですし、辺がすべて埋まっているときの辺の石はすべて確定石です。
確定石の個数と有利さには大きな相関があります。
しかし、確定石を計算するのは大きなコストがかかるので、オセロプログラムでは通常「準確定石」を計算します。
準確定石とは一回で返されることの無い石のことです。
uint64 rev = 0;
uint64 mobility = getMobility(black, white);
for(uint64 m = すべての可能な着手について)
rev |= getRevPat(black, white, m);
uint64 semiFixed = white ^ rev;
とすれば、白の準確定石を計算できますが、時間がかかりそうです。
ビット演算を駆使して準確定石を高速に計算するにはどうしたらいいでしょうか?
0943調べ物中の通りすがり
2006/09/02(土) 21:06:25コストを低くすることができると思いますよ。
dual program を使うときは interrup のプログラムを実行しないのであれば tmemory protection のプログラム確認を厳にした方がいいですね。
↑大学で習ったばかりなのでここに直接打ち込めなくてスミマセン(汗)
0944デフォルトの名無しさん
2006/09/02(土) 21:59:38( ^ m ^)どこにいるかわかんないお
0945デフォルトの名無しさん
2006/09/06(水) 19:45:4863 62 61 60 59 57 57 56
55 .....
....
07 06 05 04 03 02 01 00
↓
63
55 62
47 54 61
...
01 08
00
これをビット演算を使って高速に処理するにはどうしたらいいのでしょうか?
0946デフォルトの名無しさん
2006/09/06(水) 19:47:360947デフォルトの名無しさん
2006/09/06(水) 20:55:160948デフォルトの名無しさん
2006/09/07(木) 10:33:1864ビッドは難しいな。
…つか、45度傾けた正方形は
元の正方形の70%に縮小しなきゃいけないのは判ってる?
0949デフォルトの名無しさん
2006/09/07(木) 12:47:32「45度回転させて、64ビッドにつめこみたい」の意味がわかる?
正確な図は http://www.cis.uab.edu/info/faculty/hyatt/bitmaps.html の
Figure 6. を見てくれ
0950デフォルトの名無しさん
2006/09/07(木) 13:13:000951デフォルトの名無しさん
2006/09/07(木) 14:47:38いや、「64ビッド」がわからん
0952デフォルトの名無しさん
2006/09/07(木) 14:57:250953デフォルトの名無しさん
2006/09/07(木) 15:05:3945度単純回転入れ替えを 偶数x偶数空間でどうやるのか見当もつかん
奇数x奇数ならやりようはありそうだけど
123 412
456 753
789 896
0954デフォルトの名無しさん
2006/09/08(金) 21:13:43多少無理があっても、無理やり64ビットに詰め込むんだ
0955デフォルトの名無しさん
2006/09/08(金) 21:20:56その情報は1ビットの情報量しかないことになる。
で、果たして1ビットの情報を扱うことに意味があるのか?
0956デフォルトの名無しさん
2006/09/08(金) 21:33:14まじレスすると、以下のURLでも読んで勉強しろ
http://www.cis.uab.edu/info/faculty/hyatt/boardrep.html
http://www.cis.uab.edu/info/faculty/hyatt/bitmaps.html
0957デフォルトの名無しさん
2006/09/08(金) 23:56:41http://en.wikipedia.org/wiki/Bitboard
0958デフォルトの名無しさん
2006/09/09(土) 09:17:340959デフォルトの名無しさん
2006/09/11(月) 00:14:050960デフォルトの名無しさん
2006/09/11(月) 00:25:180961デフォルトの名無しさん
2006/09/11(月) 00:58:3145℃傾けるってどういうことですか?
温度で角度はしていできません。
0962デフォルトの名無しさん
2006/09/11(月) 12:48:190963デフォルトの名無しさん
2006/09/11(月) 13:04:260964デフォルトの名無しさん
2006/09/11(月) 13:09:170965デフォルトの名無しさん
2006/09/11(月) 13:09:180966デフォルトの名無しさん
2006/09/12(火) 00:48:50ハードウェアエンコーディングキタコレ!
0967デフォルトの名無しさん
2006/09/12(火) 09:27:55並列処理だぜ!
0968デフォルトの名無しさん
2006/09/12(火) 17:31:49おまえらてんさいだな!
0969デフォルトの名無しさん
2006/09/14(木) 11:46:28エレガントにnを求める方法ありますか?
(a) 2^0 から 2^31 まで順番に比較していく
→ 簡単だけど...
(b) 二分探索
→ 最大5回も分岐するのでエレガントとは思えない。
他にもっといい方法があれば教えて。
0970デフォルトの名無しさん
2006/09/14(木) 12:06:32"\0\0\1\32\2\27\33\0\3\20\30\36\34\13\0\15\4\7\21\0\31"
"\26\37\17\35\12\14\6\0\25\16\11\5\24\10\23\22"[i%37u];
>>377あたりで同じ話題出てるからその辺みるよろし。
0972デフォルトの名無しさん
2006/09/14(木) 12:19:12どういう考え方(アルゴリズム?)で記述すればいいでしょう?
0973デフォルトの名無しさん
2006/09/14(木) 14:41:22ttp://www.nminoru.jp/~nminoru/programming/bitcount.html
>>972
全データがレジスタ1個か2個に収まるようなビット配列なら
議論の余地はあるが、基本的に線形探索だな。
minVal = data[0];
for(int i=1; i < data.size(); i++) {
minVal = (data[i] < minVal)? data[i] : minVal;
}
0974デフォルトの名無しさん
2006/09/14(木) 18:50:090975デフォルトの名無しさん
2006/09/15(金) 12:48:1732ビット変数の下位27ビットにデータが入っています。このビットオーダを反転させるにはどうしたらいいでしょうか?
例:000001100111....0101 → 000001010...1110011
0976デフォルトの名無しさん
2006/09/15(金) 13:40:170977デフォルトの名無しさん
2006/09/15(金) 18:53:06ちゃんとコードを示してくれ
それじゃあ合ってるかどうか判定できん
0978デフォルトの名無しさん
2006/09/15(金) 23:39:3132ビット全部をビットオーダ反転するときは、分割統治法ってのを使うといいぞ
0979・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/09/16(土) 00:28:440980デフォルトの名無しさん
2006/09/16(土) 00:39:18そんな誰でも思いつく方法を自信満々に言わなくても…
実質27ビットなんだし、もっと高速な方法がないだろうか?って話だと思われ。>975
0981デフォルトの名無しさん
2006/09/16(土) 00:56:300982・∀・)っ-○◎●新世紀ダンゴリオン ◆DanGorION6
2006/09/16(土) 01:04:24int Bit27Reverse(int n) {
n = (n >> 18) | (n & 0777000) | (n << 18);
n = ((n >> 6) & 007007007 ) | (n & 070070070) | ((n & 007007007) << 6);
return ((n>>2) & 0111111111) | (n & 0222222222) | ((n & 0111111111) << 2);
}
0983デフォルトの名無しさん
2006/09/16(土) 02:15:220984デフォルトの名無しさん
2006/09/16(土) 09:40:110985デフォルトの名無しさん
2006/09/16(土) 09:47:19【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
0986デフォルトの名無しさん
2006/09/16(土) 12:42:29x = ((x & 0x55555555) << 1) | ((x >> 1) & 0x55555555);
x = ((x & 0x33333333) << 2) | ((x >> 2) & 0x33333333);
x = ((x & 0x0f0f0f0f0f) << 4) | ((x >> 2) & 0x0f0f0f0f0f);
x = (x << 24) | ((x & 0xff00) << 8) | ((x << 8) & 0xff00) | (x >> 24);
x >>= 5;
論理演算:8回、シフト:11回
0987デフォルトの名無しさん
2006/09/16(土) 12:47:47この場合、上位5ビットを別の用途に使うこともできる
n = ((n >> 18) & 0777) | (n & 0777000) | ((n << 18) & 0777000000);
n = ((n >> 6) & 007007007 ) | (n & 070070070) | ((n & 007007007) << 6);
n = ((n>>2) & 0111111111) | (n & 0222222222) | ((n & 0111111111) << 2);
論理演算:9回、シフト演算:6回
上のコードは上位5ビットが0になってしまうので、それを保存したい場合は、以下のようになる
t = ((x >> 18) & 0777) | (x & 0777000) | ((x << 18) & 0777000000);
t = ((t >> 6) & 007007007 ) | (t & 070070070) | ((t & 007007007) << 6);
t = ((t>>2) & 0111111111) | (t & 0222222222) | ((t & 0111111111) << 2);
x = (x & 0xf8000000) | t;
論理演算:11回、シフト演算:6回
0988デフォルトの名無しさん
2006/09/16(土) 12:52:57t = (x >> 18) & x & 0777; x ^= t ^ (t << 18);
t = (x >> 6) & 07007007; x ^= t ^ (t << 6);
t = (x >> 2) & 0111111111; x ^= t ^ (t << 2);
上位5ビットの値も保存されて、論理演算:9回、シフト演算:6回 とこれが最高速か?
0989デフォルトの名無しさん
2006/09/16(土) 18:45:0732ビットC++で 9*9 = 81ビットデータの処理(比較演算、論理演算、nビットシフトなど)をしたいのですが、
どのようにするのがいいのでしょうか?
0990デフォルトの名無しさん
2006/09/16(土) 18:46:39std::bitset
0991デフォルトの名無しさん
2006/09/17(日) 05:51:340992デフォルトの名無しさん
2006/09/17(日) 09:41:250993デフォルトの名無しさん
2006/09/17(日) 09:58:35http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
0994デフォルトの名無しさん
2006/09/17(日) 10:10:35http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
0995デフォルトの名無しさん
2006/09/17(日) 10:19:37http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
0996デフォルトの名無しさん
2006/09/17(日) 11:44:55http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
0997デフォルトの名無しさん
2006/09/17(日) 11:45:28http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
0998デフォルトの名無しさん
2006/09/17(日) 11:50:45http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
0999デフォルトの名無しさん
2006/09/17(日) 11:51:19http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
【高速化】ビット演算 0x02
http://pc8.2ch.net/test/read.cgi/tech/1158367586/
1000デフォルトの名無しさん
2006/09/17(日) 11:52:0210011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。