| 例 | ドキシゲンドキュメント(TODO) |
|---|
cuCollections ( cuco )は、GPUアクセラル化された同時データ構造のオープンソースのヘッダーのみのライブラリです。
スラストとカブがSTLのようなGPU加速アルゴリズムとプリミティブをどのように提供するかと同様に、 cuCollections STLのような同時データ構造を提供します。 cuCollections std::unordered_mapのようなSTLデータ構造の1対1のドロップイン置換ではありません。代わりに、GPUで効率的に使用するように調整された機能的に類似したデータ構造を提供します。
cuCollectionsまだ激しい開発中です。ユーザーは、変更を破り、リファクタリングが一般的であることを期待する必要があります。
11/01/2024 bucketとして用語windowを改良しました
01/08/2024はexperimental名前空間を非難しました
01/02/2024 Legacy static_map cuco::legacy NameSpaceに移動しました
cuCollectionsはヘッダーのみであり、ヘッダーをダウンロードしてソースツリーに配置することで、プロジェクトに手動で組み込むことができます。
cuCollectionsを追加しますcuCollections 、別のCmakeプロジェクト内に簡単に含めることができるように設計されています。 CMakeLists.txtは、プロジェクトでcuCollectionsを使用するために必要なディレクトリ、依存関係、およびコンパイルされたセットアップにターゲットに1をリンクできるcucoターゲットをエクスポートします。
Cmake Package Manager(CPM)を使用して、プロジェクトにcuCollections取得することをお勧めします。 CPMを使用すると、 cuCollections取得するのは簡単です。
cmake_minimum_required ( VERSION 3.23.1 FATAL_ERROR)
include ( path /to/CPM.cmake)
CPMAddPackage(
NAME cuco
GITHUB_REPOSITORY NVIDIA/cuCollections
GIT_TAG dev
OPTIONS
"BUILD_TESTS OFF"
"BUILD_BENCHMARKS OFF"
"BUILD_EXAMPLES OFF"
)
target_link_libraries (my_library cuco)これにより、GithubからのcuCollectionsをダウンロードし、Cmakeが見つけることができる場所でヘッダーを利用できるようにします。 cucoターゲットとのリンクは、 cuco my_libraryターゲットで使用されるために必要なすべてを提供します。
1: cuCollectionsはヘッダーのみであるため、「リンク」するバイナリコンポーネントはありません。リンク用語は、ヘッダーのみのライブラリターゲットにも使用されているcmakeのtarget_link_librariesに由来しています。
nvcc 11.5+cuCollections次のライブラリに依存します。
これらの依存関係を満たすためにユーザーからアクションは必要ありません。 cuCollectionsのcmakeスクリプトは、これらのライブラリのシステムを最初に検索するように構成されており、それらが見つからない場合は、Githubから自動的にフェッチします。
cuCollectionsヘッダーのみであるため、それを使用するために構築するものは何もありません。
テスト、ベンチマーク、および例を構築するには:
cd $CUCO_ROOT
mkdir -p build
cd build
cmake .. # configure
make # build
ctest --test-dir tests # run testsバイナリは以下に組み込まれます。
build/tests/build/benchmarks/build/examples/または、 ci/build.shにあるビルドスクリプトを使用できます。引数なしでこのスクリプトを呼び出すとbuild/localにある完全なビルドがトリガーされます。
cd $CUCO_ROOT
ci/build.sh # configure and build
ctest --test-dir build/local/tests # run tests説明と例とともに利用可能なすべてのオプションの包括的なリストを使用するには、オプションci/build.sh -h使用できます。
デフォルトでは、 cuCollections pre-commit.ciとmirrors-clang-format使用して、プル要求でC ++/CUDAファイルを自動的にフォーマットします。ユーザーはAllow edits by maintainersオプションを有効にして、自動フォーマットを動作させる必要があります。
オプションで、Git Commitを作成するときに、 pre-commitフックをセットアップしてclang-format自動的に実行することをお勧めします。これは、 condaまたはpipを介してpre-commitをインストールすることで実行できます。
conda install -c conda-forge pre_commitpip install pre-commitそして実行してください:
pre-commit install cuCollectionsリポジトリのルートから。これで、変更を犯すたびにコードフォーマットが実行されます。
コードを手動でフォーマットすることもできます。
pre-commit run clang-format --all-filesmirrors-clang-format clang-formatの正しいバージョンを保証し、バージョンの不一致を回避します。ユーザーは、コードラインでclang-format直接使用してコードをフォーマットしてはいけません。
Doxygen 、ソースコードでC ++/CUDAコメントからHTMLページを生成するために使用されます。
次の例では、 cuCollectionsのC ++/CUDAコードを文書化するためのドキシゲンブロックのコメントとタグスタイルのほとんどをカバーしています。
/* *
* @file source_file.cpp
* @brief Description of source file contents
*
* Longer description of the source file contents.
*/
/* *
* @brief Short, one sentence description of the class.
*
* Longer, more detailed description of the class.
*
* A detailed description must start after a blank line.
*
* @tparam T Short description of each template parameter
* @tparam U Short description of each template parameter
*/
template < typename T, typename U>
class example_class {
void get_my_int (); // /< Simple members can be documented like this
void set_my_int ( int value ); // /< Try to use descriptive member names
/* *
* @brief Short, one sentence description of the member function.
*
* A more detailed description of what this function does and what
* its logic does.
*
* @param[in] first This parameter is an input parameter to the function
* @param[in,out] second This parameter is used both as an input and output
* @param[out] third This parameter is an output of the function
*
* @return The result of the complex function
*/
T complicated_function ( int first, double * second, float * third)
{
// Do not use doxygen-style block comments
// for code logic documentation.
}
private:
int my_int; // /< An example private member variable
};cuCollections 、Doxygenをドキュメンテーションリナーとして使用します。 Doxygenスタイルをローカルで確認するには、実行します
./ci/pre-commit/doxygen.sh多くのGPUでアクセラル化された、同時データ構造をcuCollectionsに追加する予定です。現在のところ、2つのフラッグシップはハッシュテーブルのバリアントです。
static_set cuco::static_set一意の要素を順不同で保存する固定サイズのコンテナです。詳細については、 static_set.cuhのDoxygenドキュメントを参照してください。
static_map cuco::static_map線形プロービングを使用したオープンアドレス指定を使用した固定サイズのハッシュテーブルです。詳細については、 static_map.cuhのDoxygenドキュメントを参照してください。
static_multimap cuco::static_multimap同等のキーの保存をサポートする固定サイズのハッシュテーブルです。デフォルトで二重ハッシュを使用し、線形プロービングへの切り替えをサポートします。詳細については、 static_multimap.cuhのDoxygenドキュメントを参照してください。
static_multiset cuco::static_multisetは、同等のキーの保存をサポートする固定サイズのコンテナです。デフォルトで二重ハッシュを使用し、線形プロービングへの切り替えをサポートします。詳細については、 static_multiset.cuhのDoxygenドキュメントを参照してください。
dynamic_map cuco::dynamic_map複数のcuco::static_map sを結合して、キー価値のペアが挿入されるにつれて成長できるハッシュテーブルを提供します。現在、ホストバルクAPIのみを提供しています。詳細については、 dynamic_map.cuhのdoxygenドキュメントを参照してください。
hyperloglog cuco::hyperloglogマルチセット/ストリーム内の異なるアイテムのカウントを近似するために、確立されたHyperLoglog ++アルゴリズムを実装します。
bloom_filter cuco::bloom_filter近似セットメンバーシップクエリのためにブロックされたブルームフィルターを実装します。