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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

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

文章目錄

  • 前言
  • 1. C++ CUDA實現秩排序
  • 3. 執行結果
  • 總結
  • 學習資料

VS2017 CUDA編程學習1:CUDA編程兩變量加法運算
VS2017 CUDA編程學習2:在GPU上執行線程
VS2017 CUDA編程學習3:CUDA獲取設備上屬性信息
VS2017 CUDA編程學習4:CUDA并行處理初探 - 向量加法實現
VS2017 CUDA編程學習5:CUDA并行執行-線程
VS2017 CUDA編程學習6: GPU存儲器架構
VS2017 CUDA編程學習7:線程同步-共享內存
VS2017 CUDA編程學習8:線程同步-原子操作
VS2017 CUDA編程學習9:常量內存
VS2017 CUDA編程學習10:紋理內存
VS2017 CUDA編程學習實例1:CUDA實現向量點乘
VS2017 CUDA編程學習11:CUDA性能測量
VS2017 CUDA編程學習12:CUDA流


前言

今天跟大家分享如何使用CUDA實現秩排序。


1. C++ CUDA實現秩排序

這里使用了共享內存和同步的概念實現秩排序

詳細代碼如下所示:

#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];//等待當前塊所有線程完成共享內存數據填充__syncthreads();//統計共享內存中小于當前值得數量for (int j = 0; j < THREADS_PER_BLOCK; j++){if (val > cache[j]){count++;//等待所有線程完成統計工作__syncthreads();}}}d_b[count] = val; }int main() {//定義主機(CPU)和設備(GPU)變量int h_a[ARRAY_SIZE] = { 5, 9, 3, 4, 8 };int h_b[ARRAY_SIZE];int *d_a, *d_b;//分配設備內存cudaMalloc(&d_a, ARRAY_SIZE * sizeof(int));cudaMalloc(&d_b, ARRAY_SIZE * sizeof(int));//拷貝數據:從CPU到GPUcudaMemcpy(d_a, h_a, ARRAY_SIZE * sizeof(int), cudaMemcpyHostToDevice);//調用內核函數rankSort << <ARRAY_SIZE / THREADS_PER_BLOCK, THREADS_PER_BLOCK >> > (d_a, d_b);//等待內核函數運行完成cudaDeviceSynchronize();//拷貝數據:從GPU到CPUcudaMemcpy(h_b, d_b, ARRAY_SIZE * sizeof(int), cudaMemcpyDeviceToHost);//打印秩排序結果printf("秩排序的結果:\n");for (int i = 0; i < ARRAY_SIZE; i++){printf("%d\n", h_b[i]);}//釋放GPU內存cudaFree(d_a);cudaFree(d_b);system("pause");return 0; }

3. 執行結果


總結

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

學習資料

《基于GPU加速的計算機視覺編程》

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。