Я пишу программу вычислений CUDA с большим объемом памяти. Мне нужно использовать математические функции, такие как в math.h в моем ядре. Итак, я провел небольшое исследование и наткнулся на «cuda_fp16.h», который должен добавить множество математических функций для использования на устройстве. Однако, если я хочу использовать одну из этих математических функций (например, cos(i)
, которая является частью этой библиотеки), при компиляции мне сообщается, что я не могу запустить функцию __host__
на устройстве. Мне ясно, что это невозможно, но библиотека cuda_fp16.h точно должна добавить __device__
функций для математики. В «cuda_fp16.h» есть ошибки, говорящие о том, что тип __half не определен.
Я просмотрел определение cos()
, которое использовал, и оно привело меня к чему-то внутри math.h. Так что я предполагаю, что он просто берет функцию оттуда вместо cuda_fp16.h
#include "cuda.h"
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include "cuda_fp16.h"
__global__ void computation(double x, double y) //function that should upon being called compute the cosine of y.
{
x = cos(y);
}
Это очень простой пример того, что я пытаюсь сделать; просто чтобы заставить ядро вычислить какую-то математическую функцию значения.
Я ожидаю, что все это сможет скомпилироваться, поскольку я включил библиотеку, которая позволила бы вычислить такую функцию с помощью функции __device__
. Однако он не компилируется и сообщает мне, что я не могу вызвать функцию __host__
cos на устройстве.
x
иy
относятся к типуdouble
? - person BlameTheBits   schedule 07.08.2019x
не принесет ничего полезного. - person Some programmer dude   schedule 07.08.2019__host__
вызывается с устройства, это ничего не говорит мне о том, что она выражена неправильно. - person Niels Slotboom   schedule 07.08.2019__host__
с устройства? Я думаю, что для меня это вызывает функциюcos()
из math.h - person Niels Slotboom   schedule 07.08.2019