2010-10-13

いまだに変な宗教が流行っている

プログラミング :: 高速なプログラムを書く為に :: 初めに

ランタイムとして DLL を使用しない様にしましょう。DLL の設定にすると、 例えば cos や sin 関数を呼び出すのに dll を使用する (本来 CPU の命令 fcos を一回実行するだけの筈) など、 御馬鹿な事になるからです。数値計算に於いて、頻繁に呼び出す基本関数が dynamic link になっているというのは最悪です。

MSVCでスタティックリンクのマルチスレッドのランタイムライブラリを使ってはならない。リソースリークが完全に防げないからだ。DLL版は、DllMainでDLL_THREAD_DETACHを補足することによって、CRTに必要なリソースを開放しているので、リークは起こらない。

そもそも、DLLを使用しない理由というのが、cosやsinというのは、馬鹿げている。/Oiも知らないのだろうか。

/Oi (Generate Intrinsic Functions)

8 comments:

Anonymous said...

何から何まで知っている人の方が少ないわけでして。
リソースリークの件、詳しく解説していただけるとありがたいです。

Anonymous said...

http://d.hatena.ne.jp/NyaRuRu/20060129/p1
Windows 2000が滅びて、有用なカーネル関数がようやく多数解禁された。
Windows XPも早く滅びればいいのに。

Anonymous said...

これは二回ジャンプを行う(キリッ
__declspec(dllimport)の効果も知らないんだなぁ

江添亮 said...

XPは速やかに滅びるべきですね。

Kageyu said...

組み込み関数がどのようにコードに埋め込まれるかなんて、.codファイルを出力して確認すればわかることなんですけどね。関数呼び出しのオーバーヘッドまで気にするレベルで最適化を行うなら、実際に出力されるコードを確認しなければ意味がありませんし。
もっとも、IATの使われ方が理解できていないようですから、x86のアセンブリ言語は読めないんでしょうけど。

Anonymous said...

せっかくSSEに言及しているんだから、今時FPU命令なんか使うよりSSEを使った関数を埋め込んだ方が速いってことにも気付いて欲しいですね。コンパイラが勝手にやってくれますけど。

江添亮 said...

そういえば、x64ではFPUはお役御免でしたね

Anonymous said...

……元の記事を書いた者です。
今更ですが、間違いを指摘されているのに、
七ヶ月も気付かないで放置していました。
(コメントの中にある物も含めて) 御指摘ありがとうございます。

(ああ、物凄く恥ずかしい)