118

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


情報:

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

私はUbuntu10.04LTSでプログラミングしています。

4

7 に答える 7

43

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

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

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

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

お役に立てれば。

于 2011-01-21T22:06:44.853 に答える
42

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-deviceemuCUDAToolkit3.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;
    }
    

    CUDAToolkit3.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.2または同様に古代のものを使用した場合gcc-4.9.2、エラーが消える可能性があることを発見しました。私はあきらめた。


  2. gpuocelot

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

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

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

    2015年7月からこのチュートリアルに従おうとするかもしれませんが、それが機能することを保証するものではありません。私はそれをテストしていません。


  3. MCUDA

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

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


  4. CUDA廃棄物

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

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


  1. CU2CL

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

    コメントでダッシュが指摘しているように、CU2CLは興味深いプロジェクトのようです。CUDAコードをOpenCLコードに変換できるようです。したがって、GPUがOpenCLコードを実行できる場合は、CU2CLプロジェクトに関心がある可能性があります。

    リンク:

于 2016-03-29T00:25:11.590 に答える
36

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

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

于 2010-06-21T19:20:34.387 に答える
14

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

于 2010-06-21T18:33:28.093 に答える
10

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

于 2016-10-20T02:49:35.790 に答える
3

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

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

于 2010-06-21T20:31:32.140 に答える
1

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

于 2019-07-08T01:24:22.353 に答える