手把手教你cuda5.5与VS2010的编译环境搭建

目前版本的cuda是很方便的,它的一个安装里面包括了Toolkit`SDK`document`Nsight等等,而不用你自己去挨个安装,这样也避免了版本的不同步问题。

1 cuda5.5的下载地址,官方网站即可:

     https://developer.nvidia.com/cuda-downloads   在里面选择你所对应的电脑版本即可。

2 VS2010这个没什么说的了,网上各种的免费资源,下载一个不需要钱的就行。

3 Cuda的安装:(win7版32bit)


 

  3.1 cuda的安装文件

  

  直接双击exe文件,弹出后,首先会监测一下你的运行环境,如果找不到Nividia对应的显卡设备,他会提示你是否要继续安装。这里面nvidia的显卡,最起码也是8800以上的,要不是无法编写CUDA的。千万不要电脑上面是intel或者AMD的显卡,却要编写cuda,除非你有钱买一个cuda-x86这个编译器。

  3.2 弹出的对话框直接OK就行,这个是CUDA的一些安装文件,无所谓的:

 

  3.3 他会监测你的电脑是否支持cuda的搭建,等待就行

  3.4 系统检查

  3.5 选择同意并继续

  3.6 推荐先选择自定义安装

  3.7 最主要的是cuda document\cuda Toolkit \cuda samples(SDK),Nsight\图形驱动程序,3D如果需要的话安装,不安装也无所谓。这里主要就是能看见都有什么,免得漏掉了,博主当初就因为选了精简安装,没安装上SDK。

  

  3.7 安装的位置,推荐自己建三个好找的文件夹,不用他默认的路径,免得稍后配置环境变量麻烦。

博主的安装路径为:

  3.8 下一步安装就行了。

至此,cuda的安装就搞定了。


 

4 接下来配置cuda的环境变量,默认安装好后,他会自动帮你设置好2个环境变量,但是最好还自己添加下其他的几个,方便日后配置vs使用

 

上面的两个环境变量是cuda默认配置的,接下来添加

复制代码
CUDA_BIN_PATH  %CUDA_PATH%\bin

CUDA_LIB_PATH  %CUDA_PATH%\lib\Win32

CUDA_SDK_BIN  %CUDA_SDK_PATH%\bin\Win32

CUDA_SDK_LIB  %CUDA_SDK_PATH%\common\lib\Win32

CUDA_SDK_PATH  C:\cuda\cudasdk\common
复制代码

 

添加完就行了

 


 

5 接下来是cuda的安装成功与否的监测了,这个步骤我们用到两个东西,这两个东西,都是cuda为我们准备好的。

deviceQuery.exe 和 bandwithTest.exe

  首先启动cmd DOS命令窗口(博主的cuda安装到c:\cuda文件夹下)

  默认进来的是c:\users\Admistrator\>路径,输入 cd .. 两次,来到c:目录下

  输入dir 找到安装的cuda文件夹

进入Release文件夹后,直接执行bandwithTest.exe

再执行deviceQuery.exe

得到以上信息,因为我的显卡比较古老9300属于第一代的cuda显卡了。Rsult=PASS及说明,都通过了。如果Rsult=Fail 那不好意思,重新安装吧(或者是您的显卡真心不给力)。


 

5 最后就是VS的配置了

  5.1 启动VS2010

  5.2 新建一个win32的控制台工程,空的。

  5.3 右键源文件文件夹->新建项->选择cuda c/c++->新建一个以.cu结尾的文件

  5.4 右键工程-》生成自定义-》选择cuda生成

  5.5 右键test.cu-》属性-》选择cuda c/c++编译器

  5.6 右键工程-》属性-》链接器-》常规-》附加库目录-》添加目录 $(CUDA_PATH_V5_5)\lib\$(Platform);

  5.7 在链接器-》输入中添加 cudart.lib

 

  5.8 在工具-》选项-》文本编辑器-》文件扩展名-》添加cu \cuh两个文件扩展名

 

至此,编译环境的相关搭建就完成了。

 


 

 

下面提供了一段test.cu的代码,供测试使用:

 

复制代码
 1 #include <stdio.h>
 2 #include <stdlib.h>
 3 #include <cuda_runtime.h> 
 4 
 5 #define DATA_SIZE 1024
 6 #define checkCudaErrors(err)  __checkCudaErrors (err, __FILE__, __LINE__)
 7 #define getLastCudaError(msg)  __getLastCudaError (msg, __FILE__, __LINE__)
 8 
 9 int data[DATA_SIZE];
10 
11 ////
12 // These are CUDA Helper functions
13 
14 // This will output the proper CUDA error strings in the event that a CUDA host call returns an error
15 
16 
17 inline void __checkCudaErrors(cudaError err, const char *file, const int line )
18 {
19     if(cudaSuccess != err)
20     {
21         fprintf(stderr, "%s(%i) : CUDA Runtime API error %d: %s.\n",file, line, (int)err, cudaGetErrorString( err ) );
22         return ;        
23     }
24 }
25 
26 // This will output the proper error string when calling cudaGetLastError
27 
28 
29 inline void __getLastCudaError(const char *errorMessage, const char *file, const int line )
30 {
31     cudaError_t err = cudaGetLastError();
32     if (cudaSuccess != err)
33     {
34         fprintf(stderr, "%s(%i) : getLastCudaError() CUDA error : %s : (%d) %s.\n",
35         file, line, errorMessage, (int)err, cudaGetErrorString( err ) );
36         return ;
37     }
38 }
39 
40 // end of CUDA Helper Functions
41 
42 __global__ static void sumOfSquares(int *num, int * result){
43     int sum=0;
44     int i;
45     for(i=0;i<DATA_SIZE;i++) {
46         sum += num[i]*num[i];
47         }
48     *result = sum;
49 }
50 void GenerateNumbers(int *number, int size){
51     for(int i = 0; i < size; i++) {
52         number[i] = rand() % 10;
53         printf("number[%d] is %d\n",i,number[i]);
54     }}
55     
56 int main(){
57 
58         cudaSetDevice(0);
59         cudaDeviceSynchronize();
60         cudaThreadSynchronize();
61 
62         GenerateNumbers(data, DATA_SIZE);
63 
64         int * gpudata, * result;
65         int sum;
66 
67         checkCudaErrors( cudaMalloc((void**) &gpudata, sizeof(int)*DATA_SIZE));
68         checkCudaErrors(cudaMalloc((void**) &result, sizeof(int)));
69         checkCudaErrors(cudaMemcpy(gpudata, data, sizeof(int)*DATA_SIZE,cudaMemcpyHostToDevice));
70 
71         sumOfSquares<<<1, 1, 0>>>(gpudata, result);
72 
73         checkCudaErrors(cudaMemcpy(&sum, result, sizeof(int), cudaMemcpyDeviceToHost));
74 
75         cudaFree(gpudata);
76         cudaFree(result);
77 
78         printf("-----------sum: %d\n",sum);
79 
80         sum = 0;
81         for(int i = 0; i < DATA_SIZE; i++) {
82             sum += data[i] * data[i];
83         }
84         printf("sum (CPU): %d\n", sum);
85 
86         getchar();
87         return 0;
88 }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Android平台上使用FFmpeg需要进行交叉编译,生成适用于Android的FFmpeg库,并将其打包到apk中。以下是手把手你搭建ffmpeg命令行运行环境的步骤: 1.下载NDK 首先需要下载NDK(Native Development Kit),NDK是一个工具包,用于开发C/C++应用程序的原生库。Android Studio自带NDK,也可以从官网下载。 2.下载FFmpeg源代码 从FFmpeg的官网下载源代码,然后解压到本地。 3.配置交叉编译环境 在FFmpeg源代码根目录下创建一个build_android.sh文件,输入以下内容: ```bash #!/bin/bash NDK=$HOME/Android/Sdk/ndk-bundle # NDK路径 SYSROOT=$NDK/platforms/android-21/arch-arm/ # Android SDK路径 TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64 # 工具链路径 function build_one { ./configure \ --prefix=$PREFIX \ --enable-shared \ --disable-static \ --disable-doc \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffprobe \ --disable-ffserver \ --disable-debug \ --disable-network \ --disable-avdevice \ --disable-postproc \ --disable-symver \ --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ --target-os=android \ --arch=arm \ --sysroot=$SYSROOT \ --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ --extra-ldflags="$ADDI_LDFLAGS" \ $ADDITIONAL_CONFIGURE_FLAG make make install } CPU=arm PREFIX=$(pwd)/android/$CPU ADDI_CFLAGS="-marm" ADDI_LDFLAGS="" build_one ``` 其中,NDK是NDK的路径,SYSROOT是Android SDK的路径,TOOLCHAIN是工具链的路径。 4.执行交叉编译命令 在终端中输入以下命令: ```bash chmod +x build_android.sh ./build_android.sh ``` 等待编译完成。编译完成后,在FFmpeg源代码根目录下会生成一个android目录,其中包含了交叉编译生成的FFmpeg库。 5.创建Android Studio项目 打开Android Studio,创建一个新项目。在app/build.gradle文件中添加以下代码: ```groovy android { compileSdkVersion 28 defaultConfig { applicationId "com.example.ffmpegdemo" minSdkVersion 21 targetSdkVersion 28 versionCode 1 versionName "1.0" testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner" } buildTypes { release { minifyEnabled false proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro' } } externalNativeBuild { cmake { cppFlags "" abiFilters "armeabi-v7a" arguments "-DANDROID_ARM_NEON=TRUE" } } sourceSets.main { jniLibs.srcDirs = ['src/main/jniLibs'] } ndk { abiFilters "armeabi-v7a" } } ``` 其中,externalNativeBuild和ndk是用于指定使用交叉编译生成的库的配置。 6.将FFmpeg库打包到apk中 将交叉编译生成的库复制到项目的app/src/main/jniLibs/armeabi-v7a/目录下。在app/build.gradle文件中添加以下代码: ```groovy android { sourceSets { main { jniLibs.srcDirs = ['src/main/jniLibs'] } } } ``` 然后在终端中输入以下命令: ```bash ./gradlew assembleDebug ``` 等待打包完成。打包完成后,在项目的build/outputs/apk/debug/目录下会生成一个apk文件,其中包含了FFmpeg库。 至此,就完成了搭建ffmpeg命令行运行环境的所有步骤。可以通过在MainActivity中执行FFmpeg命令来测试FFmpeg是否正常工作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值