Невозможно вызвать CUDA с половинной точностью с хоста - PullRequest
0 голосов
/ 30 мая 2018

Я пытаюсь выполнить работу FP16, которая будет иметь и процессор, и графический процессор.Я исследовал свои варианты и решил использовать CUDA-преобразователь с половинной точностью и типы данных. Те, которые я намереваюсь использовать, указаны как __device__ и __host__, которые согласно моему пониманию (и официальному * 1005)* документация ) должна означать, что функции могут вызываться из кода HOST и DEVICE.Я написал простую тестовую программу:

#include <iostream>
#include <cuda_fp16.h>

int main() {
  const float a = 32.12314f;
  __half2 test = __float2half2_rn(a);
  __half test2 = __float2half(a);
  return 0;
}

Однако, когда я пытаюсь скомпилировать ее, я получаю:

nvcc cuda_half2.cu 
cuda_half2.cu(6): error: calling a __device__ function("__float2half2_rn") from a __host__ function("main") is not allowed

cuda_half2.cu(7): error: calling a __device__ function("__float2half") from a __host__ function("main") is not allowed

2 errors detected in the compilation of "/tmp/tmpxft_000013b8_00000000-4_cuda_half2.cpp4.ii".

Единственное, что приходит на ум, это то, что мой CUDA равен 9.1, и яЯ читаю документацию по 9.2, но я не могу найти ее более старую версию и ничего не могу найти в changelog .Идеи?

1 Ответ

0 голосов
/ 30 мая 2018

Идеи?

Переключиться на CUDA 9.2

Ваш код без ошибок компилируется в CUDA 9.2, но выдает ошибки, которые вы указываете в CUDA 9.1.Если у вас установлен CUDA 9.1, то документация по нему уже установлена ​​на вашем компьютере.При обычной установке linux он будет находиться в /usr/local/cuda-9.1/doc.Если вы посмотрите на /usr/local/cuda-9.1/doc/pdf/CUDA_Math_API.pdf, то увидите, что соответствующие функции помечены только __device__, поэтому это изменение действительно было сделано между CUDA 9.1 и CUDA 9.2

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...