[Notas] CUDA (2) - arquitetura SIMT (assíncrona)

Arquitetura SIMT (Assíncrona)

No modelo de programação CUDA, os threads são o nível mais baixo de abstração para operações de computação ou memória. Começando com dispositivos baseados na arquitetura NVIDIA Ampere GPU, o modelo de programação CUDA fornece aceleração para operações de memória por meio de um modelo de programação assíncrono. O modelo de programação assíncrona define o comportamento das operações assíncronas em relação aos encadeamentos CUDA.

O modelo de programação assíncrona define o comportamento das barreiras assíncronas . O modelo também explica e define como mover dados de forma assíncrona da memória global ao computar cuda::memcpy_asyncna GPU.

operação assíncrona

As operações assíncronas são definidas como operações iniciadas por um thread CUDA e executadas de forma assíncrona como outros threads. Em um programa bem estruturado, um ou mais threads CUDA sincronizam com operações assíncronas. Os encadeamentos CUDA que iniciam operações assíncronas não precisam estar em encadeamentos síncronos.

Esses encadeamentos assíncronos (encadeamentos as-if) estão sempre associados ao encadeamento CUDA que iniciou a operação assíncrona. As operações assíncronas usam um objeto de sincronização para sincronizar a conclusão da operação. Esses objetos de sincronização podem ser gerenciados explicitamente pelo usuário (por exemplo, cuda::memcpy_async) ou implicitamente na biblioteca (por exemplo, cooperative_groups::memcpy_async).

O objeto de sincronização pode ser cuda::barrierou cuda::pipeline. Esses objetos são detalhados em Barreira assíncrona e cópias de dados assíncronas usando cuda::pipeline . Esses objetos de sincronização podem ser usados ​​em diferentes escopos de encadeamento. Um escopo define um conjunto de threads que podem sincronizar com operações assíncronas usando objetos de sincronização.

A tabela a seguir define os escopos de encadeamento disponíveis em CUDA C++ e os encadeamentos que podem sincronizar com cada encadeamento.

Escopo do Tópico Descrição
cuda::thread_scope::thread_scope_thread Somente o encadeamento CUDA que iniciou as operações assíncronas é sincronizado.
cuda::thread_scope::thread_scope_block Todos ou quaisquer encadeamentos CUDA dentro do mesmo bloco de encadeamento que o encadeamento inicial é sincronizado.
cuda::thread_scope::thread_scope_device Todos ou quaisquer encadeamentos CUDA no mesmo dispositivo de GPU que o encadeamento inicial é sincronizado.
cuda::thread_scope::thread_scope_system Todos ou quaisquer encadeamentos CUDA ou CPU no mesmo sistema que o encadeamento inicial é sincronizado.

Esses escopos de encadeamento são implementados na biblioteca C++ padrão CUDA como uma extensão do C++ padrão.

Acho que você gosta

Origin blog.csdn.net/LawssssCat/article/details/127201664
Recomendado
Clasificación