博主自己学习,仅此记录,并方便学过c、已经配置好cuda的朋友交流学习。(我机子cuda9.0)
测试自己电脑性能
直接在cuda文件夹下搜索deviceQuery,在这个目录下找到sln文档(注意,对应你的vs版本,如下图一),在vs里生成exe文件,运行即可。
第二行那个就是算力,通常要大于3才可以,低于三不清楚,还有显卡其他信息。
第一个应用程序
计算一个参考点与N个0-1区间内等距分布的点的距离。
一共有三个程序,分别是aux_functions.h,aux_functions.cpp和main.cpp
main.cpp
#include "aux_functions.h"
#define N 64
int main()
{
float in[N] = { 0.0f };
float out[N] = { 0.0f };
// choose a reference value from which distances are measured
const float ref = 0.5f;
for (size_t i = 0; i < N-1; i++)
{
in[i] = scale(i, N);
}
distanceArray(out, in, ref, N);
return 0;
}
aux_functions.h
#pragma once
#include "aux_functions.h"
// 产生0-1共N个数据流
float scale(int i, int n);
float distance(float x1, float x2);
void distanceArray(float *out, float *in, float ref, int n);
这里 ,解释一下#pragma once ,其实就是C++头文件保护符和变量的声明定义,避免二次重定义~~可以参考:https://blog.csdn.net/wxc237786026/article/details/38377221
aux_functions.cpp
#include <math.h>
float scale(int i, int n)
{
// 强制类型转换,使结果变为float
return ((float)i / n - 1);
}
float distance(float x1, float x2)
{
return abs(x1 - x2);
}
void distanceArray(float *out, float *in, float ref, int n)
{
// 精髓
// out和in 都是数组指针
for (size_t i = 0; i < n; i++)
{
out[i] = distance(in[i], ref);
}
}
程序比较简单,结合注释看一下就行了~~
参考:《cuda高性能并行计算》