VS2017 CUDA编程学习实例2:CUDA实现秩排序
生活随笔
收集整理的這篇文章主要介紹了
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实现秩排序的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: QueryDSL
- 下一篇: QImage 图像处理