// Это твой код (оригинал)" { \r\n"" int i = get_global_id(0); \r\n"" for(int u=0;u<100000000;u++) \r\n"" { \r\n"" out[i]+=u; \r\n"" if(out[i]>10000) \r\n"" out[i]=0; \r\n"// после десятитысячного шага итерации этот оператор начнёт выполняться в каждом цикле." } \r\n"// т.е. на выходе из цикла по любому будем иметь out[i] = 0;" out[i]+= i; \r\n"// ecли к нулю прибавить номер мухи то получится... сам посчитай..... на калькуляторе... :)" } \r\n";// есть ещё вариант, надёжнее - распечатай результаты и сравни. ;-)))
そうみたいですね。
私はトリッキーな構文(目で見て判断しにくい)を使わないようにしているのでよくわかりませんが、おそらくコードを高速化できるため、使わない方がよいのでしょう。
ループの繰り返しごとに変数bが再宣言されるため、コードの処理速度が遅くなるはずです。
いや、まあ......それはフェアじゃないな。あなたはAndreiのコードを処理 し、高速化する。
私は何をしたのだろう?
オプティマイザーに求められることとは?オーバーヘッドを削減しつつ、同等の結果を実現!だから、チェックしてみてください。すべて足すと1円にもなるんです。
:)
// ところで !このコードでは、#define BUF_SIZE 1024*1024*4 でもドライバが落ちません !!!
// これは画期的なことです。
;))))
私が何をしたのか?
オプティマイザーに求められることとは?オーバーヘッドを削減しつつ、同等の結果を実現!だから、チェックしてみてください。すべて足すと1円にもなるんです。
:)
サイズが合うか、どのように確認しましたか?:O
なんと、なんと!電卓で!8個を並列に走らせて確認しました。
電卓がウソをついている:)
サイクルは0+1+2+3+...+9999999を追加します。そして、10000ステップごとに値が0になる。
何をしたんですか?- フライナンバーを割り当てて、それで終わり。どうして私の結果があなたと同じになるのですか?
ちょっと調べてみて疑ったのが、この
つまり、get_global_id()は関数ではなく、超高速レジスタ操作である可能性が高いということです。
本当に必要な人、欲しい人がいたら、その結果をスタジオに報告してください。 きっと役に立ちます。オプティマイザーに求められることとは?オーバーヘッドを削減しつつ、同等の結果を実現!だから、チェックしてみてください。すべて足すと1円にもなるんです。
// ところで !このコードでは、#define BUF_SIZE 1024*1024*4 でもドライバが落ちません !!!
逆に--ドライバーが落とさなければ、結果的に等価はもう不完全な んです。
くそ...なんとも残念なことです :(
なーんだ、タバコの吸い方が悪かったんだね。
1^3 + 2^3 + 3^3 + ...+ 1000000000^3 = 1000000000^2 * (1000000000 + 1)^2 / 4
左翼と右翼は同じもの、完全同値。
左の表現では、かなり長い時間石を加熱することになりますが、右の表現では、ほとんど瞬時に加熱され、プロセッサは気づかず、冷たいままです。
追伸:OpenCL 1.2にアップグレードしました(ベータ版です)。バージョン番号の後に小さく「sse2」が追加されていることにご注目ください。
劇的に良くなったというわけではありませんが、いくつかのテストではスピードアップしています。例えば、Tast_Mand_で(まあ、変態ですね、アンドリューハ)-5%から10%。ほんの少しですが、良いですね。
電卓がウソをついている:)
ループは0+1+2+3+...+9999999を追加します。そして、10000ステップごとに値が0になる。
何をしたんですか?- フライナンバーを割り当てて、それで終わり。では、どうして私の結果があなたと同じになるのでしょうか?
正気に なるのに24時間掛かったが まだ こだわるのか?:)
見てみよう。