栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

cuda编程实例

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

cuda编程实例

矢量求和
include "error.cuh"
#include 
#include 

#define N   100

__global__ void add( int *a, int *b, int *c ) {
    int tid = blockIdx.x;    // this thread handles the data at its thread id
    if (tid < N)
        c[tid] = a[tid] + b[tid];
}

int main( void ) {
    int a[N], b[N], c[N];
    int *dev_a, *dev_b, *dev_c;

    // allocate the memory on the GPU
    CHECK( cudaMalloc( (void**)&dev_a, N * sizeof(int) ) );
    CHECK( cudaMalloc( (void**)&dev_b, N * sizeof(int) ) );
    CHECK( cudaMalloc( (void**)&dev_c, N * sizeof(int) ) );

    // fill the arrays 'a' and 'b' on the CPU
    for (int i=0; i>>( dev_a, dev_b, dev_c );

    // copy the array 'c' back from the GPU to the CPU
    CHECK( cudaMemcpy( c, dev_c, N * sizeof(int),
                              cudaMemcpyDeviceToHost ) );

    // display the results
    for (int i=0; i 
julia集 

在这里插入代码片
任意长度矢量求和

#include "error.cuh"
#include 
#include 
#define N   (33 * 1024)

__global__ void add( int *a, int *b, int *c ) {

//获取线程id,网格大小1D,线程块大小1D,gridDim.x=128,blockDim.x=128
//数据量:33792,线程数:16384

        int tid = threadIdx.x + blockIdx.x * blockDim.x;

//方法1:
        for(int i=0;i>>( dev_a, dev_b, dev_c );

    //将数据从设备传递到主机上
    CHECK( cudaMemcpy( c, dev_c, N * sizeof(int),
                              cudaMemcpyDeviceToHost ) );

    //结果校验
    bool success = true;
    for (int i=0; i 
矩阵处理 


#define N 1000
#define BLOCK_SIZE 32

__managed__ int input_Matrix[N][N];
__managed__ int output_GPU[N][N];
__managed__ int output_CPU[N][N];
__managed__ int output_GPU[N][N];
__managed__ int output_CPU[N][N];
__global__ void kernel(int input_M[N][N], int output_M[N][N])
{

  int x = blockIdx.x * blockDim.x + threadIdx.x;//<>
  int y = blockIdx.y * blockDim.y + threadIdx.y;//>
//x维度变化快相当于内层循环
  if(x>>(input_Matrix, output_GPU);

    CHECK(cudaDeviceSynchronize());
    CHECK(cudaEventRecord(stop_gpu));
    CHECK(cudaEventSynchronize(stop_gpu));

    float elapsed_time_gpu;
    CHECK(cudaEventElapsedTime(&elapsed_time_gpu, start, stop_gpu));
    printf("Time_GPU = %g ms.n", elapsed_time_gpu);
    CHECK(cudaEventDestroy(start));
    CHECK(cudaEventDestroy(stop_gpu));
    //校验
    printf("n***********Check result**************n");
    int ok=1;
    for (int i = 0; i < N; ++i)
    {
        for (int j = 0; j < N; ++j)
        {
            if(fabs(output_GPU[i][j] - output_CPU[i][j])>(1.0e-10))
            {
                ok = 0;
            }

        }
    }


    if(ok)
    {
        printf("Pass!!!n");
    }
    else
    {
        printf("Error!!!n");
    }

    // free memory
    return 0;
}

矩阵转置

点积


常量内存

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/968141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号