前几天看见了一篇用cuda写的奇偶冒泡排序的文章,自己也写了一个,小妹第一次写博文,不足之处请见谅,我的环境是cuda5.5加vs2010
#include<stdio.h>
#include<stdlib.h>
#include<cuda_runtime.h>
#include<iostream>
#include"cuda.h"
#define HANDLE_ERROR
#define N 100
__global__ void kernel(int* num) {
int tid = threadIdx.x;
int a;
int i = 0;
for(i = 0; i < N/2; i++)
{
if((2*tid + 1) < N)
{
if(num[2*tid]>num[2*tid + 1])
{
a = num[2*tid];
num[2*tid] = num[2*tid + 1];
num[2*tid + 1] = a;
}
}
__syncthreads();
if((2*tid +2) < N)
{
if(num[2*tid+1]>num[2*tid + 2])
{
a = num[2*tid+1];
num[2*tid+1] = num[2*tid + 2];
num[2*tid + 2] = a;
}
}
__syncthreads();
}
}
int main( void ) {
int num[N];
int *dev_num;
//填充主机内存
int i;
for(i = 0; i<N; i++)
{
num[i] = rand()%100;
//num[i] = 10-i;
}
//在GPU上分配内存
cudaMalloc((void**)&dev_num,N*sizeof(int));
//将num复制到GPU上
cudaMemcpy(dev_num, num, N*sizeof(int),cudaMemcpyHostToDevice);
cudaPrintfInit();
kernel<<<1,N/2>>>(dev_num);
cudaPrintfDisplay(stdout, true);
cudaMemcpy(num, dev_num, N*sizeof(int),cudaMemcpyDeviceToHost);
cudaPrintfEnd();
for(i = 0; i<N; i++)
{
printf("%d\n",num[i]);
}
cudaFree(dev_num);
// printf( "Hello, World!\n" );
system("pause");
return 0;
}