ハードウェアなしのCUDAプログラミング用GPUエミュレーター[終了]


111

質問:実際のハードウェアがなくてもCUDAをプログラムおよびテストできるGeforceカードのエミュレーターはありますか?


情報:

私はCUDAで私のシミュレーションをいくつか高速化しようと思っていますが、私の問題は、この開発を行うために常にデスクトップの周りにいるわけではないということです。代わりにネットブックで作業したいのですが、ネットブックにGPUがありません。私が知る限り、CUDAを実行するにはCUDA対応のGPUが必要です。これを回避する方法はありますか?唯一の方法はGPUエミュレーターであるように思われます(明らかに低速ですが、動作します)。しかし、これを実行する方法が何であれ、聞きたいと思います。

Ubuntu 10.04 LTSでプログラミングしています。


回答:


39

2016年(さらには2017年)に答えを求めている人のために...


免責事項

  • 結局、GPUのエミュレーションに失敗しました。
  • gpuocelot依存関係のリストを満たしている場合は、使用できる可能性があります。

BunsenLabs(Linux 3.16.0-4-686-pae#1 SMP Debian 3.16.7-ckt20-1 + deb8u4(2016-02-29)i686 GNU / Linux)のエミュレーターを入手しようとしました。

私が学んだことをお話しします。


  1. nvcc-deviceemuCUDA Toolkit 3.0でオプションを戻すために使用されていました

    CUDA Toolkit 3.0をダウンロードしてインストールし、簡単なプログラムを実行しようとしました。

    #include <stdio.h>
    
    __global__ void helloWorld() {
        printf("Hello world! I am %d (Warp %d) from %d.\n",
            threadIdx.x, threadIdx.x / warpSize, blockIdx.x);
    }
    
    int main() {
        int blocks, threads;
        scanf("%d%d", &blocks, &threads);
        helloWorld<<<blocks, threads>>>();
        cudaDeviceSynchronize();
        return 0;
    }

    CUDAツールキット3.0がいることを注意nvccしていました/usr/local/cuda/bin/

    それをコンパイルするのが難しいことがわかりました:

    NOTE: device emulation mode is deprecated in this release
          and will be removed in a future release.
    
    /usr/include/i386-linux-gnu/bits/byteswap.h(47): error: identifier "__builtin_bswap32" is undefined
    
    /usr/include/i386-linux-gnu/bits/byteswap.h(111): error: identifier "__builtin_bswap64" is undefined
    
    /home/user/Downloads/helloworld.cu(12): error: identifier "cudaDeviceSynchronize" is undefined
    
    3 errors detected in the compilation of "/tmp/tmpxft_000011c2_00000000-4_helloworld.cpp1.ii".

    私はインターネットgcc-4.2gcc-4.9.2、エラーの代わりに使用したり、同様に古いものを使用したりすると、エラーが消える可能性があることを発見しました。私はあきらめた。


  2. gpuocelot

    ストリンガーの答えには、非常に古いgpuocelotプロジェクトのWebサイトへのリンクがあります。なので最初は2012年くらいにプロジェクトが断念したと思いました。実際、それは数年後に放棄されました。

    ここにいくつかの最新のウェブサイトがあります:

    ガイドに従ってgpuocelotをインストールしてみました。しかし、インストール中にいくつかのエラーが発生し、あきらめました。gpuocelotはサポートされなくなり、特定のバージョンのライブラリとソフトウェアのセットに依存しています。

    2015年7月からこのチュートリアルを試してみるかもしれませんが、動作するかどうかは保証できません。私はそれをテストしていません。


  3. MCUDA

    MCUDA変換フレームワークは、CUDAプログラミングモデルをCPUアーキテクチャに効果的にコンパイルするように設計されたLinuxベースのツールです。

    役に立つかもしれません。ここにウェブサイトへのリンクがあります


  4. CUDA廃棄物

    これは、Windows 7および8で使用するエミュレーターです。私はまだ試していません。それはもう開発されていないようです(最後のコミットは2013年7月4日)。

    プロジェクトのウェブサイトへのリンクは次のとおりです:https : //code.google.com/archive/p/cuda-waste/


  1. CU2CL

    最終更新日:2017年12月3日

    ダッシュとしてコメントで指摘し、CU2CLは興味深いプロジェクトのようです。CUDAコードをOpenCLコードに変換できるようです。したがって、GPUがOpenCLコードを実行できる場合は、CU2CLプロジェクトが興味深いかもしれません。

    リンク:


4
残念です!スローパスを提供しないと、どのマシンでもアプリケーションを構築してテストすることが非常に難しくなります。つまり、開発者はCudaに依存関係を追加しないようにする必要があります。愛好家や研究者は、1回限りのプロジェクトで引き続き使用できます。お客様向けの実際のアプリケーション用ではありません。
dashesy 2017年

3
CU2CLはアクティブのようで、一見の価値があります。
dashesy 2017年

1
1. nvcc -deviceemu
ネイサン

2
4. CUDA Waste機能しました
ネイサン、

2
5. CU2CL機能しました
ネイサン

41

この応答は遅すぎるかもしれませんが、とにかく注目する価値があります。エミュレーターまたはLLVMバックエンドを使用する場合は、CUDAデバイスドライバー(libcuda.so)をインストールしなくてもGPU Ocelotそのうちの1つがコアコントリビューターです)をコンパイルできます。NVIDIA GPUのないシステムでエミュレータをデモしました。

エミュレータは、古いGPUがサポートしていない機能を含む可能性のあるPTX 1.4およびPTX 2.1仕様を忠実に実装しようとします。LLVMトランスレーターは、PTXからx86への正確かつ効率的な変換を目指しており、CUDAがGPUだけでなくマルチコアCPUをプログラミングする効果的な方法になることを願っています。-deviceemuかなり以前からCUDAの非推奨機能でしたが、LLVMトランスレータは常に高速でした。

さらに、いくつかの正当性チェッカーがエミュレーターに組み込まれて検証されます。整列されたメモリアクセス、共有メモリへのアクセスが適切に同期され、グローバルメモリ参照解除がメモリの割り当てられた領域にアクセスします。また、主にgdbに触発されたコマンドラインインタラクティブデバッガーを実装し、CUDAカーネルをシングルステップで実行し、ブレークポイントやウォッチポイントを設定しました。これらのツールは、CUDAプログラムのデバッグを促進するために特別に開発されました。あなたはそれらが役に立つかもしれません。

Linuxのみの側面については申し訳ありません。私たちはWindowsブランチ(およびMac OS Xポート)を開始しましたが、エンジニアリングの負担はすでに私たちの研究の追求を強調するのに十分な大きさです。時間と興味をお持ちの方がいらっしゃれば、Windowsのサポートを提供していただけると助かります。

お役に立てれば。

  • [1]:GPU Ocelot- https ://code.google.com/archive/p/gpuocelot/
  • [2]:Ocelot Interactive Debugger- http ://forums.nvidia.com/index.php?showtopic= 174820

3
こんにちは-まだいますか?既存のCUDAビルド環境でOcelotを使用してプログラムをビルドする方法に関するドキュメントはありますか?また、OcelotはThrustと連携しますか?
Kerrek SB、2011

最新のGPU Ocelotソースコードは、GitHub gtcasl / gpuocelotから入手できます。
l --marc l 2017

36

PTX(CUDAコードが変換されたバイトコード)がエミュレートされるという意味で、真のエミュレーターであるgpuocelotプロジェクトも確認できます。

LLVMトランスレータもあります。-deviceemuを使用する場合よりも高速かどうかをテストすることは興味深いでしょう。


悲しい点は、それがLinux専用であることです。私はデフォルトでLinuxユーザーですが、私が行う開発の一部は、Windowsマシン上での開発です。-deviceemuは廃止されたため、jskaggzの回答は完全には適合しません。全体として、これが最良の答えのようです。
Narcolapser 2010年

14

CUDAツールキットに、CUDA 3.0のリリースサイクルまで組み込まれていました。これらの非常に古いバージョンのCUDAの1つを使用している場合は、nvccでコンパイルするときに必ず-deviceemuを使用してください。


4
CUDAエミュレーターは非推奨です。おそらく、gpuocelotを検討する方が良いでしょう。
トム・

1
さらに、CUDAエミュレータは、論理CUDAスレッドごとに1つのネイティブOSスレッドを使用しますが、これは非常に非効率的です。
ストリンガー

9

https://github.com/hughperkins/cuda-on-clを使用すると、OpenCL 1.2 GPUでNVIDIA®CUDA™プログラムを実行できます(完全な開示:私は作成者です)


CPUでも実行できますか?
Mateusz Piotrowski 2016年

GPUのみ。OpenCL 1.2 GPU以上が必要です。
Hugh Perkins、

1
おそらくjrprice.com/Oclgrindを使用してCPUで実行できますが、おそらくあなたが意図したものではないと思います;-)。Coriander(新しい名前)はおそらくCPU OpenCLでも実行できると思いますが、これをテストしたことはありません。少し突っ込む必要があるかもしれません。
ヒューパーキンス2017年

3

-deviceemuを使用してプログラミングするときは、エミュレーションモード中にnvccが受け入れる操作があるが、実際にGPUで実行しているときはないので注意してください。これは主にデバイスとホストの相互作用で見られます。

そして、あなたが言ったように、いくつかの遅い実行の準備をします。


0

GPGPU-Simは、GPUを使用せずにCUDAプログラムを実行できるGPUシミュレーターです。役立つ場合に備えて、自分用にGPGPU-SimがインストールされたDockerイメージを作成しました。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.