CUDAには、エミュレーションモードでコードをコンパイルするオプションがあります。これは、提供される.rulesファイルでサポートされています。
DllImportを使用してネイティブdllを呼び出すC#.NET 3.5 SP1コードがあります。ネイティブdllはnvccを使用してVS2008経由でコンパイルされ、その機能はCUDAとの間でメモリを転送し、CUDAカーネルを呼び出すことです。
CUDAカーネルが正しい場合、すべてが正常に実行されますが、バグがある場合は、カーネルのタイトルまでコードにステップインして、カーネルが受け取るパラメーターを確認することしかできません。(startup-projectのデバッグオプションでネイティブコードのデバッグを有効にしました。)
エミュレーションモードでコンパイルしようとしましたが、CUDA memcopy host-> deviceを呼び出すと、CUDAエラー「mixeddeviceexecution」が発生します。alloc + dealloc + memcopyを同等の非CUDAバージョンに切り替えてみましたが、カーネルを呼び出すときに同じエラーが発生します。
デバッグエミュレーションモードを使用しようとしたときに何を間違えましたか?
PS私はこれをVistax64SP1 + VS2008で試しましたが、同じソリューションがx86とx64の両方に準拠しており、どちらもエミュレーションモードでは機能せず、どちらも非エミュレーションモードで機能しました。