• ベストアンサー

CUDA 実行時間測定

CUDAで計算の実行時間の測定の練習をしています. 計算対象は乱数ではなくある一定の値で総和計算等を行っているのですが,実行時間にかなりばらつきが生じてしまいます. 同じ計算なのである一定の時間にほとんど揃うと考えていましたがそうなりません. このような場合は設定に問題があるのでしょうか? 簡単な計算なので実行時間の平均は0.25msecで,誤差が0.1msec~0.5msecとなってしまっています.

質問者が選んだベストアンサー

  • ベストアンサー
  • ki073
  • ベストアンサー率77% (491/634)
回答No.1

どこの時間を測定しているのか分かりませんが、こちらの結果を載せておきます。 GPUの初期化時間が出ていませんが、およそ1ms強くらいのようです。質問文を参考に似た様な状況と思われるプログラムを作りました。openACCですので、効率はあまり良くないかもしれません。 GPUはGTX 560です。 main NVIDIA devicenum=0 time(us): 948,029 14: compute region reached 1000 times 14: data copyin reached 1000 times device time(us): total=659,572 max=683 min=657 avg=659 15: kernel launched 1000 times grid: [7813] block: [128] device time(us): total=271,641 max=450 min=271 avg=271 elapsed time(us): total=279,826 max=462 min=277 avg=279 15: reduction kernel launched 1000 times grid: [1] block: [256] device time(us): total=16,816 max=40 min=16 avg=16 elapsed time(us): total=23,813 max=203 min=22 avg=23 1000回ループさせて測っています。maxが大きいものもありますが、avgとminがほぼ同じですので誤差はあまりないようです。まれに時間のかかる事もある程度のようです。 計算量が少ないのでもう少し長くして測られてはいかがでしょうか。 結果を見て分かるように、メモリ転送がかなりの時間を占め、ここには出力されていませんが、GPUの初期化がもっとも時間がかかっています。ちなみにこのプログラムはCPUだけで実行した方がかなり速いです。 実際のプログラムは #include <stdio.h> #include <stdlib.h> #define N1 1000000 int main() { float sum, x[N1]; for(int j=0; j<1000; j++){ for(int i=0; i<N1; i++) x[i]=rand()/(float)RAND_MAX; sum=0.0; #pragma acc kernels for(int i=0; i<N1; i++) sum=sum+x[i]; //printf("%f\n", sum); } }

cudacuda
質問者

お礼

丁寧な回答ありがとうございました.とりあえずテストと言うことで要素数を小さくしていました.自分はランダムな数値を使っていないため,最少と平均に20usの差が出ているのがすごく気持ち悪い感じです.もう少し設定やプログラムをいじってみます.また質問を投稿するかもしれません.もし目にとまった時は知恵をお貸しください.よろしくお願いします.ありがとうございました.

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • 測定誤差について

    とても基礎的なことなのですが、よく分からないので質問させていただきます。 長さの測定でも温度の測定でも何でも構わないのですが、 ある2つの値を測定したとしてその誤差を調べたい時はどのような式を使えばよいのでしょうか? 調べたところ(どちらかの測定値)-(平均値)/平均値×100[%]のような式を見つけたのですが2つだけの値を比較して誤差を出すにはこの式で構わないのでしょうか? 他に出し方などがあれば教えていただけるとありがたいです。 よろしくお願いします。

  • 全窒素の測定

    排水サンプルの全窒素濃度を総和法(ケルダール法)にて分析業者にて測定して頂きました。次に同じサンプルを他の分析業者にて紫外線吸光度法にて測定して頂きました。その結果、前者(TN:200)の総和法での値(TN:500弱)が後者の2.5倍ほど高く出たのですが、なぜでしょうか?後者の業者へ同じサンプルを渡すのが、2、3日遅れたことと保管時に途中2、3時間室温程度まで温度まで上がってしまってましたがありました。しかしながら、これらによる影響にしては誤差がありすぎる思うのですが、、、

  • 間接測定による測定誤差

    物理実験で行った実験のデータ処理で誤差を求めています。測定値の平均二乗誤差や確率誤差についてはおおよそ理解できたのですが、間接測定の確率誤差というのがよく分からないのです。 レンズの焦点距離を求める実験ですが、1/a+1/b=1/fという式を変形し、f=ab/(a+b)となります。a,bについての測定を行い、それぞれの平均二乗誤差がσa,σbであった場合、最確値fの確率誤差を求めるにはどのような計算を行えばいいのでしょうか?

  • パソコンの時間のトレーサビリティ-

    パソコンをデータロガとして使用しています。 種々の理由からパソコン自体のタイマーを時間間隔として使用しています。 この時間のトレーサビリティ-を取得したいのですがどのような方法があるでしょうか? 現在、考えている方法としては、電子時計の24時間とパソコンの時刻表示のずれで、 平均誤差を出し、それに、OSが1msecステップなので、平均誤差に±1msecを加味し、 1日の中でのふらつき分や電子時計とパソコンとの比較時間分も何らかの値を加味すれば 良かろうとしております。 より良い方法があれば、ご教授ください。

  • 測定誤差の求め方

    基礎的な内容だと思いますが、是非お力添えいただけたらと思います。 質問 あるサンプルを6回測定しました。 測定値は、0.00050、0.00030、0.00090、0.00070、0.00060、0.00020です。 その再現性(誤差範囲?)を求めています。 平均を求めました。0.00053です 標準偏差を求めました。0.00026です。 そうするとこのサンプルが99.7%の確率(3σ)で、 0.0013~-0.00024の範囲にあるといえますよね。 しかし、この測定の下限は0.000001なのです。 マイナスの値がでるということは、この計算ではいけないのでしょうか? 過去ログ読むと正規分布に従ってないのかなと思いますが、 どのように処理したらよいのかわかりません? 考え方自体おかしいのかもしれません。 ご意見いただければと思います。 よろしくお願いします。

  • データのばらつきを評価する方法についての質問です.

    データのばらつきを評価する方法についての質問です. ばらつきを数値で表すために,分散という値が用いられます.そのためにまず,各データの平均値からのずれの総和を求めます.この時,(データ-平均値)の総和だとゼロになってしまいます.データが平均値よりも小さいと,(データ-平均値)がマイナスになるからです.そこで,(データ-平均値)を2乗することにより,マイナスをプラスに変える,といつも説明されています. ここからが質問です.(データ-平均値)がマイナスになったとき,それをプラスに変えるためならば,2乗しなくても絶対値をとれば良いのではないでしょうか?その後,(データ-平均値)の総和を計算すれば,2乗の総和を求めるより計算が容易ですし,単位も各データの単位と一致します.けれでも,そういう方法が用いられない理由は何なのでしょうか? よろしくお願い致します.

  • H83052 ITUタイマ機能 時間の測定について

    現在h8/3052でITUタイマを利用して1msecごとに割り込みがかかるようにしてそのときにセンサで測定した値をA/D変換させるプログラムを作成しました。モニタプログラムのGDB-STUBをROM領域に書き込んでおりますので、GDBで実際にデバッグを行ってみました。 その結果、毎回の割り込みごとのA/D変換終了時のタイマカウントの値をその時の時間としてみているのですが、その時間間隔が正確に1msecではなく、タイマのカウントが最大で3クロック分くらいずれが生じてしまう結果になってしまいました。 タイマカウンタには、誤差は全くないと思いますので、他の原因として考えられるのはプログラムの部分でしょうか?A/D変換の変換開始のタイミングや、終了待ちの関係でしょうか。 その誤差の部分についてわかることがありましたら、ご回答よろしくお願いします。 必要であれば、プログラム内容も載せたほうがよろしいでしょうか。

  • ゼロ付近の値の扱い(平均、統計学)

    ある測定を3回行い、その値の平均を求めるとします。 このときに、非常にわずかな量を測定するため、ゼロ、もしくはマイナスの値が得られることもあります。 このマイナスは平均に含めるべきでしょうか? ある人に相談したところ、「存在量がマイナスは存在し得ない」という主張で、マイナスは平均に含めるべきではない といわれましたが、測定誤差としてマイナスの値がありうる場合には平均に含めるべきだと思うのですが。 たとえば、一回の測定で測定による真の測定値からのばらつきが±0.1mgあるとすると、-0.05mgという測定結果は「ありうる値」だと思うのです。つまり平均に含めるべきだと思うのです。 (これが測定のばらつきを超えた0.2mgといった値なら、この値は捨てますが。) そうでなければ、含有量がゼロのものを100回測定したときに、マイナスの値をすべて捨ててしまうと、その平均はおそらく+0.05mg(細かい値は抜きにして、ゼロでないプラスの値という意味です)になり、マイナスを含めれば0.00mgになると考えられます。 「ありうるマイナスの値は平均に含めるべきである」 という結論に対してコメントをお願いします。 (ありうる、ありえないの境がどこかの議論は今回は省略させてください。)

  • 測定値の誤差範囲

    過去の質問等を捜してみたのですが、うまく見つけられなかったため質問させていただきます。 HPLCで絶対検量線法を使って未知成分の分析を行いました。 濃度を横軸、ピーク面積を縦軸としてエクセルを使用して検量線を求めたところ、y=20000x-600, R2(相関係数の2乗)が0.9995となりました。 未知試料はn=3で行い、検量線から求めた未知試料濃度が、1.328、1.319、1.335となり、それらを平均して結果をだしたのですが、測定値の誤差範囲がどのくらいあるのかというのを聞かれ困っています。 測定結果±○○という感じで知りたいみたいなのですが、単純に求めた未知試料の濃度の平均と標準偏差ではいけないような気がします。   ↑ 検量線のばらつきは考慮されていませんよね? 検量線のばらつきを考えて測定値の誤差範囲を決定するというようなことはできるのでしょうか? 理解不足、言葉の使い方等おかしな部分もあるかと思うのですが、よろしくお願いいたします。

  • 測定したデータを元に目的に合った計算方法

    ほかのところで質問をしたのですが内容が変わったので改めて質問します。 測定したデータを元に目的に合った計算方法を求めたいのですが、例えば、測定したデータは以下の通りです。 データ数:60 最高値:39.00 最低値:11.00 平均値:22.56 最頻値:24.25 標準偏差:5.261 目的は、 ・全体的なデータの数値を向上させたい(高めたい) ・ばらつきをなるべく少なくしたい(平均値が高くてもばらつきが大きいとあまり意味がない) ・次回、測定する目標値あるいは予測値を決めたい です。 ここでの測定するデータというのは、一回一回測定する条件によって変わります(主に時間帯、環境など)。 専門的にならずに、このような計算方法はあるでしょうか?解説を付けていただけるとありがたいです。 回答よろしくお願いします。