cuda 编 程(五) c++版本demo

#include <math.h>
#include <stdlib.h>
#include <stdio.h>
#include <iostream>
using namespace std;

const double EPSILON = 1.0e-15;
const double a = 1.23;
const double b = 2.34;
const double c = 3.57;
void add(const double *x, const double *y, double *z, const int N);
void check(const double *z, const int N);

int main(void)
{
    const int N = 100000000;
    const int M = sizeof(double) * N;
    double *x = (double*) malloc(M);
    double *y = (double*) malloc(M);
    double *z = (double*) malloc(M);

    for (int n = 0; n < N; ++n)
    {
        x[n] = a;
        y[n] = b;
    }

    add(x, y, z, N);
    check(z, N);
    

    /***
    for (int n = 0; n < N; ++n)
    {

    cout<<z[n]<<endl;
    }
    ***/



    free(x);
    free(y);
    free(z);
    return 0;
}

void add(const double *x, const double *y, double *z, const int N)
{
    for (int n = 0; n < N; ++n)
    {
        z[n] = x[n] + y[n];
    }
}

void check(const double *z, const int N)
{
    bool has_error = false;
    for (int n = 0; n < N; ++n)
    {
        if (fabs(z[n] - c) > EPSILON)
        {
            has_error = true;
        }
    }
    printf("%s\n", has_error ? "Has errors" : "No errors");
}

g++ add.cpp -o addo
./addo
CUDA C++ 中的快速排序是一个经典的并行算法示例,它可以有效地利用GPU的并行计算能力。以下是一个简单的快速排序实现框架,使用CUDA的`thrust::sort`函数,这是Thrust库的一部分,提供了对CUDA设备的并行排序支持: ```cpp #include <thrust/host_vector.h> #include <thrust/device_vector.h> #include <thrust/sort.h> __global__ void quickSort(int* data, int start, int end) { if (start < end) { int pivot = data[start]; int i = start, j = end; while (i < j) { while (i < j && data[j] >= pivot) { j--; } data[i++] = data[j]; while (i < j && data[i] <= pivot) { i++; } data[j--] = data[i]; } data[i] = pivot; quickSort<<<1, 256>>>(data, start, i - 1); quickSort<<<1, 256>>>(data, i + 1, end); } } void quickSortCuda(int* h_data, size_t n, thrust::device_vector<int>& d_data) { d_data = thrust::copy(h_data, h_data + n, d_data); quickSort<<<(n + 255) / 256, 256>>>(d_data.data(), 0, n - 1); // 保证足够的blocks和threads thrust::copy(d_data.begin(), d_data.end(), h_data); } int main() { int h_data[] = {9, 7, 5, 11, 12, 2, 14, 3}; size_t n = sizeof(h_data) / sizeof(h_data[0]); thrust::host_vector<int> h_vec(n, h_data); thrust::device_vector<int> d_vec; quickSortCuda(h_vec.data(), n, d_vec); for (size_t i = 0; i < n; ++i) { std::cout << h_data[i] << " "; } return 0; } ``` 这个示例首先将Host Memory的数据复制到Device Memory,然后在GPU上并行执行快速排序,最后再把结果从Device Memory复制回Host Memory。注意,这里假设了一个块大小为256(`256`),你可以根据实际情况调整这个值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值