カーネルはスレッドごとに54個のレジスタを使用し、占有率は0.33です。これは、デバッグ目的のために、その中にif文があります。私はこのif文をコメントアウトした場合より良い占有率でカーネルの実行時間をどのように増やすことができますか?
if (-1 == val) // val is INT32
{
printf("Invalid value!\n");
}
を、カーネルは、スレッドごとに33個のレジスタを使用し、占有率も0.5に改善されます。しかし、奇妙な部分は、この新しいより希薄なカーネルが実際に実行するために15%多くの時間を要するということです!その他のコードと起動パラメータ(ブロック、スレッド)はすべて定数です。どのようにこのパフォーマンスの低下が起こる可能性が誰に説明できますか?
私はGTX 580でCUDA 4.0を使用しています。コードはCUDAケイパビリティ2.0にコンパイルされています。
まず、カーネルの実行速度が遅くなっていますか?具体的には、どのように時間を測定しましたか?そしてあなたの打ち上げのパラメータは何ですか? – harrism
私は鉱山と港の間を走る列車を知っています。列車は、鉱山から港まで鉱石で満たされているよりも、港から鉱山へと空になった燃料を使用します。それはなぜ疑問に思う?答えは私があなたに話していないものです。この質問はほとんど同じです。答えは、あなたが私たちに言わなかったことにはっきりとあります。あなたがこれまで提供してきた情報よりも多くの情報なしでは、答えが非常に難しいでしょう。 – talonmies
HarrisM:私はCUDAプロファイラからこのカーネルの時間を見ているので、間違っているとは思わない。私は、<<< 512, 256 > >>と100万の要素を持つデータを公開しています。 –