У меня есть функция поиска CUDA, которые вычисляют одну единственную переменную. Как я могу возвратить его назад.
__global__
void G_SearchByNameID(node* Node, long nodeCount, long start,char* dest, long answer){
answer = 2;
}
cudaMemcpy(h_answer, d_answer, sizeof(long), cudaMemcpyDeviceToHost);
cudaFree(d_answer);
для обеих из этих строк я получаю эту ошибку: ошибка: аргумент типа "долго" является несовместимым с параметром типа "константа пусто *"
Я использовал для этой цели переменные __ device __
, таким образом вам не нужно беспокоиться о cudaMalloc
и cudaFree
, и вам не нужно передавать указатель в качестве аргумента ядра, что сохраняет регистр в ядре для загрузки.
__device__ long d_answer;
__global__ void G_SearchByNameID() {
d_answer = 2;
}
int main() {
SearchByNameID<<<1,1>>>();
typeof(d_answer) answer;
cudaMemcpyFromSymbol(&answer, "d_answer", sizeof(answer), 0, cudaMemcpyDeviceToHost);
printf("answer: %d\n", answer);
return 0;
}
Чтобы получить единственный результат, вы должны сохранить его в памяти, например:
#include <assert.h>
__global__ void g_singleAnswer(long* answer){ *answer = 2; }
int main(){
long h_answer;
long* d_answer;
cudaMalloc(&d_answer, sizeof(long));
g_singleAnswer<<<1,1>>>(d_answer);
cudaMemcpy(&h_answer, d_answer, sizeof(long), cudaMemcpyDeviceToHost);
cudaFree(d_answer);
assert(h_answer == 2);
return 0;
}
Я полагаю, что ошибка возникла из-за того, что вы передаете длинное значение вместо указателя на длинное значение.