CUDA e Visual Studio 2008: Problemas ao tentar vincular projetos diferentes
Enquanto vasculhava a rede em busca de uma resposta para o meu problema, vi várias postagens em fóruns e blogs abordando o tópico 'Como configurar, compilar, vincular e executar um projeto CUDA no VIsual Studio 2008'
(Eu estava tentando fornecer os links, mas não tenho permissão para, como um novo pôster: p)
Mas o que está faltando aqui?
O que está faltando é que todos os guias ou postagens acima informam como configurar um único projeto do VS que será o projeto de inicialização e será executado sozinho. Como conseqüência, eles estão usando a 'Regra da API de tempo de execução CUDA', que é personalizada para criar um arquivo .exe compatível com CUDA.
O que eu quero / preciso?
1) Quero ter uma solução VS que contenha vários projetos, a maioria dos quais são escritos em C ++. Haverá um projeto principal escrito em C ++ criando o '.exe' (contendo a função 'principal' e, portanto, controlando o fluxo) e vários outros projetos que criarão os arquivos '.lib' apropriados aos quais o projeto principal será vinculado. 2) Na forma mais simples, preciso de um projeto que faça as coisas da CUDA que criarão o arquivo lib e o projeto principal que será vinculado a ele e o utilizará.
Eu olhei em todos os lugares sem sucesso, ninguém parece estar usando vários projetos.
Meu problema é: 1) O projeto CUDA cria uma biblioteca e, portanto, deve usar a 'Regra da API do driver CUDA' e não a variante de tempo de execução (se eu ousar, o projeto CUDA tenta usar as bibliotecas usadas pela principal e existem projetos multiplamente definidos ' 2) Ao tentar fazê-lo da maneira correta, o projeto principal não pode se vincular ao projeto CUDA
Aqui está o código de exemplo que estou usando para mostrar qual é o acordo (também anexarei o arquivo VS sln aqui para aqueles que desejam experimentá-lo)
Outline:
VS Solution
Main Project(C++ project producing the .exe and containing the main function)
main.cpp
#include "../CUDAProject/testCuda.h"
int
main(int argc, char** argv)
{
testCudaClass* t2;
t2 = new testCudaClass();
t2->stub_function();
return 0;
}
CUDA Project:
testCuda.h
#include <cstdio>
#include <cstdlib>
#include <iostream>
class testCudaClass
{
public:
void stub_function();
};
testCuda.cpp
#include "testCuda.h"
extern "C" int cuda_function();
void testCudaClass::stub_function()
{
int a;
a=cuda_function();
std::cout<< a <<"\n";
}
test.cu
#include "cuda.h"
extern "C" int cuda_function()
{
return 5;
}
Em anexo (links públicos do dropbox temporário) está um arquivo zip com 2 soluções VS2008, uma em que tenho um único projeto CUDA que funciona bem e outra em que tento fazer o acima (parte do código do projeto é descrita acima)
http://dl.dropbox.com/u/3091507/CUDA.zip
Gostaria muito de receber qualquer informação ou conselho que possa me ajudar a resolver esse enigma
Muito obrigado Adam