NVidia CUDA: синхронизация и shared memory

Экспериментально выяснилось, что содержимое shared memory не сохраняется между запусками кода на G80. Всякий раз оно инициализировано, причем значения разные, то 10 (float), то 125.

Плакала идея синхронизации между мультипроцессорами путем завершения kernel. Нет, синхронизироваться можно, конечно, но если хочется сохранить результат, то надо писать в глобальную память.

Tags: 

Comments

Появится ли механизмы

Появится ли механизмы сохранения shared memory между kernal на будущих архитектруах? Может есть у кого мыли по этому поводу?

Механизм есть, называется

Механизм есть, называется "записать в глобальную память".

И каких-то чудес тут ожидать не следует. У вас даже в одном kernel может быть блоков больше, чем влезает на GPU одновременно. Когда блок завершился - девать его shared mem некуда, кроме глобальной памяти. Нет никакой разницы, писать туда вручную (по завершении блока) или каким-то автоматом.