1. 程式人生 > >CUDA程式設計--簡單程式--向量加一

CUDA程式設計--簡單程式--向量加一

配置

配置的話,根據網上的教程配置就好了,基本上都沒問題。

程式碼

  • 下面是將某個陣列的位置都加一個一。
#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