952. Re: すごく久しぶりですが へるみ  2004/10/15 (金) 20:36
> 久しぶりにアセンブラをやっています。PCがDothanコアになったので色々実験しているのです。
> すごいのはuopフュージョンですね。もろに速いです。

私はそっち系は最近ご無沙汰なのでDothanって何?ってレベルです(^^;
http://pcweb.mycom.co.jp/special/2004/dothan/009.html
など見ると本当に速いみたいですね.
来週からは全く異なるアーキテクチャの石を触ることになるのですが,たまにはこちらも触ってみようと思います.
面白いネタがあればまたよろしく.



951. すごく久しぶりですが とっこ  2004/10/15 (金) 13:50
いつぞやは、アセンブラの質問に答えてもらってありがとうございました。
久しぶりにアセンブラをやっています。PCがDothanコアになったので色々実験しているのです。
すごいのはuopフュージョンですね。もろに速いです。
SSEのandpsがクロックタイミング1-1なのも驚きました。
addpsは3-1を2回のようで(P6と同じ)、足して4-2ですが、
addps xm0,xm0/andps xm0,xm0 の繰り返しは2命令で4clkと、
P6より1clk速いです。
どうもandpsの上位と下位を別々に実行できるようになった感じです。
マンデルブロ集合の描画に期待していたaddpd,mulpdはFPUと同じclkで、P4にIPCでも負けです。
それでも並列性が増すのでFPUの3割以上速いです。
FPUも加算と乗算が同時にできるようです。

久しぶりだと慣れるまできつかったです。
ここのページとともに、昔の自分が整理のために書いた文章が役立ちました。
(読んだ時あのころの自分は天才かと思いましたね。もう慣れましたけど)
どうも、いきなり長々と失礼しました。



950. Re^2: sstream dsk  2004/10/11 (月) 22:57
> これは多分に趣味の問題だなあ.私は
> int buf[256];
> int a = sizeof buf + 4;
> が何を意図しているのか分かりにくいと思ってしまいます.
それは分りにくいので
int a = (sizeof buf) + 4;
とすべきと思います。



949. Re: sstream へるみ  2004/10/07 (木) 11:02
最初はstringstreamを使おうと思ったんですが,これって不定長だし,予め用意したバッファを使わせることができないですよな?
いくつか試してみたのですが,やりかたが分かりませんでした.

>後者には()は不要なので出来るだけ
>付けないようにしてもらえると嬉しいです。

これは多分に趣味の問題だなあ.私は
int buf[256];
int a = sizeof buf + 4;
が何を意図しているのか分かりにくいと思ってしまいます.
あと sizeof が括弧なしでもよいという事実自体があまり一般的でない気がするので,というのもあります.



947. sstream dsk  2004/10/07 (木) 09:45
#include <sstream>
で、basic_stringstream<> が使えると思います。お望みのものは、
basic_stringstream<char>でOKだと思います。

ところでsizeof演算子ですが、
sizeof (型)
sizeof 式
の二通りの使い方があるのですが、後者には()は不要なので出来るだけ
付けないようにしてもらえると嬉しいです。たとえば、sizeof bufでは
なく、sizeof(buf)と書かれていると、bufという型が定義されていない
か確認してしまうので....分ってやっているなら趣味の問題ですが。



942. 9/16日(数学パズルのつづき) dsk  2004/09/20 (月) 16:12
そうですね。
「 {(x,y)∈L | x+y : even} が(1,1)∈Lで生成される」が必要十分 -- 問題を書き直しただけ
[(2,0)∈Lが、(1,1)∈Lで生成される」が必要十分 -- 2+0は偶数だから必要、(2,0)と(1,1)があれば生成できるので十分
gcd(2m-2, 2n-2) = 2 i.e. gcd(m-1, n-1) = 1 が必要十分か?
必要:k(1,1) = (2,0)∈Lとすると、k - 2 = 2x(m-1), k = 2y(n-1)となる整数x,yが存在するので、y(n-1) - x(m-1) = 1となるx,yが存在する。よってgcd(m-1, n-1) = 1
十分:L' := Z/(n-1)Z x Z/(m-1)Z 上で k(1,1)∈L' = (1,0)となるkが存在することは自明で、このときk(1,1)∈Lは4通り考えられるが、いずれも2k(1,1)=(2,0)∈L ■
となりますね。



939. Re^3: 数学パズル? dsk  2004/09/14 (火) 13:33
> 第一感はgcd(m, n) <= 2ですね。本当に今読んで思いついただけなので分りませんが。
第一感はだめでしたね。gcd(m-1, n-1) = 1が正解ですね。必要は言えます。十分も多分言えますが、鏡像の関係で少し穴があるかも。



933. Re^2: 数学パズル? dsk  2004/09/07 (火) 16:49
第一感はgcd(m, n) <= 2ですね。本当に今読んで思いついただけなので分りませんが。



932. Re: 数学パズル? へるみ  2004/09/03 (金) 22:53
> って簡単な問題でしょうか。
どうなでしょうね.
m>=n=2というトリビアルな解はすぐ思いつきますけど.



931. 数学パズル? ゆめみ  2004/09/03 (金) 17:13
昔思いついたんですが、

(1)m*n の全てが白の桝目の板があり
(2)左上(隅ならどこでも可)に将棋駒の角(斜め方向にのみ進める)を置き
(3)行ける方向にまっすぐ進み、進めなくなったら戻らずに方向転換する
(4)通過した場所を黒く塗りつぶす(既に塗りつぶされた桝を通過した場合
は何もしない)
(5)(2)とは別の隅に来たら終了

(昔のキャラクタベースのテニスゲームのボールの動きのイメージ)

を行って終了した時点で板の模様が完全な市松模様
(縦横で隣り合った桝の色が全て異なる)になるのは、
mとnをどのように選んだ場合か?

って簡単な問題でしょうか。



928. 風邪引かないようにね dsk  2004/09/02 (木) 10:36
この季節台風が多くて大変ですね



924. Re: > 東京日帰り出張 へるみ  2004/08/20 (金) 22:58
たとえば
http://akiba.ascii24.com/akiba/news/2004/03/03/648522-000.html
なのです(この製品自体は持ってませんが).
出張先でデモとかしやすいですね.



922. > 東京日帰り出張 dsk  2004/08/20 (金) 09:57
> ノートパソコン2台
ひょっとしてそのうちの一台はあのデカVAIOですか?
> USB5.1chサウンドシステム
これは何でしょう? USBに音声を出力するの...?



921. Re^8: No. 004 S-JIS分岐について dsk  2004/08/18 (水) 10:41
> 本を見ると[]や->の方が優先順位が高いようですけど,そういう問題ではない?
そういうような問題でした。正解は、関数呼出の()、配列参照の[]、構造体参照の->、.、と後置演算子++、--です。一言で言うと後置単項演算子ですね。
次がキャスト以外の前置単項演算子で、その次がキャストになります。



919. Re^7: No. 004 S-JIS分岐について へるみ  2004/08/17 (火) 13:08
>C言語で最も優先度の高い演算は何でしょうか?
亀レスで安直ですが,後置演算子(i++)ですか?
本を見ると[]や->の方が優先順位が高いようですけど,そういう問題ではない?



915. Re^6: No. 004 S-JIS分岐について dsk  2004/08/07 (土) 03:01
> ああ、やっぱ自然数のintになるんだ…
> ちょっと複雑な計算式になると優先順位気にして () 付けるんだが
> () 付けても油断できんね…
本件の式中の括弧はすべて必要な括弧だよ。括弧を付けて安心するよりかはC言語/C++言語の演算規則をしっかり覚えた方がいいですよ。
...ところで問題。C言語で最も優先度の高い演算は何でしょうか? [演算順序を変更する()は演算ではないので除く]



913. Re^5: No. 004 S-JIS分岐について 233  2004/08/04 (水) 07:55
ああ、やっぱ自然数のintになるんだ…
ちょっと複雑な計算式になると優先順位気にして () 付けるんだが
() 付けても油断できんね…



912. Re^4: No. 004 S-JIS分岐について へるみ  2004/08/03 (火) 23:17
unsigned同士でも引き算の結果はsignedの可能性があるので,そこで暗黙の型変換(普通intになる)が行われてしまいます.
忘れやすいですね.
http://www9.plala.or.jp/sgwr-t/c_sub/TypeConversion.html



911. Re^3: No. 004 S-JIS分岐について 233  2004/08/03 (火) 23:01
サンクス…
変数が unsigned char だからcastせんで良いと思ってた…
つーか今でもあんま良く分からんけど…_| ̄|○



910. Re^2: No. 004 S-JIS分岐について へるみ  2004/08/03 (火) 09:05
> if( ( ( TestChar ^ 0x20 ) - 0xA1 ) <= 0x3B )
私のは
if( (unsigned char)( ( TestChar ^ 0x20 ) - 0xA1 ) <= 0x3B )
で意味が違いますよ.



909. Re: No. 004 S-JIS分岐について 233  2004/08/03 (火) 00:03
ちなみにこんなコードで試してます。


---------ソース----------------
#include <stdio.h>

typedef unsigned char BYTE;

bool MyIsDBCSLeadByte( BYTE TestChar );
bool IsDBCSLeadByte( BYTE TestChar );

int main()
{
int nTest;

for( nTest = 0; nTest <= 0xFF ; nTest += 1 )
{
if( ::IsDBCSLeadByte( ( BYTE )nTest ) != ::MyIsDBCSLeadByte( ( BYTE )nTest ) )
{
::printf( "× %02X\n", nTest );
}
}

return 0;
}


bool MyIsDBCSLeadByte( BYTE TestChar )
{
bool rLeadByte = false;

if( ( ( TestChar ^ 0x20 ) - 0xA1 ) <= 0x3B )
{
// シフトJIS
rLeadByte = true;
}

return rLeadByte;
}


bool IsDBCSLeadByte( BYTE TestChar )
{
bool rLeadByte = false;

// 通常?
if( ( 0x81 <= TestChar && TestChar <= 0x9F ) ||
( 0xE0 <= TestChar && TestChar <= 0xFC ) )
{
// シフトJIS
rLeadByte = true;
}

return rLeadByte;
}
---------EOF----------------



908. Re: No. 004 S-JIS分岐について へるみ  2004/08/02 (月) 22:36
#define IS_KANJI1(x) ((unsigned char)((x^0x20)-0xA1)<=0x3B)

void putDiff()
{
int i, j;
for (j = 0; j < 16; j++) {
for (i = 0; i < 16; i++) {
int x = i + j * 16;
putchar(IS_KANJI1(x) == IsDBCSLeadByte(x) ? 'O' : 'X');
}
printf("\n");
}
}
を実行すると全て'O'が出力されるので正しいと思うのですが.

ダブルバイト文字(マルチバイト文字)セットとはこの場合Shift JISで記述された文字列になります.ワイド文字列ではありません.
# unicodeは詳しくないのでどなたかコメント求む(^^;



907. No. 004 S-JIS分岐について 233  2004/08/02 (月) 20:58
if( ((unsigned char)((x^0x20)-0xA1)<=0x3B) )

についてなんですが、正しく分岐しないんですが、
どのような環境で行ったのでしょうか?

X の型は IsDBCSLeadByte の引数と同じく unsigned char ですよね?



906. Re: 所有権 へるみ  2004/07/29 (木) 22:29
> adminなら「所有権の取得」ということができます。所有権を取得すればアクセスできます。NTFSの独特な概念ですね....
獲得した所有権は戻せないそうなので,クラッキングされても痕跡が残るという意味ではUNIX系よりも堅牢なんですね.



905. 所有権 dsk  2004/07/29 (木) 20:22
> Windowsってadminレベルでも他人のファイルはアクセスできないんやね. 知らんかった.
adminなら「所有権の取得」ということができます。所有権を取得すればアクセスできます。NTFSの独特な概念ですね....(VMSもこうなのだろうか...)
あと、「継承」の属性も3種類あるし....
NTFSのACL(access control list)について調べてみると結構面白いよ。



903. Re^4: 教えて下さい vega  2004/07/24 (土) 08:19
> > SSEのみの場合、通常はどのようにMMX <-> SSEレジスタ間のデータ転送を考えるのかヒントお願いします。
>
> その場合はメモリを介して移動するしかないです.
> SSE登場時の設計者はMMXとの連携を考えなかったようです.
> 使いにくいことこの上ないですね(x_x).

ありがとうございました。ちょっと吹っ切れました。

それはそうと、へるみさんのページ大変参考になっております。感謝です。



902. Re^3: 教えて下さい へるみ  2004/07/24 (土) 07:19
> SSEのみの場合、通常はどのようにMMX <-> SSEレジスタ間のデータ転送を考えるのかヒントお願いします。

その場合はメモリを介して移動するしかないです.
SSE登場時の設計者はMMXとの連携を考えなかったようです.
使いにくいことこの上ないですね(x_x).



901. Re^2: 教えて下さい vega  2004/07/24 (土) 03:02
> movq2dq xmm0, mm0 ; xmm0 <- mm0
> movdq2q mm1, xmm0 ; mm1 <- xmm0
> です.

ありがとうございました。
実は説明が足りませんでした。当方Athron 1800+で、SSEのみ環境であります。
SSEのみの場合、通常はどのようにMMX <-> SSEレジスタ間のデータ転送を考えるのかヒントお願いします。




900. Re: 教えて下さい へるみ  2004/07/23 (金) 23:03
movq2dq xmm0, mm0 ; xmm0 <- mm0
movdq2q mm1, xmm0 ; mm1 <- xmm0
です.



899. 教えて下さい vega  2004/07/23 (金) 14:57
アセンブラ始めたばかりで手探りで勉強してます。MMXレジスタとSSEレジスタ間のデータ移動に関して質問です。
mm0のイメージをそのままの形でxmm0に持って行くにはどうすれば良いのでしょうか?また反対にxmm0のF0,F1をmm0にそのままのイメージでコピーするにはどうすれば良いのでしょうか?



879. Re: MP3フォーマット   2004/06/21 (月) 11:49
MP3フォーマットなら割とここが詳しいような。
http://www.geocities.jp/bywnn498/mp3/
ハフマン符号表も書いてありますし。

まあ、午後の開発時は、
ISOの仕様書(11172-3)を見ながら作業したりしてましたが^^;;



878. MP3フォーマット hans  2004/06/21 (月) 02:14
はじめまして。
いきなりで差し出がましいかもしれませんが
MP3のファイルフォーマットがわからないのです。
自前でエンコーダデコーダ書く羽目になっちゃいまして…
いろいろ探し回ったのですが、
理論を書いてあるページは見つかったのですが
肝心のファイルフォーマットがわからないために
さっぱり作成がはじまりません。
ハフマン木は決められたものから選択される→
決められたものとはどこに書いてあるのだろう…てな感じです
ISOやIRCのページもどこになにがあるのやら…
情報のありかを知っている人おられましたら
どうか教えてください、お願いします。



876. 10日の日記 dsk  2004/06/11 (金) 09:18
Cとの連携のリンクのディレクトリがまちがってます。



875. Re: Riemann予想証明された? へるみ  2004/06/10 (木) 23:24
本当なら凄いねぇ。
眠いのでコメントが浮かばん(^^;
#実際書き込みしながら意識が飛んでいた...



873. Riemann予想証明された? dsk  2004/06/10 (木) 18:06
http://www.itmedia.co.jp/news/articles/0406/10/news028.html

私にはまったく分らん世界だけど。
(Riemann予想もどきが成立するようなζ関数もどきをでっちあげて....という
話ならよくありましたが)



872. css dsk  2004/05/28 (金) 12:40
おお、とうとうお手製CSSやめて、標準CSSにしましたか。
私はnewtypeぎみかも。
shell→zsh歴8年以上。
エディタ→mainマシンでは、xemacs, vi, TextEdit, OmniOutliner併用。
デスクトップ→Mac上のX11は良いよ。gnomeよりはKDE、gekkoよりkhtmlですね。
kterm/xemacs/tex系統、で出来ない(or面倒な)ことはMacのアプリで。
プログラミング言語→C++とかObjective Cとかないの?
添付→MIME
リソース→貧乏も富豪も使うかも。でも貧乏よりかな。
文書保存→RFC2822ってメールじゃないの?最近xmlにしようとしている(ただしschemaはDTDだけど....xmlschemaとか面倒で。)
install→make or SRPMですね。(xemacsだけはbinaryですが)
人生→unstable



868. Re: ストレス解消になりましたでしょうか? へるみ  2004/05/22 (土) 09:48
一瞬何かの宣伝書き込みかと思ってしまいました。
小籠包はとてもおいしかったですが、ちょっと舌を火傷したようです。ひりひり痛い。



867. ストレス解消になりましたでしょうか? エステーリャ [URL]  2004/05/22 (土) 01:35
今宵はお疲れ様でした。台湾料理の味は少しは貴殿の
ストレス解消に貢献しましたでしょうか?
閉店間際で忙しなかったですが、今度はもう少し時間の
余裕を持って参りましょう。では良い週末を。



866. Re: 寒い? へるみ  2004/04/20 (火) 23:39
> 4月なのにもう冷房ですか?それは辛いですね。
膝が痛くて頭がぼうとしてます。セーターに膝掛けを用意してましたが耐えきれず別の場所に移動してしまいました。



865. 寒い? dsk  2004/04/20 (火) 14:31
4月なのにもう冷房ですか?それは辛いですね。



864. Xが打ってあるところ dsk  2004/04/15 (木) 03:42
逆というよりは、チェックボックスのイメージだと思います。あちらでは、チェックボックスはXを打つ人とVを打つ人が居る訳で(どちらもチェックあるいはOKという意味 -- 試験などの採点で正解の場合もXやVを打ちます)。もちろん○が駄目ということはありません。



863. Re^3: mm0とxmm0について Nop80  2004/04/14 (水) 20:05
>> xmm0〜xmm15は{8/16/32/64}bit整数演算(SSE2以上)、あるいは{32/64}bit浮動小数点演算(SSE以上)に使われます。
>64bit浮動小数点演算はSSE2以上でした(^^;
なるほど、たいへん詳しい説明ありがとうございます。

>私のところの(古くてしょぼい)http://homepage1.nifty.com/herumi/adv.html
>にも多少書いてますが、正確で詳しいものがIntelのページにいけばたくさんあります。
>http://www.intel.co.jp/jp/developer/design/Pentium4/documentation.htm#man
紹介して頂いたページを見てみます。
ありがとうございました。



862. Re^2: mm0とxmm0について へるみ  2004/04/14 (水) 13:05
訂正
> xmm0〜xmm15は{8/16/32/64}bit整数演算(SSE2以上)、あるいは{32/64}bit浮動小数点演算(SSE以上)に使われます。
64bit浮動小数点演算はSSE2以上でした(^^;



860. Re: mm0とxmm0について へるみ  2004/04/14 (水) 07:05
>mm0とxmm0は、それぞれ何の為の目的として使用されるのでしょうか?
また、その目的以外で使用してもよろしいのでしょうか?

いまいち質問の意味が分かりませんが何に使ってもよいです。

>一応、自分でも調べてみました。
>mm0〜mm7   → 80bitレジスタで倍精度浮動小数点演算で使用
>xmm0〜xmm15 → 128bitレジスタで倍精度浮動小数点演算を2つ同時に実行
>以上、あっていますでしょうか?

違います。mm0〜mm7は{8/16/32}bit整数演算のために使われます。
xmm0〜xmm15は{8/16/32/64}bit整数演算(SSE2以上)、あるいは{32/64}bit浮動小数点演算(SSE以上)に使われます。

>#もし、こういう質問はこのドキュメントまたはWebを見ろとか
>#ありましたら教えてもらえませんでしょうか。

私のところの(古くてしょぼい)http://homepage1.nifty.com/herumi/adv.html
にも多少書いてますが、正確で詳しいものがIntelのページにいけばたくさんあります。
http://www.intel.co.jp/jp/developer/design/Pentium4/documentation.htm#man



859. mm0とxmm0について Nop80  2004/04/14 (水) 03:01
はじめまして、最近アセンブラを勉強しました者です。

あるWebでmm0〜mm7とxmm0〜xmm15のレジスタを用いてコーディングしていました。
それを見ていて疑問に思ったことがあります。

mm0とxmm0は、それぞれ何の為の目的として使用されるのでしょうか?
また、その目的以外で使用してもよろしいのでしょうか?

一応、自分でも調べてみました。
mm0〜mm7   → 80bitレジスタで倍精度浮動小数点演算で使用
xmm0〜xmm15 → 128bitレジスタで倍精度浮動小数点演算を2つ同時に実行
以上、あっていますでしょうか?

#もし、こういう質問はこのドキュメントまたはWebを見ろとか
#ありましたら教えてもらえませんでしょうか。(日本語、英語どちらでもよいです)

よろしく、お願いします。



858. 前後の処理を含めるような形 tyn  2004/04/04 (日) 12:28
前後の処理含めるように書き換えると、さらに高速化するという話はよく分かるのですが、今回の改良の結果、全く別のところで、いくつか、律速になるところが、見えてきました(^^;)

そこで、そちらの方を先に高速化しようと思ってます。

ただ、規則正しくはアクセスしているのですが、連続していないメモリアクセスなので、どうやって、SIMDにパックするのがいいのか、大変迷ってます。パックできても、配列長はせいぜい1-8で可変なのでループの展開も、難しそうです。テストプログラム書いて、よく分からないことがありましたら、相談に乗っていただけるとうれしいなと(;^_^A



857. Re: 高速化成功 へるみ  2004/04/02 (金) 09:37
> 4回展開したルーチンを組み込んでみたところ、
> プログラム全体として37%高速化しました。
> 大満足です♪
よかったですね。ただうるりさんが書いてらっしゃるように前後の処理も含めるような形にする方が高速化が望めます。
#SIMDの能力はそんな程度じゃないでよ(^^;



856. Re: 4/1だけに・・・ うるり  2004/04/02 (金) 07:10
SP6でてるのか・・・マイクロソフトのネタ?(汗



855. 4/1だけに・・・ うるり  2004/04/02 (金) 07:05
>ひっそりネタですか?
ネタでしょうね。
ええ、検索して調べましたよ。SP6が出てないか(汗

>tynさん
せっかくなので状況を整理しておくと、
1. counter=10万回を1000回呼び出しではSIMDとSISDの差が無かった
 →counter値が大きすぎてメモリアクセステストになっていた。
  (と思われる?)
2.counter=16384以下ではSIMDの方が速い
 →キャッシュヒットしている状況ではSIMD効果あり
3.ループは展開した方が速い。また4倍展開の方が8倍展開より速い
 →ループは展開したほうが良いが、し過ぎると遅くなる。
  過剰な展開コードで、先行的なメモリリードが多すぎるため、
  演算を伴わない無駄なデータがCPU内に留まりリソースを消費する。
  Pen4はリソース豊富&元々パイプラインが長いため影響が少ないか?
4.もっと前後の関数も含めて展開すると速くなるはず
 →展開しても演算より読込みが多い状況は変わっていません。
  最低5〜10命令ぐらいレジスタ上で演算を実行できれば
  最近のCPUは効率良く動きます。



854. Re: VCのSP6 へるみ  2004/04/02 (金) 07:02
> ひっそりネタですか?
いやあ、ネタっぽいけど事実です(^^;
http://www.microsoft.com/japan/msdn/vstudio/downloads/sp/VS6SP6.asp



852. VCのSP6 dsk  2004/04/02 (金) 02:50
ひっそりネタですか?



851. 高速化成功 tyn  2004/04/01 (木) 23:12
実際に、高速化したかったプログラムに、
4回展開したルーチンを組み込んでみたところ、
プログラム全体として37%高速化しました。
大満足です♪

また、分からないところがありましたら
教えていただけるとうれしいです(^^;)



850. Re: P4 3.06GHzで試してみました。 へるみ  2004/04/01 (木) 21:47
> やはりCPUによる違いだったんですね。
AthlonXpはSSEユニットが少ないから展開しすぎると駄目なんですね。難しいなあ。



849. P4 3.06GHzで試してみました。 tyn  2004/04/01 (木) 10:55
clock=0.58
clock=0.52

となりまして、へるみさんと同じくCalcSIMD4の方が早くなりました。
やはりCPUによる違いだったんですね。



848. バイナリでチェック tyn  2004/04/01 (木) 00:16
コマンドプロンプトで実行して

AthlonXP2700+で
clock=0.50
clock=0.75

Celeron1.4GHz
clock=0.97
clock=1.44

となりました。

CPUの違いによるものなのかな?
P4マシンは、家にないので、
あとで確認してみますね。



846. Re: 試してみました へるみ  2004/03/31 (水) 23:56
なんでなんでしょうね。
私のところではP4-1.7GHz/3GHzどちらでもSIMD4の方が速かったです(VC6, ICC8)。
バイナリでチェックしてみましょうか。
http://homepage1.nifty.com/herumi/adv/test/t.zip
#cl t.cpp /O2
#でコンパイルしたもの。
実行結果@P4-1.7Gz
e:\tmp>t
clock=1.11
clock=0.94



845. 試してみました tyn  2004/03/31 (水) 11:22
>float *dest = src + (1<<15); // + 4;の//を消すと?

というのは
float *dest = src + (1<<15);// + 4;
-->
float *dest = src + (1<<15)+ 4;
へ変更するという意味なんですよね?

+ 4した場合
AthlonXP2700+
CalcSIMD2-->0.55
CalcSIMD4-->0.75

Celeron1.4GHz
CalcSIMD2-->1.24
CalcSIMD4-->1.55

CalcSIMD2とCalcSIMD4の場所を入れ替えた場合
AthlonXP2700+
CalcSIMD2-->0.48
CalcSIMD4-->0.73

Celeron1.4GHz
CalcSIMD2-->0.97
CalcSIMD4-->1.46

CalcSIMD2とCalcSIMD4の場所を入れ替え
かつ+4の場合
AthlonXP2700+
CalcSIMD2-->0.45
CalcSIMD4-->0.77

Celeron1.4GHz
CalcSIMD2-->1.20
CalcSIMD4-->1.47

でした。

ちなみに、こちらの実行環境は
WinXP+SP1
VC++6とIntel Complier 8.0
です。



844. Re: t.cppを試させていただきました へるみ  2004/03/30 (火) 23:33
float *dest = src + (1<<15); // + 4;の//を消すと?
CalcSIMD2とCalcSIMD4を入れ換えたら?

これらの結果も教えていただますか。



843. t.cppを試させていただきました tyn  2004/03/30 (火) 23:11
メイン関数を少し弄りまして↓

int main()
{
static float a_[1<<18];
float *src = (float *)((((int)a_) + 15) & ~15);
float *dest = src + (1<<15);// + 4;
int i;
const count = 1024;

for (i = 0; i < count; i++) {
src[i] = 1;
dest[i] = 1;
}
int begin;
begin = clock();
for (i = 0; i < 1000 * 1000; i++) {
CalcSIMD2(dest, src, count);
}
printf("clock=%.2f\n", (clock() - begin) / double(CLOCKS_PER_SEC));

for (i = 0; i < count; i++) {
src[i] = 1;
dest[i] = 1;
}
begin = clock();
for (i = 0; i < 1000 * 1000; i++) {
CalcSIMD4(dest, src, count);
}
printf("clock=%.2f\n", (clock() - begin) / double(CLOCKS_PER_SEC));

getch();
return 0;
}

AthlonXP2700+
CalcSIMD2 -->clock=0.48
CalcSIMD4 -->clock=0.73

Celeron1.4GHz
CalcSIMD2 -->clock=1.02
CalcSIMD4 -->clock=1.44
となりました。

う〜ん、謎ですね(^^;)



841. Re: ループ展開8つが遅い へるみ  2004/03/30 (火) 21:47
http://homepage1.nifty.com/herumi/t.cpp
にあるコードで試すと若干CalcSIMD4の方が速かったですが...
何か違います?

妄想
1. 掛け算を繰り返すことで途中でオーバーフローして例外処理に手間取ってる
2. src, destのアドレスの差がきれいな2の巾になって速度低下を招いている



840. ループ展開8つが遅い tyn  2004/03/29 (月) 22:42
へるみさんのおっしゃるとおり、確かに奇妙ですが、
原因は思い当たりません。

以下のコードをそれぞれ最初に配列を初期化してから
同じ回数だけ呼び出してます。

>4つに展開したコード
void CalcSIMD2(float *dist, float *src, int counter)
{
__asm{
mov eax,0
mov edx,dword ptr [counter]
cmp eax,edx
jge end1
mov edi,dist
mov esi,src
loop1
:movaps xmm0, [edi+eax*4]
movaps xmm1, [edi+eax*4+16]
movaps xmm2, [edi+eax*4+32]
movaps xmm3, [edi+eax*4+48]
mulps xmm0, [esi+eax*4]
mulps xmm1, [esi+eax*4+16]
mulps xmm2, [esi+eax*4+32]
mulps xmm3, [esi+eax*4+48]
movaps [edi+eax*4], xmm0
movaps [edi+eax*4+16], xmm1
movaps [edi+eax*4+32], xmm2
movaps [edi+eax*4+48], xmm3
add eax,4*4
cmp eax,edx
jl loop1
end1:
}
}


>8つに展開したコード
void CalcSIMD4(float *dist, float *src, int counter)
{
__asm{
mov eax,0
mov edx,dword ptr [counter]
cmp eax,edx
jge end1
mov edi,dist
mov esi,src
loop1:
movaps xmm0, [edi+eax*4]
movaps xmm1, [edi+eax*4+16]
movaps xmm2, [edi+eax*4+32]
movaps xmm3, [edi+eax*4+48]
movaps xmm4, [edi+eax*4+64]
movaps xmm5, [edi+eax*4+80]
movaps xmm6, [edi+eax*4+96]
movaps xmm7, [edi+eax*4+112]
mulps xmm0, [esi+eax*4]
mulps xmm1, [esi+eax*4+16]
mulps xmm2, [esi+eax*4+32]
mulps xmm3, [esi+eax*4+48]
mulps xmm4, [esi+eax*4+64]
mulps xmm5, [esi+eax*4+80]
mulps xmm6, [esi+eax*4+96]
mulps xmm7, [esi+eax*4+112]
movaps [edi+eax*4], xmm0
movaps [edi+eax*4+16], xmm1
movaps [edi+eax*4+32], xmm2
movaps [edi+eax*4+48], xmm3
movaps [edi+eax*4+64], xmm4
movaps [edi+eax*4+80], xmm5
movaps [edi+eax*4+96], xmm6
movaps [edi+eax*4+112], xmm7
add eax,4*8
cmp eax,edx
jl loop1
end1:
}
}



838. Re: アドバイスに感謝〜 へるみ  2004/03/29 (月) 22:18
counterが小さいときのループ展開8つ分が遅いのが気になりますね。4つ分と劇的に変わるとは思えないので何か他に原因(or ミス)が無いでしょうか。




837. アドバイスに感謝〜 tyn  2004/03/29 (月) 20:25
うるりさん、へるみさん適切なアドバイスありがとう御座いました。

実際には、最大で2^14=16384程度くらいの配列の計算なので、
counter=16384で、10万回の関数呼び出しで計算してみました。
SISDは、特にアラインしないメモリを別に確保して実行してます。

SISD(アラインなし)-->3.672sec
SIMD(ループ展開なし)-->2.578sec
SIMD(ループ展開4つ分)-->2.469sec
SIMD(ループ展開4つ分+プリフェッチ)-->2.656sec
SIMD(ループ展開8つ分)-->2.375sec
SIMD(ループ展開8つ分+プリフェッチ)-->2.453sec
アラインされたメモリコピーのみ-->2.453sec
アラインされてないメモリコピーのみ-->2.750sec

counter=8192で、20万回の関数呼び出しで計算。

SISD(アラインなし)-->1.766 sec
SIMD(ループ展開なし)-->1.359 sec
SIMD(ループ展開4つ分)-->0.828 sec
SIMD(ループ展開4つ分+プリフェッチ)-->0.875 sec
SIMD(ループ展開8つ分)-->1.172 sec
SIMD(ループ展開8つ分+プリフェッチ)-->1.250 sec
アラインされたメモリコピーのみ-->0.953 sec
アラインされてないメモリコピーのみ-->1.531 sec

counter=4096で、40万回の関数呼び出しで計算。

SISD(アラインなし)-->1.594 sec
SIMD(ループ展開なし)-->1.329 sec
SIMD(ループ展開4つ分)-->0.765 sec
SIMD(ループ展開4つ分+プリフェッチ)-->0.860 sec
SIMD(ループ展開8つ分)-->1.171 sec
SIMD(ループ展開8つ分+プリフェッチ)-->1.188 sec
アラインされたメモリコピーのみ-->1.141 sec
アラインされてないメモリコピーのみ-->0.953 sec

counter=1024で、100万回の関数呼び出しで計算。

SISD(アラインなし)-->1.109 sec
SIMD(ループ展開なし)-->0.844 sec
SIMD(ループ展開4つ分)-->0.485 sec
SIMD(ループ展開4つ分+プリフェッチ)-->0.546 sec
SIMD(ループ展開8つ分)-->0.735 sec
SIMD(ループ展開8つ分+プリフェッチ)-->0.781 sec
アラインされたメモリコピーのみ-->0.609 sec
アラインされてないメモリコピーのみ-->0.594 sec

頑張って、2倍くらい早くなるみたいですね。
あとプリフェッチは、本当に、意味がないみたい(^^;)

大変勉強になりました。お二方には、本当に感謝感謝です(^^)/~~



836. Re^2: SIMDの使い方2 へるみ  2004/03/29 (月) 07:26
> 偶然見てしまいましたので、横槍入れさせて下さい(汗
横槍ありがとうございます(^^;
うるりさんがおっしゃるように1.をなんとかしないと話が進まないと思います。10万個のfloatの掛け算のみの関数が必要なのか、他と統合できないのかを考えていく必要があります。

>繰り返し回数を1000回以上に増やしていくとどうなるか
加えて要素数を10万から1万、千と減らしたときにどうなるか
も実験するといいんじゃないかな。



835. Re: SIMDの使い方2 うるり  2004/03/29 (月) 07:19
偶然見てしまいましたので、横槍入れさせて下さい(汗

今回のポイントを書いて見ますと、
1、演算というよりはメモリアクセスがボトルネックです。
 乗算1回に、ロード2回とストア1回が発生しています。
 高速化には、レジスタ上で演算できるように前後の関数を
 展開&統合してみるのが一般的です。
2、キャッシュアクセス速度がボトルネックです。
 float要素を10万回アクセスなので400KBアクセス、
 入力2ストリーム、出力1ストリームなので、
 800KB+のアクセスが発生します。
 今回のターゲットはL2が512KB前後なので、
 CPUとL2キャッシュ、CPUとメインメモリ間の
 アクセス速度が問題になってきます。
 上記1の問題のため、
 ハードウェアとソフトウェアによるプリフェッチでは
 メモリアクセスは隠蔽されません。
 今回の測定結果が妥当かどうかは、細かく計算してみないと
 なんともいえませんが(汗
3、計っている時間は正しいか・・?
 10万回×1000回=100M回なので、仮に全てL1キャッシュヒット
 したとすると1GHzでも1秒かかりません。
 繰り返し回数を1000回以上に増やしていくとどうなるか
 興味はあります。

とにかく、できれば1番は解決したほうが良いと思います。
2番はSIMDでメモリアクセスが効率化するので
SIMD効果は期待できると思います。



834. SIMDの使い方2 tyn  2004/03/28 (日) 23:47
へるみさん、早速のお返事ありがとうございました(^^)/。

試してみましたが、Athlon上での実行結果↓
(それぞれの関数を1000回実行)

最初のコード>1.047sec
展開したコード>1.015sec
展開+プリフェッチコード>1.094sec

どれも誤差レベルの差しかないようです。

どのようなケースにSIMDが有効なのでしょうか?



832. Re: SIMDの使い方 へるみ  2004/03/28 (日) 18:25
>かけ算部分を省略して、メモリコピーだけにしてもほとんど、差がありませんでした。

こういう場合はSIMDにしても効果を得にくいことが多いです。プリフェッチは...実際に個人的には気休めって気がしますが(^^;

> 何か根本的に、SIMDの使い方が間違っているのでしょうか?

とりあえずレイテンシを隠すためにループ展開は必須です。
movaps xmm0, [edi+eax*4]
movaps xmm1, [edi+eax*4+16]
movaps xmm2, [edi+eax*4+32]
movaps xmm3, [edi+eax*4+48]
mulps xmm0, [esi+eax*4]
mulps xmm1, [esi+eax*4+16]
mulps xmm2, [esi+eax*4+32]
mulps xmm3, [esi+eax*4+48]
movaps [edi+eax*4], xmm0
movaps [edi+eax*4+16], xmm1
movaps [edi+eax*4+32], xmm2
movaps [edi+eax*4+48], xmm3
add eax, 4 * 4

こういうふうに(あるいは更に倍)してどれぐらい速度アップがあったかを調べてから、ループの中で64byte先のデータをprefetchしてみて試すという感じでしょうか。



831. SIMDの使い方 tyn  2004/03/28 (日) 13:05
SIMDの勉強しているうちに、ここにたどり着きましたtynと申します。

自分がC言語で書いているプログラムをIntelのVTUNEで調べてみたところたった1行で時間が消費されているのが分かったので、SIMDで高速化できないかと思い、下のような、SIMDを使った場合と使わない場合のテストプログラムを書いてみたのですが、ほとんど差がありませんでした。

void CalcSIMD(float *dist, float *src, int counter)
{
__asm{
mov eax,0
mov edx,dword ptr [counter]
cmp eax,edx
jge end1
mov edi,dist
mov esi,src
loop1: movaps xmm0,xmmword ptr [edi+eax*4]
movaps xmm1,xmmword ptr [esi+eax*4]
mulps xmm0,xmm1
movaps xmmword ptr [edi+eax*4],xmm0
add eax,4
cmp eax,edx
jl loop1
end1:
}
}

void CalcSISD(float *dist, float *src, int counter)
{
int i;
for(i=0;i<counter;i++)
{
dist[i]*=src[i];
}
}

counterは10万です。実行環境は、Tualatinコアの1.4GHzCeleronとAthlonXP2700+とPentium4 3.06GHz (FSB 533MHz)です。Tualatinでは、少し差が出ましたが、AthlonXP2700+とPentium4 3.06GHzでは誤差レベルしか差がありませんでした。ちなみに、コンパイラは、Intel C++ Complier 8.0で、VC++6.0のリリースモードの標準オプションでコンパイルしています。

どうも、メモリからレジスタへのロードで時間が消費されているようなのでかけ算部分を省略して、メモリコピーだけにしてもほとんど、差がありませんでした。

何か根本的に、SIMDの使い方が間違っているのでしょうか?
プリフェッチをうまく使えば、早くなるのでしょうか?



830. Re: クロック計算? へるみ  2004/03/20 (土) 20:29
> 「これは11clkで動作します」といったものはどうやって算出しているのでしょうか?とくに、FPU周り(SIMD含めて)の命令は単位命令辺りの最低・最大動作クロックに大きく開きがあるものはどうなるのでしょうか?

normal Pentiumの頃はpairingの条件や命令のクロック数が分かりやすかったので理論値と実測値はほぼ一致していましたがP4なんかは内部でどう処理されるかは殆ど分からないので理論値の導出は難しいと思います。
厳密な数値は無理なのでループ回数させて取った実測値なのが多いんじゃないでしょうか。

#SIMDの単純なループなら空いてるunitとスループット/レイテンシからそれなりに精度の高い予測はできますが...



829. クロック計算? ONIgiri  2004/03/18 (木) 17:20
どうも、はじめまして。
最近アセンブラにふれはじめたのですが、巷でよく使われるような
「これは11clkで動作します」といったものはどうやって算出しているのでしょうか?とくに、FPU周り(SIMD含めて)の命令は単位命令辺りの最低・最大動作クロックに大きく開きがあるものはどうなるのでしょうか?



828. Re: やってみました へるみ  2004/03/08 (月) 23:04
> ということでよろしく。
こきつかってやってください(^^;



827. やってみました dsk  2004/03/08 (月) 03:05
私は、Da型で社長指数99%でした。
私を一回り大きくしてくれる人のタイプにDb型が入っていました。
ということでよろしく。



826. Re^2: MMX, SSEの勉強 vafa  2004/03/03 (水) 22:30
お返事どうもありがとうございます。
頑張って勉強していきます。
分からないことがあったら、質問させていただきます。



825. Re: MMX, SSEの勉強 へるみ  2004/03/03 (水) 22:17
私はSIMD命令の勉強はAMD系のCPUの勉強から入りました。
コンパイラやアセンブラがニーモニックに対応してなかった時代なのでマシン語を生成するツールの作成からやってました(^^;
今ならコンパイラも対応してますし、Intelの日本語のマニュアルもありますから「自分が作りたいものをどうやってアセンブリ言語に落としていくか」を考えてするのがよいかと。
言い換えれば情報はすべてあるので後はやる気というところでしょうか。
最近はCマガジンやInterfaceにもアセンブリ言語関連の記事が掲載されることがあるので、それも参考にされるとよいのでは。
#今月号にもあるみたいです>http://www.cqpub.co.jp/interface/

まあ分からないことがあれば聞いてくだされば、私のできる範囲でお答えします。



824. MMX, SSEの勉強 vafa  2004/03/03 (水) 09:14
vafaと申します。
MMX, SSE, SSE2, SSE3等を勉強したいのですが、
どのように勉強していけばよいでしょうか?
本はMMXテクノロジ最適化テクニックのみ持っています。
しかしこの本はMMXについてしか書かれていません。
後は、Intelで公開されているマニュアルも持っています。
へるみさんはどのように勉強されましたか?



823. Re: 教えてください へるみ  2004/02/24 (火) 23:05
> MP3を初めて使うのでエンコードの仕方が分かりません。ファイルをWAVEで予め用意するとはどういう意味でしょうか?
こちらのページで質問していただけますか。
>http://www.marinecat.net/mct_top.htm
その場合、もとのファイルがなんなのか(どうやって作ったファイルなのか)書いていただかないと回答がえられないと思います。
ちなみにXp homeで動かないということはないです。



822. 教えてください 土屋芳昭  2004/02/22 (日) 22:52
MP3を初めて使うのでエンコードの仕方が分かりません。ファイルをWAVEで予め用意するとはどういう意味でしょうか?エンコードのリストにマイミュージックのファイルをのせたいのですがのりません。XP HOMEでは動作しないのですか?教えてください。



821. Re^6: gmpについて sy  2004/02/18 (水) 13:30
>最悪all Cでコンパイルできるようにいじってみては
>いかがでしょうか。お役に立てなくてすいません。
/* Define if we have native implementation of function. */という所を#undefにしましたが、やはり同じエラーが出ました。
色々とありがとうございました。諦めます。



820. Re^5: gmpについて へるみ  2004/02/17 (火) 23:57
> 同じunknown software exceptionとうエラーが出ます。
改めてソースを眺めると殆ど意味なしdefineだったみたいですね。
使えない... NASM対応のときに作者がそれらのオプションをつぶしたのかなあ。最悪all Cでコンパイルできるようにいじってみては
いかがでしょうか。お役に立てなくてすいません。




819. Re^4: gmpについて sy  2004/02/17 (火) 19:20
どうもあがりがとうござました。
>pentiummmxかpentium2にしたらどうなりますか?
同じunknown software exceptionとうエラーが出ます。



818. プロファイラー/犯罪心理分析官 うるり  2004/02/16 (月) 23:11
mapファイルを生成して
prep /OM /FC a.exe
profile a.exe
prep /M a.exe
plist a.exe > a.txt
とか
prep /OM /SF function /FT a.exe
profile a.exe
prep /M a.exe
plist /ST a.exe > a.txt
とかで行けたりするんですかね?
VC++.netになければコマンドだけVC6から引っ張ってくるとか(^^;
それもだめならIntel V-Tune(^^;;



817. Re^3: gmpについて へるみ  2004/02/16 (月) 22:11
cpuidを検索したけど見つかりません。実行時切り替えはしてないんですね。
だとするとAthlon用に変更するのは面倒かも。
config.hの68行目あたりに
#define HAVE_HOST_CPU_pentium3 1
てのがありますがこれをpentiummmxかpentium2にしたらどうなりますか?



816. Re^2: gmpについて sy  2004/02/14 (土) 07:32
お返事ありがとうございました。

>HDDが死んでる(泣)ので調査はしばしお待ちください。

時間があるときで結構ですので、よろしくお願いします。



815. Re: gmpについて へるみ  2004/02/13 (金) 23:51
>これはpentium系のCPUでないと動かないのでしょうか(私はathlonXPを使っています)?
そのページには
I have only converted the blended x86 code and the code for the Intel P3 and P4 processors so if you want something else as a target and need the optimised assembler code you will need to do this conversion yourself.
と書いてあるのでP3/P4でしか動かんようですね。
ただAthlonXpならP3まではいけるはずなのでcpuid判別辺りをいじれば動くのでは。今出張で忙しいのと、うちのAthlonマシンのHDDが死んでる(泣)ので調査はしばしお待ちください。



814. gmpについて sy  2004/02/13 (金) 13:50
gmpを調べていると、ここにきたのですが、
http://fp.gladman.plus.com/computing/gmp4win.htm
の方法を行ってビルドし(かなりwarningが出る)、付属のtestプロジェクトのEXEファイルを実行するとsoftware exceptionというエラーがでます。これはpentium系のCPUでないと動かないのでしょうか(私はathlonXPを使っています)?
時間があればお返事ください。



813. 役不足と言えば dsk  2004/02/13 (金) 00:20
例えばリャンシのときにタンヤオのみでアガろうとすること。
の意味に使うこと私の場合は最も多いような気がするけど......。
(誤用だとは思うが....)
というのはさておき、あまりその言葉使わないよね。自分で使うと
自慢っぽいし、人に使うとその人が高慢そうになるし......。



812. Re^4: だいたいえ へるみ  2004/02/10 (火) 21:44
> 「じゅうふく(重複)」
は小学生のとき既にどちらも教科書に載ってたような。
そういうのは言い出したらきりがないのでほどほどにって気がします。
ただ個人的に許しがたい誤用はマンガで使われる「役不足」。
その性質上(?)たいてい年配のキャラが使うのでかっこ悪い。
唯一正しく使われていたのは『笑う大天使』。さすが川原泉と思ってしまった。



811. Re^3: だいたいえ dsk  2004/02/10 (火) 03:21
> > 広辞苑によれば代替の重箱読みとして
> > 「だいがえ」がありました。
「じゅうふく(重複)」「こしゅう(固執)」なんかも辞書に載っているのですが、皆で間違えて使っていると辞書に載るようになる例でしょうか...それとも由緒正しい読み方なんでしょうか?個人的にはどれも許し難いのですが。



809. Re^2: だいたいえ へるみ  2004/01/21 (水) 21:34
> 広辞苑によれば代替の重箱読みとして
> 「だいがえ」がありました。

本当だ。
やっぱりこまめに辞書を引かないといけないですね。



808. Re: だいたいえ n  2004/01/21 (水) 17:48
広辞苑によれば代替の重箱読みとして
「だいがえ」がありました。

gooの国語辞典でもありますね。
http://dictionary.goo.ne.jp/search.php?MT=%A4%C0%A4%A4%A4%AC%A4%A8&kind=jn

だいがえは実際に聞いたことありますけど、
「だいかえ」というのは聞いたことないですね。




807. Re: NIFTY でベイズフィルタによる迷惑メール対策サービス開始 へるみ  2004/01/15 (木) 20:31
情報ありがとうございます。
全くノーマークでした。私は旧nifty会員なのでちょっと手続きをしないと駄目みたいでね。



806. NIFTY でベイズフィルタによる迷惑メール対策サービス開始 ゆめみ [URL]  2004/01/15 (木) 13:54
http://www.nifty.com/corp/release/20040114.htm
私はとりあえずこのサービスを有効にしてみることにしました。
へるみさんも NIFTY ですよね?



805. だいたいえ dsk  2004/01/15 (木) 02:15
apopパッチ情報thanx.

代替えの検索のトップを見ると「だいたいえ」と読むのであろうか?
と書かれているし、正しいものがtopに来ているだけよしとしよう。
他は真剣に代替えを使っているようだが...

私の経験ではそういう人の前で代替と言いまくれば治ります。



804. Re: APOP手動パッチ へるみ  2004/01/13 (火) 19:54
> って自作?
いえ違います。最初作ろうと思ったけどwebを探したら
http://sourceforge.jp/tracker/index.php?func=detail&aid=3140&group_id=759&atid=2945
があったのでpopfile-0.20.0rc5-apop.patchを0.20.1aにあてて使ってます。
今もう一度探したら
http://www.crosstech.co.jp/al-popfile/apoppatch.html
というページがありました。



803. APOP手動パッチ dsk  2004/01/13 (火) 11:27
って自作?
私はPopFile入れようとしたけど、APOPのpatchがバージョン違いなどで、
全然当てることができずに、導入を見送っていたところでした。



802. Arrowの定理 dsk  2003/12/28 (日) 17:31
確かに「合理的」の定義が実状に比較して厳しすぎるという話もあるが、
それよりも定理中の「独裁者」という用語は少し詐欺っぽい。私のイメージ
では単なる「当選者」だ。社会的に解釈したところで、『「合理的」な決定
方法による決定は、誰かの意見と全く矛盾しない(一致するのとも限らない)、
結果となる』というだけの話で、「民主的」な決定方法とは全く矛盾しない。




801. 電子ピアノ   2003/12/16 (火) 15:40
電子ピアノを衝動買い?^^;;
なんか、すごいですな。今度、聴かせてください。



800. Re: vs. GMP へるみ  2003/11/27 (木) 21:40
> GMPとの比較は、専用下位ルーチンの必要性の証明、にはなりますね。
そうですね。結構差が出ました。
専用ルーチンもまだ接続のためのラッパが挟まってるのでもっとチェーンしてどうなるか調べたいですね。



799. vs. GMP dsk  2003/11/27 (木) 01:16
GMPとの比較は、専用下位ルーチンの必要性の証明、にはなりますね。



797. Re^2: 複号 dsk  2003/10/27 (月) 13:01
> >世の中無知な人だらけなのか、googleが大したことのないツールなのか。
> 逆のパターンでミスってしまったことがある私は何も言えない(^^;
いやいやミスはあると思うけど、ミスらないことの方が多いよね。
現実は、本来の複号について載っているのが10%にもならないという状況な
訳であり、彼等は本当に「複号」の意味を知らないのではないかと推察され
る訳であり、...