2016-02-29 3 views
1

В файле исходного кода LLVM llvm/lib/Target/NVPTX/NVPTXIntrinsics.td определения для atom_add, atom_sub, atom_max, atom_min, atom_inc, atom_dec и т. Д. Типов памяти CUDA могут быть видел. Но я не смог найти загрузку и хранить операции с памятью CUDA в любом месте этих файлов. Итак, где операции загрузки и хранения определены для типов памяти CUDA в llvm?Определения для операций загрузки и хранения в типах памяти CUDA (например, общий, глобальный) в llvm

ответ

2

Вы не найдете их как внутренне, потому что для загрузки и хранения в иерархии памяти CUDA нет встроенных функций. NVPTX использует адресные пространства в операнде указателя инструкции загрузки или хранения, чтобы определить, какая команда PTX должна быть сгенерирована.

Нагрузка на указатель на address space 1 будет перевести на ld.global.<type> в то время как нагрузка выполняется на указатель на address space 3 (совместно используемой памяти) приведет к ld.shared.<type> инструкции. Загрузка в общий указатель, т. Е. Указатель в address space 0, приведет к инструкции ld.<type>.

Этот перевод происходит во время выбора команды в бэкэнде NVPTX. Посмотрите на ./llvm/lib/Target/NVPTX/NVPTXISelDAGToDAG.cpp, чтобы узнать, как происходит выбор команды в NVPTX. Например, в командах загрузки SDNode *NVPTXDAGToDAGISel::SelectLoad(SDNode *N).