Как переменные устройства contexpr доступны от хоста?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Как переменные устройства contexpr доступны от хоста?

Сообщение Anonymous »

Мой коллега наткнулся на эту ситуацию, где глобальные __device__ contexpr переменные доступны как от хоста, так и от устройства.
#include
#include

__device__ constexpr std::array a = {15, 1};

__host__ __device__ void my_print(const char* c_str, const int& i) {
std::printf(c_str);
std::printf(" i=%d &i=%p\n", i, &i);
}

__global__ void display() {
my_print("device", a[0]);
}

int main() {
display();
cudaDeviceSynchronize();
my_print("host", a[0]);
return 0;
}
< /code>
Вот выход из прогона, который выглядит разумным: < /p>
device i=15 &i=0x7e97e9200000
host i=15 &i=0x482008
< /code>
Наша ситуация связана с этим вопросом. Однако, в отличие от этого случая, мы знаем значение переменной во время компиляции. Является ли текущая ситуация хорошо определенной? < /P>
Обновление: спасибо за обсуждение в комментариях. Мы понимаем, что передача переменной устройства ContexPR в качестве Const Ref к хосту следует рассматривать компилятор CUDA как ошибку, и сообщалось. Мы также понимаем, что глобальной переменной хоста ContexPR достаточно в качестве переменной, к которой следует получить доступ как хост, так и устройство. Несколько прискорбно, что переменные хоста contexpr не могут быть переданы в качестве константа для устройства. Скорее всего, ничего не может пойти не так.

Подробнее здесь: https://stackoverflow.com/questions/796 ... -from-host
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»