Транспонирование вертикальных срезов трехмерного тензора для повышения производительности

У меня есть 3D-тензор, который представляет собой непрерывный блок памяти. Чтобы лучше анализировать производительность, я убедился, что этот блок может находиться в кэше L3 моей системы. Так что в лучшем случае я смогу достичь уровня L3-полосы пропускания.

Проблема заключается в природе транспонирования: мне нужно будет транспонировать вертикальные срезы горизонтально сложенного тензора. Это означает, что типичный фрагмент может выглядеть так:

      ... a11 a12 a13 a14 ... -> skip N^2 - N addresses
... a21 a22 a23 a24 ... -> skip N^2 - N addresses
...

Это означает, что у нас есть доступ к шагу-N^2. Обратите внимание, что доступ к каждому вектору-строке является потоковым.

Я предполагаю, что обычные приемы вроде блокировки здесь будут бесполезны. Я подумал о распараллеливании после того, как оптимизировал использование кеша в моем коде. Будем очень признательны за любые советы / документы / статьи / идеи / кусочки мудрости, которые помогут мне в моем текущем поиске.

0 ответов

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