CUDA程式設計--簡單程式--向量加一
阿新 • • 發佈:2018-12-23
配置
配置的話,根據網上的教程配置就好了,基本上都沒問題。
程式碼
- 下面是將某個陣列的位置都加一個一。
#include "cuda_runtime.h"
#include "device_launch_parameters.h"
#include <iostream>
#include <stdio.h>
// 核函式:每個執行緒負責一個分量的加法
__global__ void add_one(int *a, int N)
{
int idx = threadIdx.x; // 獲取執行緒ID
if (idx < N) {
a[idx] = a[idx] + 1;
printf("%d in %d\n", a[idx], idx);
}
}
cudaError_t addWithCuda(int *c, size_t size);
int main()
{
const int N = 5;
int a[N] = { 1, 2, 3, 4, 5 };
cudaError_t cudaStatus = addWithCuda(a, N);
for (int i = 0; i < N; ++i) printf("%d ", a[i]);
printf("\n");
cudaStatus = cudaThreadExit();
return 0;
}
cudaError_t addWithCuda(int * a, size_t size)
{
int *dev_a = 0;
cudaError_t cudaStatus;
cudaStatus = cudaMalloc((void**)&dev_a, size * sizeof(int));
cudaStatus = cudaMemcpy(dev_a, a, size * sizeof(int), cudaMemcpyHostToDevice);
add_one <<<1, size>> > (dev_a, size);
cudaStatus = cudaMemcpy(a, dev_a, size * sizeof(int), cudaMemcpyDeviceToHost);
cudaFree(dev_a);
return cudaStatus;
}
效果
2 in 0
3 in 1
4 in 2
5 in 3
6 in 4
2 3 4 5 6