せっかちな人々(まったりも可)

どんなささいなことでも構いません.
面白い最適化のアイデアがありましたら書き込んで下さい.
無論雑談も大歓迎です.


 
名前
 
タイトル
 
e-mail
 
URL
 
パスワード
 
cookie
有効期限:10 日
メッセージ



  次へ  ← 300-250 / 323 件表示 →  前へ
件/頁   
 



300. 必ずしもそうでもなさそうです 酒居  2000/10/18 (水) 17:56
add命令の即値をbyteにさせると実行時に符号拡張されます(当然!)。
ところがそれだけで何らかの実行ユニットを使うらしくて、場合によっては
遅くなる場合がありました。gogoでは試したことありますが、
速くなったことはほとんどなく、遅くなる場合があったのでやめました。
P6ではmovzxに比べてmovsxが異常に遅いときがあったりするし。

ということで、私はアドレス計算ユニット(ってあるの?)のほうで
符号拡張して加算してもらうように書くことが多いです。
これも当該ユニットの空き具合に左右されますが...

Athlonと実行ユニットの数が違うとか、デコーダの性能が違うとか、
デコード後の命令の粒度が違うとか、いろいろあるようで、
私も何だかよくわかりません(^^;
ただし、1Aが速いのは命令デコーダ関係の違いですね。
P6ではデコーダ待ちの他、loadやstoreユニットでストールしまくりそう。

760MPチップセットはいつでるんでしょうか?
Dual Athlonを早くみてみたいものです。




299. Re: ペアリングについて へるみ  2000/10/17 (火) 20:24
で、その考察

>P2(Klamath)やP3(KatmaiやCoppermine)では、addよりもleaを使ったほうが速いっす。
これはNASMがたこなせいです。

add edi,4は即値が1byteに収まるのにNASMは32bit定数として扱ってしまうから
命令長の長いコードを生成するためです。
前から知っていたのですが、うっかりしてました(^^;
add edi,byte 4とすれば私のコードでも速くなりました。
酒居さんのと同じ速度出てるようです。(test2A, 6A, 8A)
午後も全部修正するとちょっとは速くなるかも。
#と思いつつやってない(^^;

>P2やP3のMMXもそんなに遅くないっす。
>1560/1000dwordくらい出ますよ。

本当ですね。どうも失礼。
私はPIIIでMMXコード書いたこと無いから分からないです(^^;
しかし凄いのはAthlonの1Aです。最適化が面倒なときはひたすら命令密度を
あげるのが楽なのかもしれません。
それから、AthlonやPIIIはAGIストールがないとはいえ、アドレスに使われる
レジスタはなるべく早くに決定したようがいいようですね。

># Athlonに負けてるのがくやしい...
test5Aの1clock/dwordって何?って感じですね(^^)





298. Re: ペアリングについて へるみ  2000/10/17 (火) 20:22
実験に使ったソースはこちら
>http://www.kurims.kyoto-u.ac.jp/~shigeo/soft/opti1012.tgz

ayaさん、Win版NASMはここに置いてます。
>http://homepage1.nifty.com/herumi/soft/nasm098-e3dn.lzh

その実行結果

/*
1C: gcc のinlime展開(16回のunloop)
1A: RMW型
2A: 素直なasm化
3A: 2回unloop + P5 pairing考慮
4A: 4回unloop + MMX
5A: 4A + AGIストール回避
6A: 2Aで add命令の命令長を短く
7A: 2回unloop + MMX
8A: 2Aで add命令をlea命令に変更
なお、7AでMMX命令使用前のemms命令を省くとK6-IIIで2.6clock/dwordに
なってしまうので省かないほうがよい。
*/

Athlon 600, K6-III 350, PIIIE 450
[ 0] 2.31, 2.79, 3.07
[ 1] 3.05, 5.10, 4.50
[ 2] 4.05, 6.11, 3.69
[ 3] 2.54, 3.60, 3.07
[ 4] 1.30, 1.35, 1.82
[ 5] 1.05, 1.35, 1.58
[ 6] 3.04, 6.10, 3.23
[ 7] 2.05, 1.60, 1.57
[ 8] 3.19, 6.10, 3.07





297. Re: ペアリングについて 酒居 [URL]  2000/10/17 (火) 12:10
P2(Klamath)やP3(KatmaiやCoppermine)では、addよりもleaを使ったほうが速いっす。
3560/1000dwordが3060/1000dwordくらいになります。
eax: マスク
edi: 配列先頭
ecx: 要素数
.lp1:
mov ebx,[edi]
and ebx,eax
shr ebx,1
mov [edi],ebx
dec ecx
lea edi,[edi+4]
jnz .lp1

P2やP3のMMXもそんなに遅くないっす。
1560/1000dwordくらい出ますよ。
mm7: マスク
edi: 配列先頭
ecx: 要素数÷2
.lp1:
movq mm0,[edi+ecx*8-8]
dec ecx
pand mm0,mm7
psrld mm0,1
movq [edi+ecx*8],mm0
jnz .lp1
# Athlonに負けてるのがくやしい...




296. ありがとうございます!! aya  2000/10/16 (月) 23:35
へるみさん、ありがとうございました。
期待していた以上の詳しくて丁寧なご回答に
恐縮しています。

へるみさんのサンプルコード
大変勉強になります。
これをもとにしていろいろ試してみようと思います。

それから MMX を使用した場合が圧倒的に速いですね。
MMX 命令は使ったことがないので、
こちらの方もこれから勉強してみようと思います。

ありがとうございました。




295. Re^2: ペアリングについて へるみ  2000/10/16 (月) 22:59
#ayaさん失礼しました。
初めてではありませんでした(^^;
あの後ちょっと実験してみました。
Athlon 600
ave=2341.030000(1000) 2.34clock/dword
ave=3044.675000(1000) 3.04clock/dword
ave=4051.475000(1000) 4.05clock/dword
ave=2595.146000(1000) 2.60clock/dword
ave=1293.984000(1000) 1.29clock/dword

K6-III 350
ave=3120.705000(1000) 3.12clock/dword
ave=5104.177000(1000) 5.10clock/dword
ave=4038.571000(1000) 4.04clock/dword
ave=3109.174000(1000) 3.11clock/dword
ave=1601.332000(1000) 1.60clock/dword

PIIIE 450
ave=3068.873000(1000) 3.07clock/dword
ave=4650.343000(1000) 4.65clock/dword
ave=3563.458000(1000) 3.56clock/dword
ave=3067.418000(1000) 3.07clock/dword
ave=1974.239000(1000) 1.97clock/dword

上からソースの形が
gccそのまま
and [edi],eax型
mov edx,[edi]の単純型
並列ペアリング型
MMX使用
です。gccがえらくはやいのはloopを完全に展開してしまってるからです(^^;
今の場合は参考記録としてください。
結果は見ての通り、「MMXを使え」でした(爆)




294. Re: ペアリングについて へるみ  2000/10/16 (月) 16:22
#なんか久しぶり(^^;;
ayaさん初めまして。
よく分からないのですがedi, esiの2つを使う理由はなんなのでしょう。
.lp:
and [edi],eax
shr [edi],1
add edi,4
dec ecx
jnz .lp
では駄目なのでしょうか。

>この処理は完全にペアリングされるのでしょうか?
P5上ではread/modify/write命令が遅いのでpairingされません。
上の場合は6〜7clock/dwordかかると思います。(PIIIやK7ではまた違います。)

単純な命令に分割した
;ecx=loop回数

.lp:
mov ebx,[edi]
and ebx,eax
shr ebx,1
mov [edi],ebx
add edi,4
dec ecx
jnz .lp
の方が速くなると思います。(5clock/dword?)

完全なpairingを目指すなら、loopレジスタとアドレスレジスタを兼用し
2つずつ処理する方向で出来そうです。(2.5clock/dword)
こんな感じ?

; loop回数は偶数を仮定する
; edi = 配列の先頭アドレス + loop回数 * 4
; ecx = - loop回数 / 2

mov ebx,[edi+ecx*8]
mov edx,[edi+ecx*8+4]
and ebx,eax
inc ecx

.lp:
shr ebx,1
and edx,eax
shr edx,1
mov [edi+ecx*8],ebx
mov [edi+ecx*8+4],edx
mov ebx,[edi+ecx*8+8]
and ebx,eax
mov edx,[edi+ecx*8+12]
inc ecx
jnz .lp




293. ペアリングについて aya  2000/10/15 (日) 06:43
アセンブラ初心者なのですが質問させてください。
ある線形配列内の全てのデータをある値でマスクし 2 で割るという処理を考えてみたのですが・・・。

それは、

edi = 配列の先頭アドレス
eax = マスクに用いる値

としたとき、

mov esi, edi
and dword ptr [edi], eax
shr dword ptr [esi], 1
add edi, 4

をループさせるというものです。

↑この処理は完全にペアリングされるのでしょうか?
また、もっと速くするにはどうしたらいいのでしょうか?

ご教授いただければ幸いです。




292. Re: WMAついて・・・ へるみ  2000/10/05 (木) 00:24
> WMAからWAVやMP3に変換する方法ってあるのですか?

Winamp, mp3, WMAのキーワードで検索すると解説したページが出て
来ますよ。Winampで出力をwavにして、それをもう一度mp3にするのが
簡単だと思います。
(ダイレクトに変換できるのかも知れませんが私は知りません)




291. WMAついて・・・ son/son  2000/10/01 (日) 16:45
えーと、はじめまして・・・
son/sonなるものですが、WMAからWAVやMP3に変換する方法って
あるのですか?
あるのでしたら是非お教え願いたいのですが…




290. Re^4: ウェーブレット変換 なべちゃん  2000/09/18 (月) 05:42
★補足
> 特許や方法に関しては、全く公開されてないそうですよ。
> 某社が全部独占して勝手に開発してるそうです。

論文として出てるもの(や有名な文献)を除いて・・・です。




289. Re^3: ウェーブレット変換 なべちゃん@abk  2000/09/18 (月) 05:40
おひさしぶりです、皆様。

> しかも圧縮方法に特許が取られていて、もう既に無視されてしまってるのかもしれないですね。

そういえば、私の前の学校の卒業研究で「フラクタルで動画圧縮」をやった人がいました。
何やら MMX命令 で書いてましたが・・・。ちゃんと動いてました。

たしかに復元画像はきれいですね。
圧縮時間はがんばってアセンブラで最適化して、かなり縮めてたみたいですど・・・
できあがったらソースちょうだいと言ったものの、結局もらえずじまいでした(汗

#今年引き継いだ人は何もできないだろうね・・・

特許や方法に関しては、全く公開されてないそうですよ。
某社が全部独占して勝手に開発してるそうです。

#久しぶりなのに、またゴミだなこりゃ・・・




288. Re^2: ウェーブレット変換 剣聖炎羅 [URL]  2000/09/16 (土) 22:23
こんにちは、剣聖炎羅です。

> 一時フラクタル圧縮がすごい圧縮率(&圧縮時間)を誇るという話を聞いたことがあります。実用化はまだなのでしょうかね。
フラクタル圧縮ですごいのは、圧縮率と展開時間です。
圧縮時間がおもいっきり長いですね(笑)
しかも圧縮方法に特許が取られていて、もう既に無視されてしまってるのかもしれないですね。




287. Re^2: インターリーブについて へるみ  2000/09/14 (木) 13:59
長船さんこんにちは。
解説ありがとうございます。
完全にハードよりの話だったのですね。
長船さんにコメント頂くとなんだか安心できます(^^;




286. Re: ウェーブレット変換 へるみ  2000/09/14 (木) 13:55
酔漢さんこんにちは。
お久しぶりです。
>ウェーブレット変換はJPEG2000に搭載が決まってますね。
>JPEGの圧縮率がディジカメの使い勝手の足かせになっている

一時フラクタル圧縮がすごい圧縮率(&圧縮時間)を誇るという話を聞いたことがあります。実用化はまだなのでしょうかね。




285. ありがとうございました。 aya  2000/09/12 (火) 23:27
インターリーブについての質問にお答えくださって、
ありがとうございました。
インターリーブメモリは基本的にはハードウェアの構成なんですね。
そして、これを有効に活用するためのコードを書くのは、
とても難しいことなんですね。
すごく参考になりました。ありがとうございました。






284. Re:インターリーブについて 長船 [URL]  2000/09/12 (火) 21:01
メモリインターリーブとは、基本的にはメモリを物理的(チップ毎)に分割して
それぞれを全く別のタイミングでアクセスすることで、シーケンシャルアクセス
時に見かけ上のアクセス速度を数倍にするハードウェア構成のことを指します。
当然、メモリのアドレス線・データ線・制御線を完全に分ける必要があります。

メモリインターリーブは、ランダムアクセスではバーストやキャッシュほど
効果が高くないので、現行のPCでインターリーブ制御が行われているのは、
ビデオカードのVRAMぐらいです。

基本的にはハードウェアの構成なので、ソフトウェアからはほとんど判りません。




283. Re: インターリーブについて へるみ  2000/09/12 (火) 15:30
最新のハードウェアにはうといので良く分かりませんが、
インターリーブメモリが連続アクセスを想定して考えられたのなら
データをなるべく密にするのがよいのではないでしょうか。
例えば昔のCPUでは演算量を減らすためにテーブル作成をよくしていました。
が、今のCPUなら計算してしまった方がメモリにアクセスするより良いことが
あります。
極力不要なデータを減らし、シーケンシャルにならべてアクセスすればよい
のかもしれません。
#インターリーブメモリに限った話ではないような気もしますが(^^;

>それとも、ソフトウェア的に実装するものなのでしょうか?
人間が細かく指定するならプリフェッチ命令と言うのがあります。
これはまさに
>次にアクセスが予測される他のバンクのメモリへのアクセス
を人間が明示するためのものです。

K6-2でx86CPU上初めて搭載されましたが使って速くなったと言う話は
聞いたことがありません(^^;
#私も何度か試しましたが遅くなりました...

Athlonでは結構効果があるようです。(prefetch, prefetchw)
PIIIでもSSE命令が増やされると同時に追加されました。
(prefetch{t0,t1,t2,nta})
これらの命令はCPUを止めることなくキャッシュをフルにすることが出来、
もともとキャッシュにヒットしている場合はnopに近い動作なので乱発しても
大丈夫なようです。
ただ効果を出すには試行錯誤と経験が必要なようでなかなか難しいです。




282. インターリーブについて aya  2000/09/12 (火) 00:00
はじめまして。
あまり、よく分かっていないのに質問することをお許しください。
メモリアクセスを高速に行うものとして、
インターリーブメモリというものがあるようですが、
これはハードウェア的にサポートされているものなのでしょうか?
それとも、ソフトウェア的に実装するものなのでしょうか?
仮にハードウェア的にサポートされているものであった場合は、
これを有効に利用するためのコードの書き方というものがあるのでしょうか?
(例えばデータの配置の仕方とか、アクセスの仕方とかなど・・・)
くだらない質問だとは思いますが、ご教授いただけませんでしょうか?
宜しくお願い致します。


<< 私の開発環境 >>
CPU : Celeron 366MHz
MEMORY : 128 M
OS : Windows98
COMPILER : VC++ 6.0 ( Inline Assembler )


<< 私がインターリーブについて知っていると思われること >>
1, メモリ全体を複数のバンクに分割しておく。
2, CPU があるメモリへのアクセスを開始したら、
次にアクセスが予測される他のバンクのメモリへのアクセスを開始する。
3, 最初のアクセスが終了したら、また別のバンクのメモリへのアクセスを開始する。
4, 2 〜 3 を繰り返す。
5, 予測が外れると CPU は待ち状態となる。




281. Re^2: ウェーブレット変換を使った圧縮 剣聖炎羅 [URL]  2000/09/11 (月) 03:10
> あと、こんな小さいルーチンはVC++はインライン展開するだろうけど
> asm化してしまうと関数呼び出しになって遅くなってしまうのでは
> ないでしょうか。

あ、そうか。そうですね、うーむ…

#変換部分はどんなにCレベルで最適化しても300msecを切りません。
 MMX対応にしても10msecしか変わらなかったし(泣)




280. ウェーブレット変換 酔漢  2000/09/10 (日) 17:30
こんにちは。

久しぶりにお邪魔します。引越しなされたんですね。
こちらではウェーブレット変換が話題なんですね。
昔、Turbo Pascalで書いて実証したあと、某プロセッサ
にインプリメントしたことが‥恐ろしいことに本当に
「昔」になりつつあります。すみません、ごみでした。

ウェーブレット変換はJPEG2000に搭載が決まってますね。
JPEGの圧縮率がディジカメの使い勝手の足かせになって
いるので、もう2年もすれば爆発的にJPEG2000が広まる
と思います。




279. Re: ウェーブレット変換を使った圧縮 へるみ  2000/09/10 (日) 00:09
まだ全然中身を見ていませんがひとつだけ...

>if(x>=x_max)x -= x_max;
って、前書いた気がするけど、
mov eax,[x]
sub eax,[x_max]
cdq ;edx=(x>=x_max)?0:-1
and edx,[x_max]
add eax,edx
で出来るんじゃないかな。
#cdqを使ったのはPIIIで速いから。
#ってPIIIを考慮するならcmovを使うべきだな(^^;

あと、こんな小さいルーチンはVC++はインライン展開するだろうけど
asm化してしまうと関数呼び出しになって遅くなってしまうのでは
ないでしょうか。




278. ウェーブレット変換を使った圧縮 剣聖炎羅 [URL]  2000/09/08 (金) 16:11
なんとか形にしてみました(笑)

ソースコード等も公開してますので、よろしければ
ご覧下さい。

#いまいち例外処理がいい加減な気が…(^^;;




277. Re^2: やっぱり さ〜 [URL]  2000/09/04 (月) 02:34
久しぶりです。

> 私も一瞬他のpageに飛んだのかと思いました。

わぁ、ずいぶんすっきりとしたなぁ、と
素直に受け取ったのは僕だけでしょうか(笑

でも、まぁ、サイトがつぶれないだけいいんじゃないでしょうか。
僕の使っているwebnikはつぶれます(笑
おかげでサイト移転しないと更新する気に
なりません。

> #休みも終わるし、ぼちぼち自分のpageも更新しようと。

休みだったですか。
僕は涼みに毎日学校行ってました(笑

更新、期待して待ってますね。




276. Re: やっぱり りう  2000/09/02 (土) 16:47
一応、@nifからの事前告知はあったが…(^^;
ただし、むちゃくちゃわかりにくかったのは確かだ(爆)




275. Re: やっぱり へるみ  2000/09/01 (金) 15:44
私も一瞬他のpageに飛んだのかと思いました。
#休みも終わるし、ぼちぼち自分のpageも更新しようと。




274. やっぱり DJ☆Uchi  2000/08/31 (木) 22:14
この掲示板も変更されちゃってますね。
Niftyも変更するなら、事前に教えて欲しかったです・・・。




273. コンパイラに負けた… 剣聖炎羅  2000/08/22 (火) 06:21
VC++6.0 Pro版にしてから数ヶ月。嫌な予感がしてアセンブリで書いた
例のウェーブレット変換のプログラムをCで書き直してみると…
フル最適化オプション有効コンパイルで、見事に負けました。

#ひゅるるー




272. Re: x86-64 へるみ  2000/08/11 (金) 13:06
みなさん情報が速いですね。
私はIA-64とx86-64の区別もありませんでした(汗)。
このCPUがSSE+3D Now!が使えるというやつですね。

>FPUも遂にスタック形式からの脱却を計るようですから、
>アセンブラ使いにとって最後の福音となるのかな?
うるりさんたちを見てるとどっちでも一緒って感じですが(^^;




271. x86-64 DJ☆Uchi  2000/08/10 (木) 21:58
が発表されたみたいですね。
詳しいことは知りませんが、汎用レジスタも8本増えているようですし、使いこなせば結構おもしろいかもしれませんね。

それに、FPUも遂にスタック形式からの脱却を計るようですから、アセンブラ使いにとって最後の福音となるのかな?

IA−64をアセンブラレベルで最適化できる頭脳があれば話は別ですが・・・(^^;




270. Re^2: 浮動小数点ユニット面白そう・・・ Hash  2000/08/08 (火) 05:37
> 486, K6, P5, P6, Athlon全て最適化方法が
> 違う上に、後半のCPUではSIMD命令で書いた方が
> 楽なんで最近はめったに書きません。

最近使ったのは fild fbst で10進変換。
こんな事の為に要FPU。
なんとも酷い仕様(笑)





269. Re: 浮動小数点ユニット面白そう・・・ へるみ  2000/07/29 (土) 13:31
>レジスタがスタック式とはずいぶん
>いけてねぇなぁ〜とは思いましたが

FPU命令は16bitの8086の時のままですからね。
386の時代でもFPUは別売で10万しました(笑)

486, K6, P5, P6, Athlon全て最適化方法が
違う上に、後半のCPUではSIMD命令で書いた方が
楽なんで最近はめったに書きません。
どうしてもasmでFPU命令を書く必要がある場面では、
K6,P5では重すぎて動かないし(^^;
#どうしてもdoubleが必要な時ぐらいかな...




268. 浮動小数点ユニット面白そう・・・ さ〜 [URL]  2000/07/28 (金) 15:51
今、仕事で・・・違った、ボランティアで
MMXコードを考えているんですが、たまたま
浮動小数点ユニットの話がとなりにのっていて
読んでしまいました(笑)

レジスタがスタック式とはずいぶん
いけてねぇなぁ〜と思いましたが、
レジスタリネーミング、かっこいいですねぇ。
オーバーラップ可能といい、
確かに、これならはまるのもわかります。
ということで、僕はなるべく近寄らないように
しておきます(笑)




267. Re^7: 私のやってる圧縮形式について… 剣聖炎羅  2000/07/17 (月) 13:38
自己レス&連書きすみません…
> 440ミリ秒ではなくて、510ミリ秒でした。
> さらに、最近買ったvaio(MMX Pentium 166MHz)では
> 1200ミリ秒かかりました。ゲームでは使い物になりませんね…(泣)

 最適化オプションを指定するの忘れてました…(--;;
 #やっぱりかなり違うなー

 MMXのほうで、逆変換してDIBにして表示するのに770ミリ秒
 かかりました。




266. Re^6: 私のやってる圧縮形式について… 剣聖炎羅  2000/07/17 (月) 08:44
自己レスです
> > ウェーブレット変換ルーチン中間報告:
> >  k6-2 300MHzで、640*480*24bppの画像の変換に
> >  440ミリ秒になりました。
>  学校のPenIIマシンで走らせてみると、何故か240ミリ秒
>  整数演算はK6-2の方が早かったはずじゃぁ…
>  (PenIIのクロック数は300だったと思います…)

440ミリ秒ではなくて、510ミリ秒でした。
さらに、最近買ったvaio(MMX Pentium 166MHz)では
1200ミリ秒かかりました。ゲームでは使い物になりませんね…(泣)




265. Re^3: 早とちりでした へるみ  2000/07/16 (日) 14:39
>もっといい方法はあるんでしょうか?
K6-2の場合は
sbb edx,edx

mov edx,eax
sar edx,31
にした方が速かったかも。





264. Re^2: 早とちりでした 剣聖炎羅  2000/07/16 (日) 05:10
これは最大値を超えないようにクリッピングする方法ですよね?
YCC−>RGB変換の際に、RGBの各値を0から255に制限するために
これを使おうかなと思ってるんですけど、もっといい方法はあるんでしょうか?




263. Re^2: {当のはやとちりでした(^^; 剣聖炎羅  2000/07/13 (木) 21:59
> とするとNo. 251でいいと思うのですが、何がまずいのでしょう?
うーん、屋って下されば分かると思うのですが、
あれでは、余りの計算と結果が同じになるのは、最初の1回だけなのです。
でも、ウェーブレット変換で、剰余計算が必要になるのは
N−1回にすぎないので、この変換に限定すれば、
xがx_maxの2倍を越えるようなことはおこらず、あの方法でもOKです。

> (mov ecx,0は不要です)
VC++のインラインアセンブラ用なので、入れてしまいました(笑)




262. Re^3: {当のはやとちりでした(^^; 剣聖炎羅  2000/07/13 (木) 21:55
> >って書いてふと思ったのですが、もしかしてx_maxが2の冪でしたっけ。
> >#x & ( x_max -1 )でOKなんて落ちでは...

 実はx_maxはドベシィのN=4の数列を使うと、
 16の倍数にしなければなりません。
 (一度に16個のデータを処理するため)
 ハールなら2の倍数です。
 #それ以前にハールウェーブレット変換では剰余計算する必要がありません。

> 実はかなり前からそう思ってます(^^;
> 基底関数によっては制限されないのかな?
> よくわかってません>wavelet
> haar基底しか読んでないので(^^;

 基底関数と言うよりは、一度にどれだけのデータを処理するかによって
 制限を受けます。
 N=1のハールなら 2個
 N=2のドベシイなら 4個
 という感じです。




261. Re^3: NASM なべちゃん  2000/07/13 (木) 17:05
>> 日本語のマニュアルがどこかにあると聞いたことがあるのですが、
>> 忘れました。m(__)m
> http://www.bekkoame.ne.jp/~bero/docj/nasm/nasmdoc0.htm

ありがとうございました m(__)m
けっきょく、以前ここで配ってた何かのソースがたまたまHDDにあったので
(NASM for T-OS 配布サイトではよく見つからなかった私)
それをみながら & 英語のマニュアルに検索かけながらなんとか乗り切りました。
午前4時までプログラムしたのは久々でした(苦笑)
思ったより早く完成しそうです(何でしょう?




260. Re^2: NASM   2000/07/13 (木) 12:05
はじめましてー。

> 日本語のマニュアルがどこかにあると聞いたことがあるのですが、
> 忘れました。m(__)m

http://www.bekkoame.ne.jp/~bero/docj/nasm/nasmdoc0.htm

これっすか?




259. Re^2: {当のはやとちりでした(^^; さ〜 [URL]  2000/07/13 (木) 10:14
>#たまにはさ〜さんより先に...

僕が掲示板を見たのが9:45頃。
う〜む、紙一重ですね(笑)。
#いや、でも考える時間がないか。

maxの4倍くらいまでにおさまるなら
クリッピング4回やるとかのほうが
はやかったりしませんでしょうか。
#考える時間がないとこんなことしか書けません(笑)

あとは、ループで毎回処理するようにすれば
クリッピングでいけますよね。へるみさんが
指摘しているのはこのことですよね?

for(i = 0, k = 0; i < n; i ++) {
....
k ++;
if (k> max) { k=k-max; } else { k=k; }
}
みたいな。

>って書いてふと思ったのですが、もしかしてx_maxが2の冪でしたっけ。
>#x & ( x_max -1 )でOKなんて落ちでは...

実はかなり前からそう思ってます(^^;
基底関数によっては制限されないのかな?
よくわかってません>wavelet
haar基底しか読んでないので(^^;




258. Re^6: 私のやってる圧縮形式について… へるみ  2000/07/13 (木) 09:51
#連ちゃん書込み...

整数演算はK6-2の方が速いことが多いです。特に割り算。
ただ、今回の場合メモリアクセスが効いてくるのでキャッシュの
大きさの違いが出ているのだと思います。




256. Re: NASM へるみ  2000/07/13 (木) 09:44
>NASM を使おうかと思うのですが、
>MS系のアセンブラとの違いに戸惑っています(汗)
>簡単な違いのメモみたいなのどこかにはありませんかね・・・

日本語のマニュアルがどこかにあると聞いたことがあるのですが、
忘れました。m(__)m
とりあえず、MamiyaさんとこのTownsOS用を取ってきて、彼が作った
いくつかのサンプルソースを眺めるのが一番てっとり早いと思います。





255. Re:本当のはやとちりでした(^^; へるみ  2000/07/13 (木) 09:43
クリッピングとmod演算とごっちゃになってました。
#いかん、最近疲れてる...

とするとNo. 251でいいと思うのですが、何がまずいのでしょう?
(mov ecx,0は不要です)
って書いてふと思ったのですが、もしかしてx_maxが2の冪でしたっけ。
#x & ( x_max -1 )でOKなんて落ちでは...




254. Re: 早とちりでした へるみ  2000/07/13 (木) 09:04
>a = x % x_maxは、
>if (x>x_max) { a=x-x_max; } else { a=x; }
>と等価なので、cmpとsbbの関係を利用して

mask = ( x>x_max) ? 0 : -1;
として、((x-x_max)&mask)+x_maxを考えると

mov eax,[x]
sub eax,[x_max]
sbb edx,edx
and eax,edx
add eax,[x_max]
でできると思います。
#たまにはさ〜さんより先に...
#って、これどこかに書いてませんでしたっけ。





253. Re: 早とちりでした 剣聖炎羅  2000/07/13 (木) 06:21
上記の方法は xがx_maxの2倍を越えない場合有効です。
以前さ〜さんが提案して下さった方法はゲタを使う方法ですが、
こちらの方法ではゲタを使わずに計算している。
ただ、それだけです…




252. 早とちりでした 剣聖炎羅  2000/07/13 (木) 05:54
がーん、この方法だと1回しかダメじゃん…
これだと、x_max=4の時、a=0,1,2,3,0,1,2,3,4,5,6・・・
てな事に…

やはり解決しなかった…(泣)




251. 最大値を超えない方法(剰余計算) 剣聖炎羅  2000/07/13 (木) 05:51
こんにちは、剣聖炎羅です。やっとの事で解決しました。
a = x % x_maxの計算を、比較と論理演算のみで計算します。
ちなみにx_max=4とすると、x=0,1,2,3,4,5,6,7,8の時、
a=0,1,2,3,0,1,2,3,0となります。

a = x % x_maxは、
if (x>x_max) { a=x-x_max; } else { a=x; }
と等価なので、cmpとsbbの関係を利用して、
 mov eax,[x_max]
 mov edx,[x]
 mov ecx,0
 cmp eax,ebx
 sbb ecx,ecx
 and ecx,eax
 sub edx,ecx
 mov [a],edx
で計算できます。あ、私は論理演算の知識が皆無なので、
この計算法に必要な条件である、
【x and 0は常に0で、x and -1は常にxであること】を
ループを作って、0x00000000から0xffffffffまで確かめました(笑)




250. Re^5: 私のやってる圧縮形式について… 剣聖炎羅  2000/07/13 (木) 01:27
自己レスです

> ウェーブレット変換ルーチン中間報告:
>  k6-2 300MHzで、640*480*24bppの画像の変換に
>  440ミリ秒になりました。
 学校のPenIIマシンで走らせてみると、何故か240ミリ秒
 整数演算はK6-2の方が早かったはずじゃぁ…
 (PenIIのクロック数は300だったと思います…)



249. NASM なべちゃん  2000/07/12 (水) 16:37
私のレベルではココはついていけないのか、忙しいのか、
おひさしぶりになります(汗)

NASM を使おうかと思うのですが、
MS系のアセンブラとの違いに戸惑っています(汗)
簡単な違いのメモみたいなのどこかにはありませんかね・・・

ところで、最近 FFT のアルゴリスムを見て思ったんですが、
DFT の方が早いですよねぇ?
IDEF と IFFT の場合は、IFFT の方が早いかも知れませんが。



 

  次へ  ← 300-250 / 323 件表示 →  前へ
件/頁   

 
password:
Copyright(C) 2000 NIFTY Corporation All Rights Reserved.