0
Cファイル(.c)からcuda(.cu)ファイルに置かれたC関数を呼び出す必要があります。私はそのような階層を持っています。cファイルから.cuファイルに配置されたC関数を呼び出す方法は?
main.cの
#include <stdio.h>
#include "dbgHelpers.h"
#include "arffReader.h"
#include "CPU_k_means.h"
#include "CUDA_k_means.h"
#include "defines.h"
int main() {
//actions
uint cudaTime = runCudaKMeans(h_objects, objectsNum, parametersNum, clustersNum, repeatesNum, streamsNum);
//actions
return 0;
}
CUDA_k_means.cu
#include "CUDA_k_means.h"
#include <cuda.h>
#include <cuda_runtime.h>
#include <stdio.h>
extern "C" {
#include "dbgHelpers.h"
}
__constant__ uint d_CLUST_NUM;
__constant__ uint d_OBJ_NUM;
__constant__ uint d_PARAMS_NUM;
__constant__ uint d_OBJ_PER_STREAM;
__constant__ uint d_OBJ_FOR_LAST_STREAM;
extern __shared__ uint sharedData[];
__global__ void calcDistances(ptype* d_objects, ptype* d_clustersCenters, ptype* d_distances)
{
//algorithm
}
__global__ void clusterize(ptype* d_distances, uint* d_clustersMap)
{
//algorithm
}
//and more kernels
uint runCudaKMeans(ptype* h_objects, uint objectsNum, uint parametersNum, uint clustersNum, uint repeatesNum, uint streamsNum) {
//algorithm
calcDistances<<32, 32>>();
//and so on
}
CUDA_k_means.h
#ifndef CUDA_K_MEANS_H_
#define CUDA_K_MEANS_H_
#include "defines.h"
uint runCudaKMeans(ptype* h_objects, uint objectsNum, uint parametersNum, uint clustersNum, uint repeatesNum, uint streamsNum);
#endif
私はそれを正しくリンクすることはできません。 NSightがこのエラーを返します。
/usr/local/cuda-7.5/bin/nvcc --cudart static --relocatable-device-code=false -gencode arch=compute_20,code=compute_20 -gencode arch=compute_20,code=sm_21 -link -o "lab5" ./CPU_k_means.o ./CUDA_k_means.o ./arffReader.o ./dbgHelpers.o ./main.o
./main.o: In function `main':
main.c:(.text.startup+0x8c): undefined reference to `runCudaKMeans'
collect2: error: ld returned 1 exit status
make: *** [lab5] Error 1
対処方法がわかりません。私は "extern C"のさまざまな組み合わせを試みましたが、成功しませんでした。それも可能ですか?
十分な説明のように見えるがリンク重複で見つけることができます – talonmies