gpt4 book ai didi

c++ - 不允许从全局函数调用宿主函数

转载 作者:太空宇宙 更新时间:2023-11-04 08:35:52 26 4
gpt4 key购买 nike

我正在 vs2010 上编译一个 cuda 5.5 项目。我需要使用 mpir 库,因为我的项目包含大量数据。当我使用 mpir 指令时出现此错误。我不知道该如何解决。该程序使用 mpir 函数添加数组 A 和数组 B。

 __global__
void vecAdd(mpz_t *A,mpz_t *B,mpz_t *C,int N)
{
int i = threadIdx.x + blockDim.x * blockIdx.x;
if(i<N)
mpz_add(C[i],A[i],B[i]);
}

int main()
{
mpz_t *h_A;
h_A=(mpz_t*)malloc(5*sizeof(mpz_t));
mpz_array_init(h_A[0],5,16);
mpz_set_si(h_A[0],1);
mpz_set_si(h_A[1],2);
mpz_set_si(h_A[2],3);
mpz_set_si(h_A[3],4);
mpz_set_si(h_A[4],5);

mpz_t *h_B;
h_B=(mpz_t*)malloc(5*sizeof(mpz_t));
mpz_array_init(h_B[0],5,16);
mpz_set_si(h_B[0],1);
mpz_set_si(h_B[1],2);
mpz_set_si(h_B[2],3);
mpz_set_si(h_B[3],4);
mpz_set_si(h_B[4],5);
mpz_t *h_C;
h_C=(mpz_t*)malloc(5*sizeof(mpz_t));
mpz_array_init(h_C[0],5,16);

int N=5;
int size=N*sizeof(mpz_t);

mpz_t *d_A;
d_A=(mpz_t*)malloc(5*sizeof(mpz_t));
mpz_array_init(d_A[0],5,16);

mpz_t *d_B;
d_B=(mpz_t*)malloc(5*sizeof(mpz_t));
mpz_array_init(d_B[0],5,16);

mpz_t *d_C;
d_C=(mpz_t*)malloc(5*sizeof(mpz_t));
mpz_array_init(d_C[0],5,16);

cudaMalloc((void**)&d_A,size);
cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);
cudaMalloc((void**)&d_B,size);
cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);
cudaMalloc((void**)&d_C,size);

vecAdd<<<ceil(N/512.0),512>>>(d_A,d_B,d_C,N);

cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);

cudaFree(d_A);
cudaFree(d_B);
cudaFree(d_C);

for(int i=0;i<5;i++)
{
mpz_out_str(stdout,10,h_C[i]);
printf("\n");
}

return 0;
}

最佳答案

您必须了解,可能从设备调用的函数必须编译为设备代码。在函数声明中放置一个 __device__ 将使它在设备端可用。

但是,由于 mpz_add 来自 MPIR 库,它不是用 CUDA 兼容功能制作的(据我所知),你运气不好。我建议您找到任意精度数字的 GPU 实现。

关于c++ - 不允许从全局函数调用宿主函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26235001/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com