об адресе автоматического массива CUDA

ipp = &ip1;

Позднее назначение изменило значение ipp. Вот почему он все еще указывает на ip1.

Что вы делаете с *ipp, т. Е. С ip1, не меняет того факта, что ipp указывает на ip1.

0
задан talonmies 13 July 2018 в 12:06
поделиться

1 ответ

Что здесь происходит?

Поучительно посмотреть на код, испускаемый компилятором:

.version 6.2
.target sm_52
.address_size 64

    // .globl   _Z4addrPy

.visible .entry _Z4addrPy(
    .param .u64 _Z4addrPy_param_0
)
{
    .local .align 8 .b8     __local_depot0[40];
    .reg .b64   %SP;
    .reg .b64   %SPL;
    .reg .b32   %r<2>;
    .reg .b64   %rd<6>;


    mov.u64     %SPL, __local_depot0;
    cvta.local.u64  %SP, %SPL;
    ld.param.u64    %rd1, [_Z4addrPy_param_0];
    cvta.to.global.u64  %rd2, %rd1;
    mov.u32     %r1, %tid.x;
    mul.wide.u32    %rd3, %r1, 8;
    add.s64     %rd4, %rd2, %rd3;
    add.u64     %rd5, %SP, 0;
    st.global.u64   [%rd4], %rd5;
    ret;
}

d хранится в локальная память. У этого есть область уровня потока. Насколько мне известно, документация не определяет, как адресация или адресные пространства работают для локальной памяти.

Если бы кто-то предполагал, что каждый поток имеет свое личное адресное пространство для локальной памяти, было бы логично, что первый элемент локальной памяти каждого потока начинался с того же адреса в локальном адресе потока пространство . Возможно, перевод TLB на уникальный адрес в глобальном банке памяти. Опять же, все предположения.

1
ответ дан 3 revs 17 August 2018 в 13:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: