Эффективная пропускная способность в Cuda

При вычислении эффективной пропускной способности в Cuda я подсчитываю количество операций чтения / записи в разделяемой памяти. Пример кода приведен ниже.

__global__ void kernel(float *a, float * b, float * c, int num){
    int i = threadIdx.x + blockIdx.x*blockDim.x;
    __shared__ a_shared[NUM];
    __shared__ b_shared[NUM];
    if (i < NUM){
       a_shared[i] = a[i];
       b_shared[i] = b[i]   
       c[i] = a_shared[i] + b_shared[i];
    }
}
docs.nvidia.com/cuda/cuda-c-best-practices-guide/…. Это описано в разделе 8.2.2 документации nvidia.
BIala T. A. 23.11.2018 05:55

Внимательное прочтение этого раздела подсказывает мне, что имеются в виду глобальные загрузки / хранилища, где резервным хранилищем для глобального трафика является DRAM. Следовательно, совместная деятельность не рассматривается и не должна включаться.

Robert Crovella 23.11.2018 05:59
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
2
501
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Что касается секция руководства по передовой практике, которое вы указываете в комментариях выше, я бы сказал, что ответ отрицательный, общий трафик не должен включаться.

Откуда нам это знать?

  1. Основная цель расчета эффективной пропускной способности - сравнить ее с теоретической пропускной способностью:

To measure performance accurately, it is useful to calculate theoretical and effective bandwidth. When the latter is much lower than the former, design or implementation details are likely to reduce bandwidth, and it should be the primary goal of subsequent optimization efforts to increase it.

Однако расчет теоретической пропускной способности включает только глобальный трафик памяти в DRAM:

Using these data items, the peak theoretical memory bandwidth of the NVIDIA Tesla M2090 is 177.6 GB/s:

Это число - пропускная способность DRAM. Он не включает пропускную способность разделяемой памяти.

  1. Все ссылки на измерения профилировщика относятся к глобальному трафику памяти, а не к разделяемой памяти:

Requested Global Load Throughput

Requested Global Store Throughput

Global Load Throughput

Global Store Throughput

DRAM Read Throughput

DRAM Write Throughput

  1. Метод расчета теоретической пропускной способности разделяемой памяти нигде не задокументирован в официальной документации CUDA, поэтому его нельзя было включить в расчет теоретической пропускной способности. Поэтому включение измерения пропускной способности разделяемой памяти не имеет смысла для целей сравнения.

Другие вопросы по теме