Почему AMD GCN использует ненулевое значение NULL?

Этот коммит говорит:

В цели amdgcn нулевые указатели в глобальном, постоянном и общем адресном пространстве принимают значение 0, а нулевые указатели в частном и локальном адресном пространстве принимают значение -1.

Как они используют эти два разных значения NULL?

1 ответ

Что касается того, почему: я не знаю этого на самом деле, но указатели локального / частного адресного пространства почти наверняка просто реализованы как смещения / индексы в плоском физическом регистровом файле / области памяти. Там нет виртуальной памяти как переназначение адресов, просто большой массив. Вы по-прежнему хотите иметь доступ к индексу массива 0, поэтому "недопустимый указатель" (недопустимый индекс) должен быть чем-то другим.

Не забывайте, что NULL = неотменяемый указатель = 0 - это обычное соглашение и в обычном C - некоторые не-OpenCL-системы также имеют действительную память по адресу 0. В стандарте есть некоторые сложности, касающиеся memset и т. Д., Так что вы Возможно, вам лучше прочитать документ самостоятельно, если вас интересует точная спецификация.

Я не уверен, что именно вы спрашиваете о "как" - вы не можете разумно конвертировать между указателями в разных адресных пространствах OpenCL, поэтому там нет конфликта.

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