Cで書くかアセンブラで書くか・・・

このエントリーをはてなブックマークに追加
696デフォルトの名無しさん
これがベクトル化されれば夢のような話だ!

for(j=0;j<16;j++){
for(i=0;i<16;i++){
d1[i]^=GF[((FG[a[j]]-1)+(FG[h1[i][FG[b[j]]]]-1)%255)+1];
d2[i]^=GF[mlt(FG[a[j]],FG[h2[i][FG[b[j]]]])];
}
}
697デフォルトの名無しさん:2010/09/19(日) 19:30:36
int a[]={130, 160, 130, 193, 130, 211, 130, 241, 130, 160, 130, 169, 130, 241, 130, 196};
int b[]={131, 94, 131, 129, 131, 84, 131, 140, 131, 139, 131, 95, 131, 67, 131, 96};
int c[]={123,111,222,231,132,125,124,133,122,147,158,210,1,2,3,4};

int main(void){
int i;

for(i=0;i<16;i++)
a[i]^=(b[i]+c[i])%16;
}

$ gcc -O3 -ftree-vectorize -ftree-vectorizer-varbose=5 -mmmx -msse2 -S v.c[1P[1@e

v.c:8: note: dependence distance = 0.
v.c:8: note: accesses have the same alignment.
v.c:8: note: dependence distance modulo vf == 0 between a[i_21] and a[i_21]
v.c:8: note: vect_model_load_cost: aligned.
v.c:8: note: vect_model_load_cost: inside_cost = 1, outside_cost = 0 .
v.c:8: note: vect_model_load_cost: aligned.
v.c:8: note: vect_model_load_cost: inside_cost = 1, outside_cost = 0 .
v.c:8: note: vect_model_load_cost: aligned.
v.c:8: note: vect_model_load_cost: inside_cost = 1, outside_cost = 0 .
v.c:8: note: vect_model_simple_cost: inside_cost = 1, outside_cost = 0 .
v.c:8: note: not vectorized: relevant stmt not supported: D.1523_11 = D.1522_10 % 16
v.c:5: note: vectorized 0 loops in function.

ベクトル化できない。なぜ?
698デフォルトの名無しさん:2010/09/19(日) 20:49:25
こう書いたらアセンブラソースリストが2倍近く小さくなった。

for(i=0;i<16;i++)
a[i]^=(b[i]+c[i])&0xff;
699デフォルトの名無しさん:2010/09/19(日) 20:52:37
a[i]^=(b[i]+c[i])%16;
a[i]^=(b[i]+c[i])&0xff;
って同じことをするんですか
700デフォルトの名無しさん:2010/09/19(日) 21:13:06
違うみたい
701デフォルトの名無しさん:2010/09/19(日) 21:53:31
a[i]^=(b[i]+c[i])&0xf;
の間違い。
702デフォルトの名無しさん:2010/09/19(日) 21:55:40
>>696
そもそも、アドレスの遷移が複雑すぎて
ベクトル処理向きじゃないんじゃねえか?
テーブルがキャッシュに載りきるぐらいなら
別の方法で速くはなりそうだが。

>>698
0xFF は 255 だぞ。
703デフォルトの名無しさん:2010/09/19(日) 22:01:23
255以下の数に変換したいだけです。
256は要らない。
行列の大きさは4kbyte位なのでキャッシュに入りそうです。
別の高速化でもいいので教えてください。
配列のメモリアクセスがボトルネックになっている可能性があります。
704デフォルトの名無しさん:2010/09/19(日) 22:04:34
部分的にベクトル変換に成功しているのですが実行速度が-O3のみの
時より10倍くらい遅くなってしまいます。
なぜでしょう?
705デフォルトの名無しさん:2010/09/19(日) 23:41:54
配列の中身は、256以上の時はあるのかい?
706デフォルトの名無しさん:2010/09/19(日) 23:43:22
h[32][256]
GF[256]
FG[256]
配列はこれだけです。
707デフォルトの名無しさん:2010/09/19(日) 23:45:22
配列をintで宣言してるけど、unsigned charで宣言は出来ないのかなと思って
708デフォルトの名無しさん:2010/09/19(日) 23:50:45
unsigned charにすると自動ベクトル生成に失敗します。
-O3 -ftree-vectorize -ftree-vectorizer-verbose=5 -mmmx -msse2
709デフォルトの名無しさん:2010/09/19(日) 23:55:10
sse使わないと早くならないのかいな?
710デフォルトの名無しさん:2010/09/20(月) 00:03:46
行列演算なのでループをなくしたいです。
128ビット演算なのでSSE2で最適化できるかと思ったのです。
711デフォルトの名無しさん:2010/09/20(月) 00:08:02
データの中身は8ビットみたいだけど(intでも32ビット)
見間違いかな
712デフォルトの名無しさん:2010/09/20(月) 01:45:36
データは8ビットで統一されてます。出力は8×32ビット
713デフォルトの名無しさん:2010/09/20(月) 02:05:01
2個コードがあるから、どっちのことかわかんねえじゃねえか。
714デフォルトの名無しさん:2010/09/20(月) 02:11:44
for(i=0;i<16;i++)
a[i]^=(d1[i]+c[i])&0xff;
こっちはintにすれば自動的にベクトル処理してくれます。ただ32ビット
なので16個いっぺんに計算してくれているかどうかはわかりません。
本体部分が
for(j=0;j<16;j++){
for(i=0;i<16;i++){
d1[i]^=GF[((FG[a[j]]-1)+(FG[h1[i][FG[b[j]]]]-1)&0xff)+1];
d2[i]^=GF[mlt(FG[a[j]],FG[h2[i][FG[b[j]]]])];
}
}
です。SIMD以外でもキャッシュを工夫して高速化できればいいかと思います。
何かいい方法があったら教えてください。
715デフォルトの名無しさん:2010/09/20(月) 08:52:24
スレタイに従うなら、アセンブラで書いた方がいいんじゃないの
716デフォルトの名無しさん:2010/09/20(月) 09:13:39
次のようにして本体部分の自動ベクトル化も成功しました。
2秒ほど高速になりました。

for(k=0;k<500000;k++){
for(j=0;j<16;j++){
o=FG[a[j]];
p=FG[b[j]];
for(i=0;i<16;i++){
e1[j][i]=((o-1)+(h1[p][i]-1))&0xff+1;
e2[j][i]=((o-1)+(h2[p][i]-1))&0xff+1;
// d1[i]^=FG[mlt(o,h1[p][i])];
// d2[i]^=FG[mlt(o,h2[p][i])];
}
}

for(j=0;j<16;j++){
for(i=0;i<16;i++){
d1[j]^=GF[e1[j][i]];
d2[j]^=GF[e2[j][i]];
}
}
for(i=0;i<16;i++)
a[i]^=(d1[i]+c[i])&0xff;
for(i=0;i<16;i++)
b[i]^=(d2[i]+c[i])&0xff;
}
717デフォルトの名無しさん:2010/09/20(月) 12:11:15
嘘です。18秒かかります。
GPGのAESは7秒 orz
718デフォルトの名無しさん:2010/09/22(水) 09:23:22
#include <stdio.h>
#include <stdlib.h>

int main(void){
unsigned long long int a,b;

a=strtoull("0x1111111111111111",(char **)NULL,16);
b=strtoull("0x2222222222222222",(char **)NULL,16);
a=a^b;
printf("%llu\n",a);

return 0;
}
このプログラムをMMXを使って最適化したいのですがわかりません。
アセンブラで書くしかないのでしょうか。
719デフォルトの名無しさん:2010/09/22(水) 09:38:14
ここの掲示板って知ったかぶりでメーカーの商品の批判ばっかりしてる奴ばっかりだね。
どうせ文句言いながらも使ってるくせに。メーカーさんの苦労もかんがえろ。そんなに
そんなに嫌ならOSもパーツも自分で作れ。どうせお前らには出来ないが。今大学院で
OSの研究をしているが、純粋にみんな凄いって感心している。オタクの集まりっていうのは
ほんまウザいねん。お前らに電子工学の知識があるのか?情報科学を学んだことがあるのか?
お前らまともに勉強してから文句言え。
720デフォルトの名無しさん:2010/09/22(水) 09:59:12
>>719 スレ違いのおまえが一番ウザい
721デフォルトの名無しさん:2010/09/22(水) 11:09:17
>>718
C言語なら俺に聞け(入門編)Part 69
http://hibari.2ch.net/test/read.cgi/tech/1284477697/464-
722デフォルトの名無しさん:2011/02/11(金) 20:06:45
XCode 3.2.3 で Release | i386 構成でアセンブルすると
どうも 64-bit でアセンブルされてるように見えるんだけど
Debug | i386 構成だとちゃんと 32-bit でアセンブルされてるようだ
Release 構成でも 32-bit でアセンブルされる方法はないのかな?

OS: Mac OS X 10.6.6
CPU: Intel Core 2 Duo
XCode: 3.2.3 (64-bit)
723デフォルトの名無しさん:2011/02/11(金) 20:17:58
age忘れた
724デフォルトの名無しさん:2011/02/16(水) 11:21:48
え?
725デフォルトの名無しさん:2011/03/10(木) 07:16:19.45
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************


http://sky.geocities.jp/ttl_ttl_ttl_pic/

NASMでC言語を作る NASMで高度な設計書類とNASMの簡単な利用方法のサイトです
C言語のHEADの作り方 DLLファイルの作り方が書いてあります
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
****************************************************************
726デフォルトの名無しさん:2011/03/10(木) 07:25:36.87
Rubyで書こう
727デフォルトの名無しさん:2011/03/10(木) 08:18:00.85
×C言語を作る
○Cの下請け処理を汗で書く?
728デフォルトの名無しさん:2011/03/15(火) 22:00:57.52

ttp://n.xxad.net/watch/sm13809685

【どうすればこの欲望の渦巻く堕落した世界に私の名を残せるだろうか】
※名を残したいとは思わないがw。
【狂乱のマシンを残せばいい】

【この狂乱の世界に相応しい野獣のようなマシンを】

【狼が来たからやってきた】

【お前の平和な街は今はもう安全ではない】
729デフォルトの名無しさん:2011/03/16(水) 00:13:45.99
アホは逝け
730デフォルトの名無しさん:2011/03/16(水) 12:53:02.83

は〜い、逝きますwww。
731デフォルトの名無しさん:2011/03/22(火) 10:54:41.99
x86とAMD64(?)64bitのやつの逆アセンブルとアセンブルをプログラムから利用出来るようなライブラリってありませんかね?
アセンブラインタプリタみたいなので利用したい
732福盛俊明:2011/03/27(日) 03:00:55.53
アハ〜♪”
733デフォルトの名無しさん:2011/03/27(日) 03:22:48.69
>>731
意味がわからん
734デフォルトの名無しさん:2011/03/27(日) 10:34:45.54
>>731

クロスアセンブラって知ってる?
インタプリタは無理だけど(てか、インタプリタ自体に32bit/64bitが有っても、ソースにbitは関係無いし)、バイナリ作るだけなら、理論上、16bitOS上でも64bitのバイナリ作れるよ

ちょっと調べればアセンブラは32bitでも64bitのバイナリ作れるのは有るんじゃ無い?
735デフォルトの名無しさん:2011/03/27(日) 10:41:35.65
ちなみに、x86のgasにちょっと細工するだけで、GBA(ARM)向けのバイナリが作れます

クロスアセンブラは簡単にアーキテクチャの壁を超えられる良い例ですね
(アセンブラの場合、アーキテクチャの壁とハード仕様の壁、両方超える必要が有りますが)
736 忍法帖【Lv=2,xxxP】 :2011/03/29(火) 08:58:38.67
ぐぬぬ
737デフォルトの名無しさん:2011/03/30(水) 11:38:30.63
>>734
そうそうだから文字列をバイナリに変換するライブラリが欲しい
作れるだけでいいんです
例えばプログラムでアセンブラを変換してバイナリを生成して
メモリに投入して関数ポインタで呼び出して実行するみたいなことがしたい
もちろん逆もしたいので逆アセンブル機能も欲しい
738デフォルトの名無しさん:2011/03/30(水) 11:40:47.63
要するにメモリ上で現在動いてるプログラムの関数をリアルタイムでデバッグしたい
そういうレベルのデバッガを作ろうとしてて、アセンブラライブラリが欲しいんです
739デフォルトの名無しさん:2011/03/30(水) 11:47:30.97
自分で作るしかないでしょ
740デフォルトの名無しさん:2011/03/30(水) 14:00:15.93
俺はVSの逆アセで済ましてるな。作るの面倒。
理論上は、数値入りの命令は工夫が居るけど、全種類のデータあれば単純に検索だけで実装できるよね。
741デフォルトの名無しさん:2011/03/30(水) 14:21:59.95
オペランドに計算式書けるようにするとかしなけりゃ
大した手間かからんべ

命令コード汚いと泣きたくなることもあるが
742デフォルトの名無しさん:2011/03/30(水) 16:05:25.07
それもある
自分で実装すると変数やラベルまでやるのは大変だから
ライブラリであると助かるんだよな
743デフォルトの名無しさん:2011/03/30(水) 19:34:31.88
汗にライブラリってのがわからん
744デフォルトの名無しさん:2011/03/30(水) 20:32:50.07
アセンブリ言語で書かれたライブラリ、にしろ
アセンブリ言語から利用するライブラリ、にしろ
普通にあるものだと思うが
745デフォルトの名無しさん:2011/03/30(水) 20:35:52.51
今時、そんな発想するんか?
746デフォルトの名無しさん:2011/03/30(水) 20:43:00.22
JITコンパイルか動的バイナリ変換でもしたいのかと思った
747デフォルトの名無しさん:2011/03/30(水) 23:46:27.15
Windowsの通常あり得ない方法でプログラムを動かしたりするのに
バイナリをあらかじめ用意するとか出来ないし
オフセットが変わるとごろっと変わってくるからね
というかリアルタイムでメモリをいじって挙動を調べたりすることをやってるもんで
まさにアセンブラのインタプリタが欲しいのですよ
748デフォルトの名無しさん:2011/03/31(木) 00:19:13.63
ハッカーになりたいんだったら、こっそりやったほうがいいよ
749デフォルトの名無しさん:2011/03/31(木) 14:12:58.87
そういうことをやりたいなら、一行アセンブラくらいサクッと
作れないとダメだろう
750デフォルトの名無しさん:2011/03/31(木) 21:55:29.04
アセンブラは力技だから誰がやってもサクッとはいかないよ
何千行のソースは約束されてるし
751デフォルトの名無しさん:2011/04/01(金) 17:11:15.68
アセンブラで一度実用的なプログラムを書いた経験があれば、Cの有り難さが身に染みて分かる
752デフォルトの名無しさん:2011/04/03(日) 15:34:37.06
C言語で多くの実用的なプログラムを書いた経験が有れば、アセンブラのここぞというありがたさが身に染みてわかる
753デフォルトの名無しさん:2011/04/03(日) 16:49:47.77
>>752
あほか
思いっきり機種依存の話をしてどうする
754デフォルトの名無しさん:2011/04/03(日) 17:03:45.86
>>751には同意出来るが、>>752には同意しかねるな

実用的なアプリ = 速度が要求されるアプリとは限らないし、移植性や保守性を考えたら、アセンブラは使わないに越した事はない
755デフォルトの名無しさん:2011/04/03(日) 17:10:56.46
Cじゃ速度的に間に合わなくてCPUごとにアセンブラ使ってる俺涙目
ちなみに今度8種類目
756デフォルトの名無しさん:2011/04/03(日) 17:23:45.86
>>755
マジで涙目だな。。。
体壊すなよ
757デフォルトの名無しさん:2011/04/03(日) 23:15:13.50
C で書いてても、大事なところは objdump 等で
アセンブラを確認してる。
758デフォルトの名無しさん:2011/04/04(月) 04:27:16.76
cは 「抽象化されたアセンブラ」 である、ってのは至言だよな
759デフォルトの名無しさん:2011/04/07(木) 18:57:10.42
節電が一番大事な世の中になってきた
C、アセンブリ語、マシン語を紙に書く時代に戻るの?
760デフォルトの名無しさん:2011/04/07(木) 19:21:44.33
休肝日をまねて休電日を作るとか。
761デフォルトの名無しさん:2011/04/09(土) 00:40:44.47
コーディングなんて仕事全体の2割以下だろ。
762デフォルトの名無しさん:2011/04/10(日) 13:11:42.79
そして唯一の楽しいフェーズなんだ。
763デフォルトの名無しさん:2011/04/10(日) 13:16:13.28
昔のファミコンプログラマーはなんでもかんでもアセンブラーで書いて、すごいと思います。
764デフォルトの名無しさん:2011/04/10(日) 15:18:35.94
当時の開発環境で C 使うのも、それなりに苦行な気も。
765デフォルトの名無しさん:2011/04/10(日) 15:31:26.19
intが2バイトだったりとかいろいろ気をつかうからねぇ
766デフォルトの名無しさん:2011/04/10(日) 16:10:04.87
アマチュア時代、MSXでC言語でゲーム作ったりしていました。
hello,worldをコンパイルするだけで4分ぐらいかかってました。その間フロッピードライブが
ものすごい勢いで動き続けるのでいつか壊れるだろうと思ってました。

ゲームが完成する頃には総コンパイル時間が1時間ぐらいだったと思います。
完成したゲームをMSX-FANに投稿しましたが、採用されませんでした。
私の苦労は・・・。

ちなみに当時のソースをひっぱりだしててきて、Phenom II 3GHzという環境上で、CP/Mエミュ
レータ+コンパイラでコンパイルしたら物の数秒でコンパイル完了しました。

767デフォルトの名無しさん:2011/04/10(日) 18:46:21.98
数秒も掛かったのか。
CPUがざっと1000から1万倍、ディスクがざっと1000倍速くなっていることを考えると遅過ぎる。
768デフォルトの名無しさん:2011/04/11(月) 01:53:07.49
>>766
あの時代だとBDS-Cあたりか
俺は耐えられなかったのでTurbo Pascalで遊んでた

>>767
Z80エミュレーターで走ってるんだから十分速いだろう
769デフォルトの名無しさん:2011/04/13(水) 23:27:49.58
マルチコア使うアセンブラ、どう書いたらいいのか全然わからん。。。
誰かマルチコア cortex-a9 の使い方、
どこでどう勉強したらいいか教えてください。
770デフォルトの名無しさん:2011/04/13(水) 23:31:14.67
マルチコアで書き方が変わることはありません。
atomicな処理が出来れば、ハマることはないと思うけど
771デフォルトの名無しさん:2011/04/15(金) 18:49:31.58
シングルとして書いた処理をマルチスレッドにすりゃいいだけでは?
例えば0から100の処理をループする時に
偶数用スレッドと奇数用スレッドを用意してインデックスを渡して
後の処理内容はまったく同じ
772デフォルトの名無しさん:2011/05/02(月) 18:09:16.43
>>769
メモリバリア・キャッシュ、
グローバルなリソースの排他、
プライオリティ インバージョン
の3つが解っていればあとは応用編。


単にスレッド3本走らせるだけなら
>>770-771 のとおり何も変わらん。

待ち合わは wfe とかか。
773デフォルトの名無しさん:2011/05/15(日) 05:53:53.62
x86でリング3で実行出来るキャッシュフラッシュ命令はありませんか?
INVDやWBINVDは特権命令なので実行しようとすると例外が出て止まります
774デフォルトの名無しさん:2011/05/15(日) 07:05:35.70
リング3を解除すること考えたら
775デフォルトの名無しさん:2011/05/15(日) 12:44:10.33
その状態でキャッシュフラッシュせにゃいかん状況が想像できない
ハード絡みならそっちからフラッシュ要求だしてもらうべきだろう
776デフォルトの名無しさん:2011/05/16(月) 19:23:42.04
>>774
そうですねデバイスドライバモドキを作ってそこで実行するかな

>>775
2つのアルゴリズムを比較したい時に前のデータがキャッシュに残っていたら
アレなので両方ともキャッシュをフラッシュしてから実行開始する簡単な方法が
あればと思いました
777デフォルトの名無しさん:2011/05/16(月) 20:39:36.41
全く関係ない巨大配列を読み書きすれば、テストデータがキャッシュから追い出されるんじゃない?
778デフォルトの名無しさん:2011/05/16(月) 21:24:45.67
>>777
それで行くか
779デフォルトの名無しさん:2011/05/16(月) 21:58:38.60
その後キャッシュされるのに
780デフォルトの名無しさん:2011/05/17(火) 12:21:13.04
>>779
それでいいんだよ
それぞれのアルゴリズムのテスト前にキャッシュから追い出せばいいわけ
781デフォルトの名無しさん:2011/05/17(火) 20:05:00.84
今時のOSで、キャッシュフラッシュして何やりたいんだか
実行時間計測?
782デフォルトの名無しさん:2011/05/17(火) 20:18:43.68
>>781
キャッシュフラッシュの用途で、それ以外何があると
783デフォルトの名無しさん:2011/05/17(火) 21:26:48.92
なんだかなあ〜
784! 【24.1m】 【東電 66.0 %】 :2011/09/23(金) 18:59:44.48
何だよ
ハッキリ言えよ
785デフォルトの名無しさん:2011/09/23(金) 19:17:57.44
今時のOSでキャッシュフラッシュとか逝ってるところが
786デフォルトの名無しさん:2011/09/24(土) 20:08:45.15
何なのよ?
787デフォルトの名無しさん:2011/10/01(土) 21:24:40.70
Linux のアセンブラ割り込みじゃなくsysenter使ってx86 32bitタイプCPUで出来るんでしょうか?
色々ネットをgoogleで調べたのですが、良くわかりません。

Darwinと64bitタイプ向けのサンプルは発見できたのですが。

788デフォルトの名無しさん:2011/10/01(土) 21:32:41.39
>>787つづき
コンパイルして動作させようとしたのは、"hello world"を表示するものでした。
ソフト割り込み(かな int 0x80でシステムコールしてました)は上手く動作しました。

789デフォルトの名無しさん:2011/10/01(土) 23:02:10.33
>>785
コンテキストスイッチの時にキャッシュ汚染されるから同じようなもんだろうが
790デフォルトの名無しさん:2011/10/01(土) 23:59:37.68
>>787
cpuidのsep立ってればできる
今時のCPUなら全部対応していると思うが
791uy:2011/10/03(月) 14:00:28.26
もうどんなときでもアセンブラでかくのは極力やめたほうがいいんだろうな

たとえそいつがかけても、そいつがいなくなったら誰もメンテできないという自体になる
アセンブラでやるっていうのは最終手段になりつつある

>>1のいうように下手にかけば遅いし、
速いアセンブラコードかくには、アセンブラである程度何か書いた事がないと
コンパイラの最適化の下をいく

アセンブラで速いコードをかけるとか、
そんな技術者はもうほとんどいないし、これから若手がそういう人材になる見込みも
792uy:2011/10/03(月) 14:03:04.75
きわめて薄い ただB言語やPascal言語と違って、上位互換が出てきたわけじゃなく
所詮、いまだアセンブラは奥の奥で使われているから、誰も使えない、誰もかけないなんて状況には
ならないんだけどな、 本当の意味で正しくアセンブラ言語を発音できるやつは、いずれ絶滅危惧種になる

才能のないやつがプログラマとして生きるなら「ここ」だよ
「ここ」だけは才能がいらず、知識量だけでやっていける
アセンブラはそういうもの

ゴミみたいなやつでもできる あ、だけどバカにしているわけじゃないよ
がんばれ
793デフォルトの名無しさん:2011/10/03(月) 14:54:22.63
>>792
「ゴミみたいなやつ」とは自己紹介乙
79450代スレの古参PG:2011/10/03(月) 17:07:16.45
そのゴミみたいな奴の一人です(w 
実際、古代の石でASM開発された奴の保守は私ぐらいしか出す先がありません。
狭い狭いニッチですが、フジツボみたいにしがみついてます。 趣味+実益(w
795! 【13.8m】 【東電 70.4 %】 :2011/10/03(月) 22:55:49.41
箱モノならアセンブラなんぞいっぱいあるだろ
796デフォルトの名無しさん:2011/10/04(火) 09:46:25.72
Photoshopのフィルタってアセンブラで書かれてるって聞いたんですが本当ですか?
797デフォルトの名無しさん:2011/10/04(火) 09:58:57.31
インラインアセンブラが使えないコンパイラしか持ってないとか
そういう理由でもない限り、C/C++で書かない理由が見当たらない。
798デフォルトの名無しさん:2011/10/04(火) 10:34:47.90
インラインアセンブラで書く、という意味を含めて、アセンブリ言語で書く可能性としては、
画像のピクセル毎の処理とかで、かつSSE命令を使うとか、飽和加算が必要とか、
いくつか可能性は考えられるけどね。けどまぁほんとにごく一部のコードに限られるはず。
799デフォルトの名無しさん:2011/10/04(火) 10:42:10.18
ハッカーもやっぱりアセンブラでプログラム書いてるんじゃないかい?
マシン語でプログラム書くの大変でしょ
修正するたびにjmpのアドレス値を全部書き換えなきゃいけないとか
800デフォルトの名無しさん:2011/10/04(火) 20:03:12.90
汗でんでんはどうでもよくてマイクロアーキテクチャをどれだけ理解してるってところじゃないかな?
シムとかプロフなしに速いループを書くのはやっぱり難しいよ。
801デフォルトの名無しさん:2011/10/04(火) 21:52:36.02
16bitあたりならコンパイラよりも人の方がいいコードをかける
それ以上はそんなことする気にもなれん
802デフォルトの名無しさん:2011/10/04(火) 22:08:48.76
>>801
禁止しない限り人が書いたコードを最適化する RISC チップ用アセンブラもあることだしねぇ
803デフォルトの名無しさん:2011/10/05(水) 03:04:51.65
ここでいってるビット数はOPコード長でいいんだよね?
804デフォルトの名無しさん:2011/10/05(水) 11:45:19.56
>>803
バイトマシンであるところのx86は8bitかよと
805デフォルトの名無しさん:2011/10/05(水) 15:25:26.72
内部バスのパラレル幅 でいいんだよね?
806デフォルトの名無しさん:2011/10/05(水) 18:30:34.35
どうでもいい
807デフォルトの名無しさん:2011/10/05(水) 20:38:48.71
ALUのbit長にきまっとろうが
808デフォルトの名無しさん:2011/10/05(水) 22:11:15.33
今時、何Bit CPUと言う定義は意味がない。
>>804 可変長OPコードだぞ。
809デフォルトの名無しさん:2011/10/06(木) 02:21:52.64
>>804
そうそう、x86は8ビットマシンに見えてしまって。
810デフォルトの名無しさん:2011/10/06(木) 05:54:11.26
>>807 IBMの S/360,370は、ALUは32bitだったがアーキテクチャーは16bitだった。
たしかに、今では >>808 が正解のようだ。
811デフォルトの名無しさん:2011/10/06(木) 11:26:09.27
リセット直後にコード解釈のためフェッチするサイズだな
812デフォルトの名無しさん:2011/10/06(木) 16:41:51.51
H8なんか同じ石でどっちでも動くようになってる。
813デフォルトの名無しさん:2011/10/06(木) 17:54:12.22
>>811
なにその、無理矢理な定義wwwww
814デフォルトの名無しさん:2011/10/06(木) 22:25:23.33
>>801を逆に定義にする
815デフォルトの名無しさん:2011/10/07(金) 15:04:00.81
ワロタ それイイな。 人がコンパイラを越えられなくなったら32bitね
816デフォルトの名無しさん:2012/02/12(日) 17:00:40.61
22 名前:デフォルトの名無しさん[sage] 投稿日:04/10/11(月) 20:19:26
>>21
ARMは、そろそろ使用に耐えなくなる頃合だよん
817デフォルトの名無しさん:2012/02/13(月) 05:40:19.89
DATとCLKでシリアル出力する関数を、速くするためにforを使わずのべたんで書いた。
  ROTL R6      ; MSBから出力 石とASMはH8S
  BST  #1,@P4DR
  BSET #0,@P4DR
  BCLR #0,@P4DR
これをbit数分、並べた。forのカウントもしないし、cだとportを読んでmaskで変更して
書き戻すコードしか出ないから、cでは書けない関数の好例。
818デフォルトの名無しさん:2012/02/13(月) 16:09:54.46
if (hoge & (1 << bit))
*P4DR | = 1;
else
*P4DR & = ~1;
て書いたら
bld #bit,RnL
bst #0,@P4DR
て最適化してくれるようになればいいんでないかと思う
819デフォルトの名無しさん:2012/02/14(火) 04:13:33.73
今のところH8系のcではできないの。P4DR.1 = R6=rotlw(1,R6); とは書けるけど、
ROTL R6 BST #1,@P4DR ではなくR6→R5 R5からBLDでCYに取り出してBSTする。
c中にASMコードも書けないのでASMの関数コールを用意するしかなかった。

AduCという所のcはCYまで使えるので817の書き方ができるお利口さんだが、
すごくローカルな方言。
820817:2012/02/14(火) 04:38:59.09
当時のソフトボート社提供の<INH8.h>の中身は
#pragma function = intrinsic(0)
int rotlw (int count, int data);
・・・
void bset (unsigned char bit_no, unsigned long address);
void bclr (unsigned char bit_no, unsigned long address);
#pragma function = default
これを真似してbset/bclrの辺りに
void bst (unsigned char bit_no, unsigned long address);
を書いてみたけど、BST命令は出ずに関数コールになった。
bset/bclrを書いたらコンパイラが狂い死にした(w
ルネサスのcなら書けるんだけど。
821デフォルトの名無しさん:2012/02/14(火) 22:14:36.01
動作周波数が遅いのか
速度を必要としてるのか
データシートに書いてある最高速度で動かしたいのか

速さが必要ないのに汗で書くことも無いような
ほんとに速さが必要になった時に汗でも書けるぐらいでいいんじゃねえの

Cであがいて最後は全部汗とか、はまりパターンにならんように
最初にどっちで書くのがいいか見極めが必要なのかも
822817:2012/02/15(水) 04:09:34.73
前の世代の製品のときに、パルスがトロいって文句いわれたんですよ。
同じ部署の次世代製品だったから、企画の時からこれ以上出せない文句無しの
出してやろうと決めていました。動き出してから、書き込み速いねって誉められました。
動作周波数は、分周してuartの適切なレートが出る奴を選ぶので、CPUの最高より
若干低め:16.588とかの半端なクロックが使われます。

別の部署の製品では、seup/holdが4μのPLLでCPUが20MHzだったため、1パルス
毎にディレイかまさなくちゃいけなくて、なんかくやしかったり(w
ハード屋さんに聞いたら、(回路をケチるためらしいんだけど)横浜コンチみたいな
波形なので、トロくさせることで確実にしてるみたい。
823817:2012/02/18(土) 05:03:46.97
>seup/holdが4μ 40μの間違いでした。
824デフォルトの名無しさん:2012/04/30(月) 05:22:50.09
領海
825デフォルトの名無しさん:2012/05/07(月) 23:18:48.43
今のCPUって単一スレッドでも多重パイプラインで複数命令実行してたりして
訳分からないnopとかいっぱい入ってるし、命令ブロックの配置とか
元のロジックの順番変わったりするしそんなの手作業でハンドアッセンブルなんて
不可能じゃないの?初期のペンティアムのUパイプだのVパイプだのの時点でもう
訳わからん
826デフォルトの名無しさん:2012/05/08(火) 10:28:53.35
「今のCPU」って一口に言っても、Ivy Bridgeも、PICもあるから一概に言えん。
827デフォルトの名無しさん:2012/05/08(火) 18:26:40.26
この文脈でそう言っちゃうのは馬鹿だろう。
828デフォルトの名無しさん:2012/05/08(火) 19:49:03.15
「単一スレッドでも多重パイプラインで複数命令実行してたりして訳分からないnopとか
いっぱい入ったりする、命令ブロックの配置とか元のロジックの順番変わったりする
今のCPUって、手作業でハンドアッセンブルなんて不可能じゃないの?初期のペンティ
アムのUパイプだのVパイプだのの時点でもう訳わからん」

せめてこう書くべき
829デフォルトの名無しさん
わけわからんでもSpecintとかSpecfpがあるだろ

http://www.cpubenchmark.net/cpu_list.php

こういう所もあるけどな