web-dev-qa-db-ja.com

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

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


情報:

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

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

102
Narcolapser

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はCUDA Toolkit 3.0で-deviceemuオプションを使用していた

    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 Toolkit 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.2の代わりにgcc-4.9.2または同様に古いものを使用すると、エラーが消えることがあります。私はあきらめた。


  2. gpuocelot

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

    最新のWebサイトは次のとおりです。

    ガイド に従って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日

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

    リンク:

36

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

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

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

Linuxのみの側面については申し訳ありません。 Windowsブランチ(およびMac OS Xポート)を開始しましたが、エンジニアリングの負担はすでに調査の目的を強調するのに十分な大きさです。時間と興味がある人は、Windowsのサポートを提供してください。

お役に立てれば。

39
kerrmudgeon

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

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

36
Stringer

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

14
Jubal

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

8
Hugh Perkins

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

そして、あなたが述べたように、いくつかの遅い実行に備えてください。

3
Sean

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

0
sriraj