cuda:cmake编译cuda

 http://www.cmake.org/

下载了最新的cmake,调用了里面的一个FindCUDA.cmake,完成了自己的第一次使用cmake编译cuda代码。具体步骤如下:

1.下载最新版的cmake(其实只要有FindCUDA.cmake这个文件,你就可以编译cuda与c或者c++混合的代码文件了)

2.因为初次测试,所以我把所有的文件都放在同一个文件夹下面:c_cpp_cu1.cu;c_cpp_cu3.cpp两个源文件加一个CMakeLists.txt文件;

3.CmakeLists.txt

CMAKE_MINIMUM_REQUIRED(VERSION 2.8)
PROJECT(test_cuda)
INCLUDE(/..../Downloads/cmake-3.2.2-Linux-x86_64/share/cmake-3.2/Modules/FindCUDA.cmake)
CUDA_ADD_EXECUTABLE(test_cuda 
c_cpp_cu3.cpp
c_cpp_cu1.cu)

4.c_cpp_cu3.cpp

    #include <iostream>  
    using namespace std;    
    extern "C" int func(); //注意这里的声明  
    int main()  
    {  
        func();  
        return 0;  
    }  

5.c_cpp_cu1.cu

#include <stdio.h>
#include <stdlib.h>
#include <cuda_runtime.h>

#define ROWS 32
#define COLS 16
#define CHECK(res) if(res!=cudaSuccess){exit(-1);}
__global__ void Kerneltest(int **da, unsigned int rows, unsigned int cols)
{
  unsigned int row = blockDim.y*blockIdx.y + threadIdx.y;
  unsigned int col = blockDim.x*blockIdx.x + threadIdx.x;
  if (row < rows && col < cols)
  {
    da[row][col] = row*cols + col;
  }
}

extern "C" int func() // 注意这里定义形式
{
  int **da = NULL;
  int **ha = NULL;
  int *dc = NULL;
  int *hc = NULL;
  cudaError_t res;
  int r, c;
  bool is_right=true;

  res = cudaMalloc((void**)(&da), ROWS*sizeof(int*));CHECK(res)
  res = cudaMalloc((void**)(&dc), ROWS*COLS*sizeof(int));CHECK(res)
  ha = (int**)malloc(ROWS*sizeof(int*));
  hc = (int*)malloc(ROWS*COLS*sizeof(int));

  for (r = 0; r < ROWS; r++)
  {
    ha[r] = dc + r*COLS;
  }
  res = cudaMemcpy((void*)(da), (void*)(ha), ROWS*sizeof(int*), cudaMemcpyHostToDevice);CHECK(res)
  dim3 dimBlock(16,16);
  dim3 dimGrid((COLS+dimBlock.x-1)/(dimBlock.x), (ROWS+dimBlock.y-1)/(dimBlock.y));
  Kerneltest<<<dimGrid, dimBlock>>>(da, ROWS, COLS);
  res = cudaMemcpy((void*)(hc), (void*)(dc), ROWS*COLS*sizeof(int), cudaMemcpyDeviceToHost);CHECK(res)

  for (r = 0; r < ROWS; r++)
  {
    for (c = 0; c < COLS; c++)
    {   
      printf("%4d ", hc[r*COLS+c]);
      if (hc[r*COLS+c] != (r*COLS+c))
      {   
        is_right = false;
      }   
    }   
    printf("\n");
  }
  printf("the result is %s!\n", is_right? "right":"false");

  cudaFree((void*)da);
  cudaFree((void*)dc);
  free(ha);
  free(hc);
//  getchar();
  return 0;
}

完成,生成一大堆文件+test_cuda的可执行文件

 

  • 6
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
要使用CMake编译CUDA代码,你需要按照以下步骤进行操作: 1. 确保你已经安装了CUDA工具包,并且CUDA的bin目录已经添加到了系统的环境变量中。 2. 创建一个CMakeLists.txt文件,用于描述你的项目的构建过程。在该文件中,你需要指定CUDA的相关设置。 以下是一个示例的CMakeLists.txt文件: ``` cmake_minimum_required(VERSION 3.17) project(your_project_name CUDA) # 设置CUDA的相关设置 find_package(CUDA REQUIRED) include_directories(${CUDA_INCLUDE_DIRS}) set(CUDA_NVCC_FLAGS ${CUDA_NVCC_FLAGS};-O3 -arch=sm_35) # 添加你的源文件 add_executable(your_executable_name your_source_files.cu) ``` 在上述示例中,通过`find_package(CUDA REQUIRED)`来查找CUDA,并使用`include_directories`添加CUDA的头文件目录。 通过`set(CUDA_NVCC_FLAGS ...)`设置NVCC编译选项,例如指定优化级别和计算能力。 通过`add_executable`添加你的CUDA源文件。 3. 在项目的根目录下创建一个build目录,然后进入该目录。 4. 运行CMake来生成构建文件。可以使用下面的命令: ``` cmake .. ``` 这将根据CMakeLists.txt文件生成适用于你的操作系统的构建文件。 5. 运行构建命令来编译你的项目。可以使用下面的命令: ``` cmake --build . ``` 这将根据生成的构建文件进行编译。 完成上述步骤后,你的CUDA项目应该成功编译。请注意,以上仅提供了一个基本示例,你可能需要根据你的项目的实际情况进行适当的修改。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值