HalideRuntime.h は、クライアントが呼び出したり置き換えたりできるすべてのルーチンを文書化することを目的としています。ランタイムには他にも多くのシンボルがありますが、それらは内部的なものと見なす必要があります。最近、これらの他のルーチンを独自の名前空間に移動して、それらが内部であることを示しました。
デバイス バックエンドのランタイムはまだ進行中の作業であり、より多くの柔軟性を可能にし、複数のバックエンドで汎用的に動作しながらコードがより多くのことを実行できるようにすることを目的とした改善された設計が行われる予定です。現在、halide_dev_malloc は、Halide コンパイル時にターゲットを介して選択されたデバイス バックエンドにデバイス ハンドルを割り当てます。ただし、このハンドルはバックエンド固有であるため、それを使用して何かを行うには、使用されているバックエンドと、そのバックエンドがデバイス API とどのようにやり取りしたかを知る必要があります。たとえば、memcpy でハンドルを使用するには、デバイスのバックエンドがある種の統一メモリ アーキテクチャ (「統一仮想アドレス空間」) をサポートしていることを知る必要があります。CUDA 用語で)、デバイス メモリは正しい API 呼び出しで割り当てられ、デバイスと CPU の両方から同じポインタなどでアクセスできるメモリ バッファを作成します。使用しているバックエンドと使用しているプラットフォームによって異なります。 、それは現在うまくいくかもしれないし、うまくいかないかもしれません。(均一なメモリ設計は、ほとんどの場合、かなり最近のものです。私たちはそれらをサポートするために多くの努力を払っていません。)
CUDA/PTX の場合、halide_dev_malloc は cuMemAlloc を呼び出し、多くのシステムではデフォルトで Unified Virtual Address Space にあると思いますが、よくわかりません。