Нужно ли нам учитывать перегрузку кеша с помощью CUDA?

Я не знаком с работой кэширования памяти графического процессора, поэтому хотел бы знать, применимы ли к графическим процессорам предположения о временной и пространственной близости доступа к памяти, связанные с процессорами. То есть, программируя в CUDA C, нужно ли мне учитывать формат хранения массива строк C, чтобы предотвратить перегрузку кеша?

Большое спасибо.


person mchen    schedule 30.12.2012    source источник
comment
Почему бы вам не сравнить это?   -  person    schedule 31.12.2012
comment
Спасибо. Я еще не закончил писать код, но попробую, когда он заработает.   -  person mchen    schedule 31.12.2012


Ответы (2)


Да очень.

Скажем, вы извлекаете 4-байтовые целые числа для каждого потока.

Сценарий первый

Каждый поток получает одно целое число с индексом своего идентификатора потока. Это означает, что нулевой поток извлекает [0], поток 1 извлекает [1] и т. д. Как и в случае с графическим процессором, он будет извлекать в кэше строки размером 128 байт. По стечению обстоятельств деформация составляет 32 потока, следовательно, 32 * 4 = 128 байт. Это означает, что для одной деформации будет выполнен один запрос на выборку из памяти.

Сценарий второй

Если потоки загружаются в абсолютно случайном порядке с расстоянием между индексами больше 128 байт. Ему придется сделать 32 запроса памяти по 128 байт. Это означает, что для каждого варпа вы будете заполнять кеши в 32 раза больше памяти, и если ваша проблема большая, ваш кеш будет аннулирован в 32 раза больше, чем в первом сценарии.

Это означает, что если вы будете запрашивать память, которая обычно находится в кеше в первом сценарии, то во втором сценарии, скорее всего, ее придется разрешать другим запросом памяти из глобальной памяти.

person 1-----1    schedule 30.12.2012

Нет и да. Нет, потому что графический процессор не обеспечивает такой же «кеш», что и ЦП.

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

На этой странице вы можете ознакомиться с основными сведениями о типах памяти CUDA или здесь для более подробной информации о кэше на графическом процессоре Fermi.

person kriss    schedule 30.12.2012