[CUDA] 使用thrust::sort()函数排序

一、简介

本文介绍了如何使用thrust::sort()函数对device_vector<int>容器,或者int*指针表示的内存(显存)处的数据进行排序。

二、示例代码

1. 排序 device_vector<int>中的数据

main.cu文件内容:

#include <iostream>
#include <cuda_runtime.h>
#include <thrust/device_vector.h>
#include <thrust/device_ptr.h>
#include <thrust/host_vector.h>
#include <thrust/sort.h>
#include <algorithm>
#include <random>
#include <chrono>using namespace std;
int main()
{int min = 0, max = 100;random_device seed;                           // 硬件生成随机数种子ranlux48 engine(seed());                      // 利用种子生成随机数引擎uniform_int_distribution<> distrib(min, max); // 设置随机数范围,并为均匀分布int n = 10;thrust::host_vector<int> data_host(n);thrust::device_vector<int> data_device(n);/* 在host_vector上生成随机数 */for (int i = 0; i < n; i++){data_host[i] = distrib(engine);}std::cout << "Before sorting:\n";for (int i = 0; i < n; i++){std::cout << data_host[i] << ",";}std::cout << "\n";/* 在device端进行排序 */data_device = data_host;                              // 将host端的数据拷贝到device端thrust::sort(data_device.begin(), data_device.end()); // 进行排序data_host = data_device;                              // 将排序完成后的device端的数据拷贝回host端std::cout << "After sorting:\n";for (int i = 0; i < n; i++){std::cout << data_host[i] << ",";}std::cout << "\n";return 0;
}

CMakeLists.txt文件内容:

cmake_minimum_required(VERSION 3.8 FATAL_ERROR)
project(HelloWolrd LANGUAGES CXX CUDA)
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
# CUDA设置
find_package(CUDA REQUIRED)
# 指定生成目标
cuda_add_executable(HelloWorld main.cu)

程序输出结果:

Before sorting:
85,73,8,0,77,68,93,31,85,76,
After sorting:
0,8,31,68,73,76,77,85,85,93,

2. 排序 int*指针中的数据

main.cu文件内容:

#include <iostream>
#include <cuda_runtime.h>
#include <thrust/device_vector.h>
#include <thrust/device_ptr.h>
#include <thrust/host_vector.h>
#include <thrust/sort.h>
#include <algorithm>
#include <random>
#include <chrono>using namespace std;
int main()
{int min = 0, max = 100;random_device seed;                           // 硬件生成随机数种子ranlux48 engine(seed());                      // 利用种子生成随机数引擎uniform_int_distribution<> distrib(min, max); // 设置随机数范围,并为均匀分布int n = 10;int *data_host = new int[n];/* 生成随机数 */for (int i = 0; i < n; i++){data_host[i] = distrib(engine);}std::cout << "Befor sorting:\n";for (int i = 0; i < n; i++){std::cout << data_host[i] << ",";}std::cout << "\n";    /*数据拷贝到device端*/int *data_device = nullptr;cudaMalloc((void **)&data_device, n * sizeof(int));cudaMemcpy(data_device, data_host, n * sizeof(int), cudaMemcpyHostToDevice);/*使用thrust::sort()排序*/// thrust::sort()只支持迭代器,因此需要将int*指针转为device_ptr<int>容器类型thrust::device_ptr<int> t_ptr(data_device);thrust::sort(t_ptr, t_ptr + n);/*数据拷贝回host端*/cudaMemcpy(data_host, data_device, n * sizeof(int), cudaMemcpyDeviceToHost);std::cout << "After sorting:\n";for (int i = 0; i < n; i++){std::cout << data_host[i] << ",";}std::cout << "\n";/*释放内存*/delete[] data_host;cudaFree(data_device);return 0;
}

CMakeLists.txt文件内容同上。
程序输出结果:

Befor sorting:
5,82,71,3,90,69,8,0,23,81,
After sorting:
0,3,5,8,23,69,71,81,82,90,

三、自定义排序

更多自定义排序请参考thrust官方代码仓库:NVIDIA/thrust。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/739624.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端页面访问后台hiveserver2,阶段性报错

1、运行环境 Windows11下安装VMware&#xff0c;VMware下安装CentOS7 Linux系统&#xff0c;三台虚拟机集群部署hadoop&#xff0c;安装hive&#xff1b; 在Linux下安装Eclipse&#xff0c;创建maven工程&#xff0c;使用hive-jdbc-2.3.2访问hiveserver2 2、在windows11下&…

Python从0到100(四):Python中的运算符介绍

前言&#xff1a; 零基础学Python&#xff1a;Python从0到100最新最全教程。 想做这件事情很久了&#xff0c;这次我更新了自己所写过的所有博客&#xff0c;汇集成了Python从0到100&#xff0c;共一百节课&#xff0c;帮助大家一个月时间里从零基础到学习Python基础语法、Pyth…

就业班 2401--3.12 Linux Day16 PXE布置——自动化装系统

什么是PXE&#xff1f; PXE&#xff0c;全名Pre-boot Execution Environment&#xff0c;预启动执行环境&#xff1b;通过网络接口启动计算机&#xff0c;不依赖本地存储设备&#xff08;如硬盘&#xff09;或本地已安装的操作系统&#xff1b;由Intel和Systemsoft公司于1999年…

云游戏发行是什么?云游戏发行的演进历程

云游戏发行是一系列基于云游戏技术的游戏发行策略或行为&#xff0c;融合云试玩、云微端、可玩广告、跨端移植等技术&#xff0c;从而在传统游戏发行生态的基础上实现更为卓越的发行效果。 云游戏发行出现的原因 近年来&#xff0c;游戏市场出现负增长。其原因一方面在于游戏版…

一套plm系统大约多少钱?彩虹PLM系统

一套PLM&#xff08;产品生命周期管理&#xff09;系统的价格因多个因素而异&#xff0c;包括企业规模、需求复杂性、系统功能、技术支持和厂商选择等。一般来说&#xff0c;面向小型和微型企业的PLM产品&#xff0c;其价位在5万元~15万元左右&#xff1b;面向中型企业的中端PL…

【数据结构学习笔记】冒泡排序

【数据结构学习笔记】冒泡排序 参考电子书&#xff1a;排序算法精讲 算法原理 对未排序的元素进行多次遍历&#xff0c;每次遍历都将相邻的两个元素进行比较&#xff0c;如果它们的顺序错误就交换它们的位置。在每一轮遍历后&#xff0c;最大的元素会被冒泡到序列的末端。这…

【Docker】容器的生态系统

Docker提供了一整套技术支持&#xff0c;包括核心技术、平台技术、支持技术。 核心技术 容器核心技术是指能让Container&#xff08;容器&#xff09;在host&#xff08;集群、主机&#xff09;上运行起来的那些技术。 1&#xff09;容器规范&#xff1a;OCI&#xff08;runt…

【Java】读取手机文件名称

首先&#xff0c;确保你已经连接了你的手机并已启用 USB 调试模式。然后&#xff0c;你需要使用 Android Debug Bridge&#xff08;ADB&#xff09;工具来获取手机文件列表。以下是一个简单的 Java 代码片段&#xff0c;使用 ProcessBuilder 调用 ADB 命令来获取文件列表&#…

InnoDB和MyISAM存储引擎

InnoDB mysql默认存储引擎 支持事务&#xff0c;行级锁&#xff08;并发量大&#xff09;&#xff0c;外键约束&#xff0c;容量大&#xff0c;支持缓存&#xff0c;支撑主键自增&#xff0c; 全文检索&#xff0c;不存储表的总行数&#xff0c;需要sql逐行统计 MyISAM 不…

QString的参数传递

在 Qt 框架中,QString 是一个非常常用的类,用于处理字符串。当涉及到 QString 的参数传递时,通常需要考虑以下几点: 按值传递 (Pass by Value): 当你将一个 QString 对象作为参数传递给一个函数时,你可以直接传递它的值。这种情况下,函数会接收这个 QString 的一个副本。…

沙发3d模型制作过程---模大狮模型网

制作沙发的3D模型通常需要经历以下步骤&#xff1a; 概念设计&#xff1a; 首先&#xff0c;根据设计师或客户的需求&#xff0c;进行概念设计。这包括通过手绘草图或数字绘图软件创建初始设计概念。 建模&#xff1a; 使用专业的3D建模软件(例如Blender、Maya、3ds Max)进行建…

ATFX汇市:美国2月CPI数据来袭,高通胀问题或进一步缓解

ATFX汇市&#xff1a;今日20:30&#xff0c;美国劳工部将公布2月未季调核心CPI年率数据&#xff0c;前值为3.9%&#xff0c;预期值3.7%&#xff0c;预期将下降0.2个百分点。历史数据看&#xff0c;美国核心CPI年率处于快速下降状态&#xff0c;去年3月份数据仍高达5.6%&#xf…

CSS 用 flex 布局绘制骰子

<!DOCTYPE html> <html><head><meta charset"utf-8"><title></title><style>.box {height: 100px;width: 100px;border: 2px solid grey;border-radius: 10px;display: flex;justify-content: center; // 水平居中/* alig…

[论文笔记] ICLR 2022 | 减少跨语言表示差异,字节跳动AI Lab通过流形混合增强跨语言迁移

论文地址:https://openreview.net/pdf?id=OjPmfr9GkVv代码地址:https://github.com/yhy1117/X-Mixup 字节跳动人工智能实验室和加利福尼亚大学圣塔芭芭拉分校的研究者提出了 跨语言流形混合(X-Mixup)方法为目标语言提供 “折衷” 的表示,让模型自适应地校准表示差…

LLM(大语言模型)常用评测指标-MAP@R

MAPR (Mean Average Precision at R) 是一种用于评估信息检索系统或排序模型效果的评价指标。它特别适用于那些返回一组相关结果的情况&#xff0c;例如搜索引擎或推荐系统。这里的“R”代表返回的相关结果的数量。MAPR 考虑了结果的排名和相关性两个因素。 计算方法 计算平…

基础小白快速入门web前端开发技术------->hbuilder的下载安装以及简易的网页最开始制作

工欲善其事&#xff0c;必先利其器&#xff0c; 在我们学习开发网页设计&#xff0c;我们首先需要一个良好的开发工具 这里我比较推荐hbuilder这个 只需要进入官网傻瓜下载&#xff0c;傻瓜安装 https://dcloud.io/ 点击hbuilder选择版本进行下载安装即可 hbuilder的新建文件…

01 THU大模型之基础入门

1. NLP Basics Distributed Word Representation词表示 Word representation: a process that transform the symbols to the machine understandable meanings 1.1 How to represent the meaning so that the machine can understand Compute word similarity 计算词相似度 …

高级语言讲义2018软专(仅高级语言部分)

1.编写程序输入任意一个正整数n&#xff0c;,输出由组成的最大正整数。例如输入3846,则输出8643. #include <stdio.h>void sort(int *arr,int m,int n) {for(int im; i<n-1; i)for(int jm; j<nm-i; j)if(arr[j]<arr[j1]) {int temparr[j];arr[j]arr[j1];arr[j1…

【计算机网络实践】FileZilla Server1.8.1实现局域网ftp文件传输

大二新生随便写写笔记&#xff0c;轻喷&#xff0c;鉴于本人在网络搜索中并未搜索到1.8.1版本的使用方法&#xff0c;因而瞎写一页。 一、准备 下载一个FileZilla Server1.8.1在你想作为服务器的主机上&#xff08;此处直接在官网下载即可&#xff1a;Download FileZilla Serve…

收下这份实操案例,还怕不会用Jmeter接口测试工具

一、简介 JMeter&#xff0c;一个100&#xff05;的纯Java桌面应用&#xff0c;由Apache组织的开放源代码项目&#xff0c;它是接口功能、自动化、性 能测试的工具。具有高可扩展性、支持HTTP、HTTPS、TCP、等多种协议&#xff0c;还可以自己编写Java脚本对 协议进行扩展。 官…