私はCで大きなプロジェクトを持っています。私はCudaカーネルをその中に統合しようとしています。 "gcc -c main.c"と私の.cuファイルを "nvcc -c cuda_GMRES.cu"でコンパイルして、2つのオブジェクトファイルをnvcc: "nvcc -o main"とリンクしようとしています。 o cuda_GMRES.o "と表示され、次のエラーが表示されます。Cuda Cプロジェクトのリンクがありません
/usr/lib/gcc/x86_64-redhat-linux/4.1.2/../../../../lib64/crt1.o:機能では _start': (.text+0x20): undefined reference to
メイン collect2は:ldはそれは私がCファイルでCUDAを結合しようとしている最初の時間だと私は、誰かが私を助けてくださいwrong.Can何かをやっている場合があります1、終了ステータス
を返しました。私はRocks OSを搭載したGPUクラスタ上にいる。
私のmain.cファイル:
#include <stdio.h>
#include <math.h>
#include "cuda_wrapper.h" //header containing wrapper function
//cuda_GMRES that calls the kernel cuda_dot
int main (int argc,char* argv[])
{
//content
//bla bla bla
//cuda Function call
cuda_GMRES(50);
return 0;
}
マイcuda_wrapper.hファイル:
#ifndef Cuda_GMRES_cuda_wrapper_h
#define Cuda_GMRES_cuda_wrapper_h
//wrapper function declaration
void cuda_GMRES(double a);
#endif
関数を呼び出すカーネルが含まれている私のcuda_GMRES.cuファイル:
#include <stdio.h>
#include "cuda_wrapper.h"
#include "cuda_dot.cu"
//kernel declaration
__global__ void cuda_dot();
//kernel calling function
extern "C"
void cuda_GMRES(double a)
{
double b;
double *dev_a;
double *res;
cudaMemcpy(dev_a, &a, sizeof(double), cudaMemcpyHostToDevice);
cuda_dot<<< 1, 1 >>>(*dev_a, res);
cudaMemcpy(&b, res, sizeof(double), cudaMemcpyDeviceToHost);
}
マイカーネルを含むcuda_dot.cuファイル:
__global__ void cuda_dot(double a, double *help)
{
*help=2*a;
}
と呼ばれるデフォルトリンクされたプログラムを放出する
はあなたが
を'nvcc -o main.o cuda_GMRES.o'は本当にあなたが使っているリンクコマンドですか? – talonmies
ええ..それはエラーなしで動作するはずだと思いますか? –
これは問題ではありません – talonmies