在Visual Studio C++项目中使用尖端
Using cusp in a Visual Studio C++ project
我在VS2012 Ultimate上使用的是cusp v.0.4.0,cuda V5.5。我使用新项目向导创建了一个CUDA项目,并将尖点路径添加到其项目属性\VC++目录\Include目录中。我在VS2012生成的*.cu文件中编写了代码,该项目编译和构建成功,但在执行时出现了R6010错误。我通过将项目属性\CUDA C/C++\Device\Code Generation的默认值从compute_10,sm_10更改为 compute_30,sm_30现在我想在C++项目中使用相同的代码。当我将其添加到一个新的C++项目中,并将尖点路径添加到VC++Include Directories时,项目构建失败,几个文件中出现了许多语法错误: 错误5错误C2144:语法错误:"void"前面应加上";"c: \users\administrator\downloads\android\cusplibrary master\cusplibrary master\pacep\detail\device\spmv\coo_flat.h 164 22 IntelliSense:应为";"c: \Users\Administrator\Downloads\Android\cusplibrary master\cusplibrary master\pacpt\detail\device\spmv\coo_flat.h 272 像这样的错误还有108个。如果这些都是语法错误,为什么我的CUDA解决方案中没有出现任何错误?如何在C++项目中成功构建代码?#include <cuda.h>
#include <cuda_runtime.h>
#include <device_launch_parameters.h>
#include <cusp/krylov/cg.h>
#include <cusp/csr_matrix.h>
#include <cusp/hyb_matrix.h>
#include <cusp/gallery/poisson.h>
#include <cusp/io/matrix_market.h>
#include <cuspprint.h>
#include <fstream>
#include <conio.h>
#include <math.h>
#include <iostream>
#include <windows.h>
using namespace std;
int main()
{
int N = 10000;
int nnz = 1005070;
DWORD dw1 = GetTickCount();
cusp::csr_matrix<int,double,cusp::device_memory> A(N,N,nnz);
DWORD dw2 = GetTickCount();
double dw3 = dw2 - dw1;
cout << "alocating A matrix time : " << dw3 << endl;
ifstream rowOffseFile;
ifstream colIndexFile;
ifstream valuesFile;
ifstream ansFile;
rowOffseFile.open("C:\Users\Administrator\Documents\MATLAB\10000_0.01_RO.txt");
int *rowOffset = NULL;
rowOffset = (int *)malloc((N+1)*sizeof(int));
for (int i = 0; i < N+1; i++)
{
rowOffset[i] = 0;
}
int i =0;
if (rowOffseFile.is_open()) {
while (!rowOffseFile.eof()) {
rowOffseFile >> rowOffset[i];
i+=1;
}
}
rowOffseFile.close();
DWORD dw10 = GetTickCount();
for (int i = 0; i < (N+1); i++)
{
A.row_offsets[i] = rowOffset[i];
}
DWORD dw11 = GetTickCount();
double dw12 =dw11 - dw10;
///////////////////////////////////////////////////////////////////////////////////
colIndexFile.open("C:\Users\Administrator\Documents\MATLAB\10000_0.01_CI.txt");
int *colIndex = NULL;
colIndex = (int *)malloc((nnz)*sizeof(int));
for (int i = 0; i < nnz; i++)
{
colIndex[i] = 0;
}
i =0;
if (colIndexFile.is_open()) {
while (!colIndexFile.eof()) {
colIndexFile >> colIndex[i];
//int temp = (int)output;
//cout<< colIndex[i] << endl;
i+=1;
}
}
colIndexFile.close();
DWORD ex1 = GetTickCount();
for (int i = 0; i < nnz; i++)
{
A.column_indices[i] = colIndex[i];
}
DWORD ex2 = GetTickCount();
double t = ex2-ex1;
/////////////////////////////////////////////////////////////
valuesFile.open("C:\Users\Administrator\Documents\MATLAB\10000_0.01_V.txt");
double *values = NULL;
values = (double *)malloc((nnz)*sizeof(double));
for (int i = 0; i < nnz; i++)
{
values[i] = 0;
}
i =0;
if (valuesFile.is_open()) {
while (!valuesFile.eof()) {
valuesFile >> values[i];
//int temp = (int)output;
//cout<< colIndex[i] << endl;
i+=1;
}
}
valuesFile.close();
DWORD ex3 = GetTickCount();
for (int i = 0; i < nnz; i++)
{
A.values[i] = values[i];
}
DWORD ex4 = GetTickCount();
t = t+ex4-ex3+dw12;
cout << "time spent on initializing: " << t <<endl;
DWORD dw7 = GetTickCount();
cusp::array1d<double,cusp::device_memory> X(N,0.);
cusp::array1d<double,cusp::device_memory> B(N,1.);
DWORD dw8 = GetTickCount();
double dw9 = dw8-dw7;
cout << "time spent on allocating X and B :" << dw9 << endl;
DWORD dw4 = GetTickCount();
cusp::krylov::cg(A,X,B);
DWORD dw5 = GetTickCount();
double dw6 = dw5 - dw4;
std::cout << "time spenton solving : " << dw6 << std::endl;
//cusp::print(X);
ansFile.open("C:\Users\Administrator\Documents\MATLAB\10000_0.01_X.txt");
double *ans = NULL;
ans = (double *)malloc((N)*sizeof(double));
for (int i = 0; i < N; i++)
{
ans[i] = 0;
}
i =0;
if (ansFile.is_open()) {
while (!ansFile.eof()) {
ansFile >> ans[i];
//int temp = (int)output;
//cout<< rowOffset[i] << endl;
i+=1;
}
}
ansFile.close();
double tol = 0;
double temp = 0;
for (int i = 0; i < N; i++)
{
temp = abs(X[i] - ans[i]);
if (temp>tol)
{
tol = temp;
}
}
cout << "max tol is :" << tol << endl;
getch();
return 0;
}
"现在我想在C++编写的项目中使用这段代码,但当我将相同的代码添加到新的C++项目中时…">
这可能行不通。如果这段代码在C++项目中的.cpp中,它将不起作用。
尖点是一个建立在推力之上的模板库,推力是建立在CUDA之上的,因此尖点代码必须由nvcc
编译,即它必须在VS中的CUDA项目中,而不是普通的C++项目中。
所以,回到VS中使用CUDA项目来编写尖端代码。
- 将QT项目导入Visual Studio 2019会给我带来很多LNK2001错误
- 如何将 CLion C++ 项目导入 Visual Studio?
- Visual Studio 中的 CMake 项目:如何添加其他包含和库目录?
- 在Visual Studio C++项目中包含源库的正确方法是什么?
- MS Visual Studio 解决方案结合了非托管C++项目和 C# 项目
- 智能感知不适用于Visual Studio 2017中的cmake项目
- 我可以在Visual Studio 2019上的项目下使用多个主函数吗?
- 如何在不需要LIBCD.lib的情况下在Visual Studio 6中编译C项目
- Visual Studio C++ 项目和引用项目的引用
- 为什么在Visual Studio的OpenCV项目中使用/MT时仍然需要dll?
- 如何在我的 Visual C++ 项目中使用 .a 文件
- 无法使用"generate_vcxproj.bat"生成 GDAL Visual Studio 项目
- Visual Studio 如何在内核模式驱动程序项目中使用C++标准库?
- Visual Studio 中静态库项目之间的未解析外部
- Qt - 为什么Visual Studio 2019在qml资源中添加10Mb文件后无法再编译我的项目?
- 在 Visual Studio 的同一项目中创建多个C++文件
- 如何手动将库添加到Visual Studio 2017项目?
- 在 Visual Studio 中的 1 个项目中编译单个 C++ 源文件
- 如何在 win32 中使用 ActiveX dll C++项目 Visual Studio 2010
- 如何将扩展链接到项目(Visual Studio c++)