0

次のコードを使用して、C++coceで時間を計算しています

SYSTEMTIME sm;
FILETIME fm;

GetSystemTime(&sm);
SystemTimeToFileTime(&sm,&fm);

*time =  (double)(fm.dwLowDateTime / 10000000.0);

ここで、CUDAバージョンを実装しているときに、この関数がCUDAカーネル関数の間に呼び出されるのと同時に計算したいと思います。私がそれをどのように行うことができるかについてのアイデアや助け。私はcudaプログラミングにかなり慣れていないので、その多くを知りません。__device__また、私が試した関数でnew演算子を使用する方法を誰かに教えてもらえますか

maxY = new int[m_imgWidth*m_imgHeight]; 

cudaMalloc((void **)&m_labelBuf , m_imgWidth*m_imgHeight);

しかし、それは私にエラーを与えています

 calling a __host__ function("cudaMalloc") from a __global__ function("kernel_Labeling") is not allowed
4

1 に答える 1

1

レジスタ(スレッドごとのプライベート)と共有メモリ(ブロックごとのプライベート)を介して、動的または疑似動的なメモリ割り当てを少し行うことができますが、それはあなたがやろうとしていることのようには見えません。

デバイス側のコードからヒープにメモリを割り当てるには、C ++のnew演算子を使用するか、デバイス側のmallocを使用できます。これは、Fermi以降のGPUでのみ機能します。

cudaEvent APIを使用することは、cudaコードのタイミングをとる最も問題のない方法です。

編集: 私はロバートクロベラのコメントをこの答えにマージしました。彼が回答としてコメントを投稿した場合は、これではなく彼に投票してください。

于 2012-12-31T04:02:25.930 に答える