簡體   English   中英

CUDA和C ++簡單項目

[英]CUDA and C++ simple project

我正在嘗試創建一個CUDA + C ++項目。 基本上是一個.cpp項目,它需要一些CUDA內核。 所以我只是按照這里的例子,它基本上添加了兩個向量。 內核執行求和工作: http//blog.norture.com/2012/10/gpu-parallel-programming-in-vs2012-with-nvidia-cuda/

這是代碼,

#include <iostream>
#include "cuda_runtime.h"
#include "cuda.h"
#include "device_launch_parameters.h"

using namespace std;

__global__ void saxpy(int n, float a, float *x, float *y)
{
  int i = blockIdx.x*blockDim.x + threadIdx.x;
  if (i < n) y[i] = a*x[i] + y[i];
}

int main(void)
{
  int N = 1<<20;
  float *x, *y, *d_x, *d_y;
  x = (float*)malloc(N*sizeof(float));
  y = (float*)malloc(N*sizeof(float));

  cudaMalloc(&d_x, N*sizeof(float));
  cudaMalloc(&d_y, N*sizeof(float));

  for (int i = 0; i < N; i++) {
    x[i] = 1.0f;
    y[i] = 2.0f;
  }

  cudaMemcpy(d_x, x, N*sizeof(float), cudaMemcpyHostToDevice);
  cudaMemcpy(d_y, y, N*sizeof(float), cudaMemcpyHostToDevice);

  // Perform SAXPY on 1M elements
  saxpy<<<(N+255)/256, 256>>>(N, 2.0, d_x, d_y);

  cudaMemcpy(y, d_y, N*sizeof(float), cudaMemcpyDeviceToHost);

  float maxError = 0.0f;
  for (int i = 0; i < N; i++)
    maxError = max(maxError, abs(y[i]-4.0f));
  cout << "Max error: " << maxError;
}

當我建立時,我得到了這個錯誤:

1>------ Rebuild All started: Project: CUDATest001, Configuration: Debug x64 ------
1>  CUDATestZeroZeroOne.cpp
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol threadIdx
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol blockIdx
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol blockDim
1>D:\Projects\CUDATest001\x64\Debug\CUDATest001.exe : fatal error LNK1120: 3 unresolved externals
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

如果行saxpy<<<(N+255)/256, 256>>>(N, 2.0, d_x, d_y); 被注釋掉了,然后出現了這個錯誤:

1>------ Rebuild All started: Project: CUDATest001, Configuration: Debug x64 ------
1>  CUDATestZeroZeroOne.cpp
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol threadIdx
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol blockIdx
1>CUDATestZeroZeroOne.obj : error LNK2001: unresolved external symbol blockDim
1>D:\Projects\CUDATest001\x64\Debug\CUDATest001.exe : fatal error LNK1120: 3 unresolved externals
========== Rebuild All: 0 succeeded, 1 failed, 0 skipped ==========

我使用的是vs2012 + CUDA 5.5。 我從一個空的C ++ win32控制台項目開始,添加了一個包含上述所有代碼的.cpp文件。 我現在還不確定它應該是.cu還是.cpp文件?

任何人都知道如何使這項工作? 謝謝。

在項目的上下文菜單中,單擊“ Build Customizations 打開CUDA 5.5目標。

.cpp文件的上下文菜單中,單擊“ Rename並將其Rename命名為.cu

.cu文件的上下文菜單中(剛剛重命名),選擇“ Properties 然后轉到General並確保Item Type設置為CUDA C/C++

重建。

當您啟動一個新的CUDA項目時,您可以選擇Templates > NVIDIA > CUDA 5.5 > CUDA 5.5 Runtime來獲得一個應該在沒有任何修改的情況下編譯的項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM