日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

VS2017 CUDA编程学习实例2:CUDA实现秩排序

發(fā)布時(shí)間:2023/12/20 编程问答 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 VS2017 CUDA编程学习实例2:CUDA实现秩排序 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章目錄

  • 前言
  • 1. C++ CUDA實(shí)現(xiàn)秩排序
  • 3. 執(zhí)行結(jié)果
  • 總結(jié)
  • 學(xué)習(xí)資料

VS2017 CUDA編程學(xué)習(xí)1:CUDA編程兩變量加法運(yùn)算
VS2017 CUDA編程學(xué)習(xí)2:在GPU上執(zhí)行線程
VS2017 CUDA編程學(xué)習(xí)3:CUDA獲取設(shè)備上屬性信息
VS2017 CUDA編程學(xué)習(xí)4:CUDA并行處理初探 - 向量加法實(shí)現(xiàn)
VS2017 CUDA編程學(xué)習(xí)5:CUDA并行執(zhí)行-線程
VS2017 CUDA編程學(xué)習(xí)6: GPU存儲(chǔ)器架構(gòu)
VS2017 CUDA編程學(xué)習(xí)7:線程同步-共享內(nèi)存
VS2017 CUDA編程學(xué)習(xí)8:線程同步-原子操作
VS2017 CUDA編程學(xué)習(xí)9:常量內(nèi)存
VS2017 CUDA編程學(xué)習(xí)10:紋理內(nèi)存
VS2017 CUDA編程學(xué)習(xí)實(shí)例1:CUDA實(shí)現(xiàn)向量點(diǎn)乘
VS2017 CUDA編程學(xué)習(xí)11:CUDA性能測量
VS2017 CUDA編程學(xué)習(xí)12:CUDA流


前言

今天跟大家分享如何使用CUDA實(shí)現(xiàn)秩排序。


1. C++ CUDA實(shí)現(xiàn)秩排序

這里使用了共享內(nèi)存和同步的概念實(shí)現(xiàn)秩排序

詳細(xì)代碼如下所示:

#include <stdio.h> #include <iostream> #include <cuda.h> #include <cuda_runtime.h> //#include <cuda_runtime_api.h> #include <device_launch_parameters.h>#ifndef __CUDACC__ #define __CUDACC__ #endif#define ARRAY_SIZE 5 #define THREADS_PER_BLOCK 5__global__ void rankSort(int* d_a, int* d_b) {int count = 0;int tid = threadIdx.x;int ttid = threadIdx.x + blockIdx.x * blockDim.x;int val = d_a[ttid];__shared__ int cache[THREADS_PER_BLOCK];for (int i = tid; i < ARRAY_SIZE; i += THREADS_PER_BLOCK){cache[tid] = d_a[i];//等待當(dāng)前塊所有線程完成共享內(nèi)存數(shù)據(jù)填充__syncthreads();//統(tǒng)計(jì)共享內(nèi)存中小于當(dāng)前值得數(shù)量for (int j = 0; j < THREADS_PER_BLOCK; j++){if (val > cache[j]){count++;//等待所有線程完成統(tǒng)計(jì)工作__syncthreads();}}}d_b[count] = val; }int main() {//定義主機(jī)(CPU)和設(shè)備(GPU)變量int h_a[ARRAY_SIZE] = { 5, 9, 3, 4, 8 };int h_b[ARRAY_SIZE];int *d_a, *d_b;//分配設(shè)備內(nèi)存cudaMalloc(&d_a, ARRAY_SIZE * sizeof(int));cudaMalloc(&d_b, ARRAY_SIZE * sizeof(int));//拷貝數(shù)據(jù):從CPU到GPUcudaMemcpy(d_a, h_a, ARRAY_SIZE * sizeof(int), cudaMemcpyHostToDevice);//調(diào)用內(nèi)核函數(shù)rankSort << <ARRAY_SIZE / THREADS_PER_BLOCK, THREADS_PER_BLOCK >> > (d_a, d_b);//等待內(nèi)核函數(shù)運(yùn)行完成cudaDeviceSynchronize();//拷貝數(shù)據(jù):從GPU到CPUcudaMemcpy(h_b, d_b, ARRAY_SIZE * sizeof(int), cudaMemcpyDeviceToHost);//打印秩排序結(jié)果printf("秩排序的結(jié)果:\n");for (int i = 0; i < ARRAY_SIZE; i++){printf("%d\n", h_b[i]);}//釋放GPU內(nèi)存cudaFree(d_a);cudaFree(d_b);system("pause");return 0; }

3. 執(zhí)行結(jié)果


總結(jié)

為了更好的理解CUDA編程的理論知識(shí),實(shí)踐是必不可少的,只有更多的實(shí)踐才能更好的理解新的知識(shí),實(shí)踐出真知啊。

學(xué)習(xí)資料

《基于GPU加速的計(jì)算機(jī)視覺編程》

總結(jié)

以上是生活随笔為你收集整理的VS2017 CUDA编程学习实例2:CUDA实现秩排序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。