- 1 名前:デフォルトの名無しさん mailto:sage [2005/10/27(木) 02:55:36 ]
- C++やインラインアセンブラ、SSEなどによる高速化の手法
について語りましょう。
- 231 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 09:36:53 ]
- 4バイトならbswapで一発なんだが
- 232 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 10:05:56 ]
- 言葉足らずですみません。xmmでの処理途中なんです。
- 233 名前:デフォルトの名無しさん mailto:sage [2009/04/14(火) 13:25:24 ]
- psrlw psllw por
または pshufb あたりじゃね? >>231 エンディアン変換命令使ってどうするw
- 234 名前:デフォルトの名無しさん mailto:sage [2009/04/15(水) 23:05:41 ]
- >>233
なるほど、前者はSSE2までのマスク+シフト+orですね。 後者はSSSE3ってことはCore2Duo以降ですか・・・ CoreDuo以前を切り捨てれば楽だけど・・・ん〜。
- 235 名前:,,・´∀`・,,)っ-@{}@{}@{}- mailto:sage [2009/04/16(木) 08:01:14 ]
- 2通りの関数書いてCPUIDで振り分けるのはどう?
SSSE3でも128ビット版は65nm版Core2やAtomは速くないよ。 ちなみにSSE5なら protw xmm0,xmm0,8 で1命令ですな
- 236 名前:デフォルトの名無しさん mailto:sage [2009/04/16(木) 14:44:26 ]
- >>235
>2通りの関数書いてCPUIDで振り分けるのはどう? これでやってみます。サンクスでした。
- 237 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 11:46:24 ]
- お前ら、ちょっと頼みがあるんだが。
SSEでどの程度高速化できるか、ちょっくら試しにコードを書いてみたんだが全然速くねぇ。 コードの書き方が悪いのか、俺のPCのCPUがAthlonなのが悪いのか、アドバイスおくれ。 ソースはコレ↓ uproda11.2ch-library.com/11172112.zip.shtml 題材はビットカウントで、コンパイラは GNU C++。 よろしくおながいします。
- 238 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 11:47:42 ]
- あ、言い忘れたけどDLキーはデフォルトの1です。
- 239 名前:237=238 mailto:sage [2009/04/18(土) 11:50:15 ]
- ちなみに家のPCでの実行結果はこんな感じ
init data func = reference : test=OK : clock = 15063 : sum = 504854834 func = bit32 : test=OK : clock = 6812 : sum = 504854834 func = bit64 : test=OK : clock = 5219 : sum = 504854834 func = sse : test=OK : clock = 5109 : sum = 504854834
- 240 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 12:06:54 ]
- すまん、データの初期化でバグがあった。
直したんで、こっち↓を見てくれ。 uproda11.2ch-library.com/11172113.zip.shtml
- 241 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 12:36:15 ]
- 生のアセンブラで書けよ!インラインってw
実行せずとも分かる事を述べよう。 ソースを16バイトアライメントに合わせている? ソフトウェアパイプライン化が行われていない。(これをやっていないとSSEの意味がない。) そもそも速度計測しているコードが小さい。 SSE4.2だと1命令でなかった?
- 242 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 13:17:12 ]
- >>235
CPUIDで振り分けてもSSE5じゃ使えるCPUが現状ないジャマイカw SSEPlusでエミュレーションするとSSE2の実装で9.3サイクルかかるな。 これ分岐いらんだろjk ttp://sseplus.sourceforge.net/group__emulated___s_s_e2.html#g80be0eae1c514715a253654cdc4280db
- 243 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 20:12:39 ]
- 勉強し始めです。
リトルエンディアンとxmmで混乱してしまったので教えてください。 実アドレス上、以下の順で並んでいたアドレス上のデータは、 0 1 2 ... D E F xmmレジスタにロードすると F E D ... 2 1 0 の順で取り込まれるのですよね? _mm_srli_si128()で1バイト右シフト(256で割る)するとレジスタ上は 0 F E ... 3 2 1 となり、これをメモリにストアすると 1 2 3 ... E F 0 という順でストアされる ということは、 xmmで右シフトした状態というのは、 メモリ上では(上記表現では)左シフトした状態に相当 これ、認識あっていますでしょうか。
- 244 名前:デフォルトの名無しさん mailto:sage [2009/04/18(土) 21:25:00 ]
- デバッガで見えるレジスタの状態は右が下位だよっと
糞長い128bit変数だと思えばいいよ
- 245 名前:,,・´∀`・,,)っ-○◎○ mailto:sage [2009/04/19(日) 01:13:42 ]
- >>240
inline __m128i population_count_sse_iter(__m128i *v) { __m128i tmp0,tmp1,tmp2,mask; tmp0=_mm_load_si128(v); mask=_mm_set1_epi32(0x55555555); tmp1=_mm_and_si128(tmp0,mask); tmp2=_mm_srai_epi32(tmp0,1); tmp2=_mm_and_si128(tmp2,mask); tmp0=_mm_add_epi32(tmp1,tmp2); mask=_mm_set1_epi32(0x33333333); tmp1=_mm_and_si128(tmp0,mask); tmp2=_mm_srai_epi32(tmp0,2); tmp2=_mm_and_si128(tmp2,mask); tmp0=_mm_add_epi32(tmp1,tmp2); mask=_mm_set1_epi32(0x0f0f0f0f); tmp1=_mm_and_si128(tmp0,mask); tmp2=_mm_srai_epi32(tmp0,4); tmp2=_mm_and_si128(tmp2,mask); tmp0=_mm_add_epi32(tmp1,tmp2); mask = _mm_setzero_si128(); tmp0 = _mm_sad_epu8(tmp0, mask); return tmp0; }
- 246 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/04/19(日) 01:17:51 ]
- 【続き】
virtual int population_count(unsigned int data[4]) { __m128i sum = population_count_sse_iter((__m128i *)data); return _mm_extract_epi16(sum, 4) + _mm_cvtsi128_si32(sum); } virtual int population_count_array(unsigned int data[][4],int size) { __m128i sum = _mm_setzero_si128(); for(int i=0;i<size;i++) { sum = _mm_add_epi32(sum, population_count_sse_iter((__m128i*)data[i])); } return _mm_cvtsi128_si32(sum) + _mm_cvtsi128_si32(_mm_srli_si128(sum, 4)); } んで、うちの環境ではこんな感じになった(Core 2 Duo E8500, Cygwin) func = reference : test=OK : clock = 8890 : sum = 504854834 func = bit32 : test=OK : clock = 4859 : sum = 504854834 func = bit64 : test=OK : clock = 12829 : sum = 504854834 func = sse : test=OK : clock = 2156 : sum = 504854834 func = dango-sse : test=OK : clock = 1281 : sum = 504854834 func = dango-ssse3 : test=OK : clock = 1093 : sum = 504854834 64bitが遅いのは32ビットとしてビルドしてるからだと思うが、それはさておき SSSE3を使う方法は、Penryn/Nehalemでは速いけど AtomとかCore 2 65nm系は使えてもSSE2のより遅い。
- 247 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/04/19(日) 01:18:54 ]
- virtual int population_count_array(unsigned int data[][4],int size)
{ __m128i sum = _mm_setzero_si128(); for(int i=0;i<size;i++) { sum = _mm_add_epi32(sum, population_count_sse_iter((__m128i*)data[i])); } return _mm_cvtsi128_si32(sum) + _mm_cvtsi128_si32(_mm_srli_si128(sum, 4)); } 訂正してくだしあ><
- 248 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/04/19(日) 01:20:10 ]
- 【これが正解】
virtual int population_count_array(unsigned int data[][4],int size) { __m128i sum = _mm_setzero_si128(); for(int i=0;i<size;i++) { sum = _mm_add_epi32(sum, population_count_sse_iter((__m128i*)data[i])); } return _mm_cvtsi128_si32(sum) + _mm_cvtsi128_si32(_mm_srli_si128(sum, 8)); }
- 249 名前:240 mailto:sage [2009/04/19(日) 06:24:28 ]
- >>,,・´∀`・,,)っ-○○○
うちのAthlonの環境でも>>246のdango-sseの結果と大体同じくらいの性能うpが確認できました。 しかし、こんなに差がつくとはSSE侮りがたし。 団子さん、多謝です!
- 250 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 20:53:10 ]
- VC++ と gcc (言語は C++)のインラインアセンブラで
SSE の16バイトアラインメントされていることを仮定した命令を使いたいのですが、 float の配列変数全体を16バイト境界にアラインさせることって可能ですか?
- 251 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 21:04:42 ]
- >>250
__declspec(align(16))と__attribute__((aligned(16))) マクロなりなんなりで切り替えればいい
- 252 名前:デフォルトの名無しさん mailto:sage [2009/04/25(土) 21:27:17 ]
- >>251
即レスありがとうございます!
- 253 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/04/26(日) 01:00:01 ]
- __m128(あるいはその配列)との共用体にすれば勝手に合うけどね。
- 254 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 01:02:51 ]
- gcc で使えるの?
- 255 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 02:32:21 ]
- gcc で使えるの?
- 256 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 09:52:02 ]
- 大事な事なので2回聞きました
- 257 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 15:03:36 ]
- #include <xmmintrin.h>
- 258 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/04/26(日) 15:14:47 ]
- あとコンパイルオプションにフラグつけとけ
-msse とか
- 259 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 15:23:18 ]
- そしてautotools地獄へ…
- 260 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/04/26(日) 15:50:01 ]
- ああ、あのへんマジで何とかして欲しい。
Win32ではASMで書いた関数の頭にアンスコ付けないと認識しなかったりとか
- 261 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 18:46:23 ]
- 頭に…アンスコ…?
- 262 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 18:53:03 ]
- アンダースコート被るんだよ
- 263 名前: ◆0uxK91AxII mailto:sage [2009/04/26(日) 19:14:57 ]
- underscore、呼出規約云々のアレ。
- 264 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/04/26(日) 21:11:39 ]
- こやつらには5Fhって言った方がわかりやすいかもしれんな
- 265 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 21:44:35 ]
- プログラマのくせに、「あんすこ」が通じないのはおかしい。
- 266 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 21:46:17 ]
- 職業プログラマだけじゃないだろ
趣味でやるやつもいる
- 267 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 22:06:11 ]
- 趣味グラマだけど理解してるよ
- 268 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 22:58:53 ]
- アンダーバーとか言う奴は素人
- 269 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 14:56:39 ]
- ひゃっひゃっひゃっひゃっ
- 270 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 16:21:42 ]
- なさけなや
- 271 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 17:08:11 ]
- アンダーバー。
- 272 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 21:18:18 ]
- 今のVCのコンパイラは、インラインアセンブラを書くと、そのインラインアセンブラを含む関数が最適化がされないらしいけど、
xmmintrin.hなどは、使うと最適化されなくなる?
- 273 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 21:26:48 ]
- うん
- 274 名前:デフォルトの名無しさん [2009/05/01(金) 21:45:13 ]
- インラインアセンブラだけインライン関数で分離すればいいじゃまいか
- 275 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 21:46:51 ]
- インライン展開されたら最適化抑制も伝播したりして。
- 276 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 22:26:45 ]
- >>273
いやいや、組込関数ならインラインアセンブラと違って最適化できるという触れ込みではなかったっけ?
- 277 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 22:33:02 ]
- sse使って、まだコンパイラが入り込むある余地があるのか?
- 278 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 22:37:15 ]
- xmmintrin.hなどの場合はxmmレジスタへの割付が最適化まかせなので、
最適化をしないと、1命令ごとにメモリとデータをやり取りするので非常に遅くなる。
- 279 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 22:41:37 ]
- __m128iってクラスはレジスタ的なもので局所変数にしか使えないかと思ってたんだが、
実はvector<__m128i> みたいな使い方もありなの?
- 280 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 22:45:35 ]
- typedef union __declspec(intrin_type) _CRT_ALIGN(16) __m128 {
float m128_f32[4]; unsigned __int64 m128_u64[2]; __int8 m128_i8[16]; : 略 } __m128; てな感じで普通にメモリ上にとられるよ。最適化でレジスタに置きっぱなしになる。
- 281 名前:279 mailto:sage [2009/05/01(金) 22:54:29 ]
- そうなのか。ありがとう。
- 282 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 23:33:29 ]
- 組み込み関数の最適化は
lstファイルでも出力して見てみるといいよ。 一応されるようだよ。
- 283 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/01(金) 23:35:01 ]
- GCCはpshufb周りのコード生成が酷い。
- 284 名前:デフォルトの名無しさん [2009/05/01(金) 23:36:16 ]
- まあgccはコードジェネレーター部がx86決め打ちじゃなくて汎用だからな
- 285 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/01(金) 23:48:38 ]
- _mm_set1_epi8()相当のことやろうとしたんだけどさ
_mm_shuffle_epi8(_mm_cvtsi32_si128((int)c), _mm_setzero_si128()); ってやるじゃん。Intel先生は当然のごとくこういう風に生成するだろ。 pxor xmm0, xmm0 movd xmm1, DWORD PTR [esp+4] pshufb xmm1, xmm0 3行で済むことを6行もかける馬鹿コンパイラ pxor xmm0, xmm0 movd xmm1, DWORD PTR [esp+4] movss xmm0, xmm1 pxor xmm1, xmm1 pshufb xmm0, xmm1 movdqa xmm1, xmm0 飽くまでカンだけど、pshufbの引数の順番間違えてて、応急処置的に直したんじゃないかと思うんだ
- 286 名前:デフォルトの名無しさん mailto:sage [2009/05/02(土) 01:55:20 ]
- そういうときはgccのソース読むのが基本だろ。
- 287 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/04(月) 14:47:39 ]
- insn-attrtab.cが酷いな。SSSE3以降の命令の扱いがテキトーすぐる。
- 288 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/04(月) 17:26:36 ]
- >>279
処理系によっては自作アロケータで128ビットアラインされた領域に確保するようにしないと酷いことになるかもしれません。
- 289 名前:デフォルトの名無しさん [2009/05/04(月) 21:03:31 ]
- GCCはGPLなんだから文句ばっかり行ってないでお前らも
プロジェクトに参加して改良しろよ
- 290 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/04(月) 21:09:55 ]
- それは本末転倒。アセンブラよりも作業効率を期待してCコンパイラで生成できないか試みてるのに
いっそう手間かけてどうすんだと。別にGCCである必要ないんだよ。 っていうかオープンソース界隈は今頃AMD SSE5がキャンセルで大荒れだと思う。
- 291 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 21:36:28 ]
- まあ、正論だな
- 292 名前:デフォルトの名無しさん [2009/05/04(月) 22:21:05 ]
- ダンゴさんの正論でスレがピリッと引き締まったな。
- 293 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 22:51:03 ]
- キャンセルって何の事って調べたら・・・
俺的にはAVX一本のほうが楽でいいな。AMDは正しい判断をしたと思う。 当初の予定はSSSE3もSSE4もサポートせずに、SSE5追加だけだったよね?
- 294 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/04(月) 22:54:08 ]
- いや、元々SSSE3はSSE5と一緒に追加、SSE4.1/4.2は順次対応する予定だったと思う
- 295 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 21:04:42 ]
- Intel様、3Dゲームとか画像とか動画エンコとか特殊な用途向けよりもっと一般人が
恩恵をうけれるような命令を追加して下さい。といいつつ、マイナーな事言いますが、 IEEE754Rで改訂された10進浮動小数点の命令を追加して下さい。
- 296 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/05(火) 21:10:40 ]
- 一般用途とかけ離れてるだろ10進浮動小数なんて
金融演算でもやるのか?
- 297 名前:デフォルトの名無しさん mailto:sage [2009/05/05(火) 21:38:01 ]
- >>296
そうです、金融がらみとかです。
- 298 名前:デフォルトの名無しさん mailto:sage [2009/05/06(水) 20:28:58 ]
- >>290-292
一度実装すれば以後恩恵を受けられるわけだし、そもそもサポート契約してないなら、正論とは言えないだろう。
- 299 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/07(木) 01:20:09 ]
- 本来そういうのはハードベンダーが技術協力名目でやるものだろう
- 300 名前:デフォルトの名無しさん mailto:sage [2009/05/07(木) 01:49:26 ]
- インテル様はインテル・コンパイラを買えと仰っているからなぁ。
gccのauthorに-○○○@2ch.netとでも付け加えた方が トータルで安く上がるだろ。
- 301 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/07(木) 02:06:08 ]
- Intelコンパイラもたいがいだよ。
_mm_set1_epi8()はCore 2以降でなら>>285の実装のほうが速いのに -QxSSE4.1とか加えても使ってくれないのはどうしたものかね _mm_set1_epi1(0)を pxor (_mm_setzero_si128()相当)に置き換えるのはさすがにやってくる
- 302 名前:デフォルトの名無しさん [2009/05/08(金) 06:17:11 ]
- メディアンフィルタの高速なアルゴリズムを教えてください。
複数のピクセルから中央値を選べばいいだけなのですが、 ifステートメントを避けて並列化する方法はないでしょうか?
- 303 名前:デフォルトの名無しさん mailto:sage [2009/05/08(金) 07:32:50 ]
- それを考えるのが面白いところなのに・・・
- 304 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/08(金) 20:51:11 ]
- www.j-tokkyo.com/2003/G06F/JP2003-177912.shtml
特許申請されてるお
- 305 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/08(金) 21:27:34 ]
- ちなみに言うと8要素のソートして真ん中の値をとればいいだけ。
pmaxub/pminubを使うことで大小入れ替えができる ちょっと考えてみたが愚直な並列バブルソートでpmaxub/pminubを合計40回程度かな? それでも1要素あたりにすると2.5回の比較で済む。 まあ、ベクトルのセットアップがちょっとばかし大変だが。
- 306 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 00:07:29 ]
- 8?
- 307 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/10(日) 00:25:33 ]
- 自身含めて9か。
すまん素で間違えた 3.5命令・・・うーん
- 308 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 11:17:30 ]
- ダンゴさん何者なんだw CPUに詳しいな。
- 309 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 12:49:10 ]
- ダンゴさんへの賞賛でスレがヒートアップしたな
- 310 名前:デフォルトの名無しさん [2009/05/10(日) 16:54:52 ]
- AGIストールとかパイプリングストールとか意味がわかりまセンチ
- 311 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/11(月) 21:36:15 ]
- だんごー
だんごー
- 312 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 21:54:38 ]
- だんごー
だんごー だんごー大家z(ry だんごさんって鳥の方の人かしら。 もしそうだとすると、数年前に某荒板でCPUのこととかお話した元コテですがお久しぶりです(´・ω・`)ノ 人違いだったらごみんなさい。
- 313 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/05/11(月) 21:58:28 ]
- 島は鳥の左側です。
- 314 名前:デフォルトの名無しさん mailto:sage [2009/05/11(月) 22:15:09 ]
- レフトシフト
- 315 名前:デフォルトの名無しさん mailto:sage [2009/05/12(火) 12:56:48 ]
- おまえらだんごさんがいるうちにいっぱいためになる話聞いておけよ。
- 316 名前: ◆0uxK91AxII mailto:sage [2009/05/12(火) 20:00:05 ]
- いっぱいだめになる話?
- 317 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 00:34:33 ]
- itoaを高速に書く場合
どうやってかけばいいのですか? val % 10なんかで基数割してると 遅くてダメポなんですが.......
- 318 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 01:17:42 ]
- 除算が遅いなら0.1を乗算すりゃいいじゃない
- 319 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 07:47:59 ]
- 100でやれば除算回数が半分になる
- 320 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 10:41:55 ]
- テーブル引け
- 321 名前:デフォルトの名無しさん mailto:sage [2009/07/15(水) 21:23:00 ]
- ,,・´∀`・,,)っ-○○○先生
おられませんかー?
- 322 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 00:33:39 ]
- >>317
一体何桁の数字を変換したいんだ? 速くしたけりゃベクトル化すればいいだろ。
- 323 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 00:41:13 ]
- >>322
10桁っす
- 324 名前:デフォルトの名無しさん mailto:sage [2009/07/16(木) 23:15:35 ]
- fbstpとか
10桁は遅いか
- 325 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 01:49:04 ]
- いっそ数値の方をBCDにしちまえ
ついでにCPUを6502にだな
- 326 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 02:15:08 ]
- 10桁の数字を何回処理してどの程度時間がかかり、
どれだけ高速化したいのか位は言えよ。
- 327 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 18:37:21 ]
- fildしてfbstpするのが速そうではあるね
- 328 名前: ◆0uxK91AxII mailto:sage [2009/07/18(土) 21:15:36 ]
- 基数は可変...っと。
ふつーitoaの高速化は無意味。
- 329 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 21:35:05 ]
- > 基数は可変...っと。
それitoaじゃねー。
- 330 名前:,,・´∀`・,,)っ-○○○ mailto:sage [2009/07/31(金) 20:55:39 ]
- x86のAAMとかAADの基数って変えられたよな?
Opcodeがないからマシンコード直打ちになるけど
- 331 名前:デフォルトの名無しさん [2009/08/27(木) 19:59:33 ]
- if (a>=b) a = 0;
これから条件分岐を取り除くにはどうすれば良いですか
|

|