OpenCL 双调排序 CPU 版
▶ 学习了双调排序,参考(https://blog.csdn.net/xbinworld/article/details/76408595)
● 使用 CPU 排序的代码
- #include <stdio.h>
- #define LENGTH 1024
- #define ASCENDING 1
- #define DESCENDING 0
- int a[LENGTH];
- void compare(int i, int j, int dir)
- {
- if (dir == (a[i]>a[j]))
- {
- int h = a[i];
- a[i] = a[j];
- a[j] = h;
- }
- }
- void bitonicMerge01(int lo, int cnt, int dir)// 先再大跨度(半区间长)上调整元素,再递归地在小跨度上进行相同的调整
- {
- if (cnt > )
- {
- int k = cnt / ;
- for (int i = lo; i < lo + k; i++)
- compare(i, i + k, dir);
- bitonicMerge01(lo, k, dir);
- bitonicMerge01(lo + k, k, dir);
- }
- }
- void bitonicSort01(int lo, int cnt, int dir)// 先递归地要求小跨度区间依次排成 “升↗降↘升↗降↘” 再在较大跨度上进行合并
- {
- if (cnt > )
- {
- int k = cnt / ;
- bitonicSort01(lo, k, ASCENDING);
- bitonicSort01(lo + k, k, DESCENDING);
- bitonicMerge01(lo, cnt, dir);
- }
- }
- void bitonicMerge02(int l, int r, const int dir)
- {
- if (r - l > )
- {
- int stride = (r - l) / + ;
- for (int i = l; i < l + stride; i++)
- compare(i, i + stride, dir);
- bitonicMerge02(l, l + stride - , dir);
- bitonicMerge02(l + stride, r, dir);
- }
- }
- void bitonicSort02(int l, int r, const int dir)
- {
- if (r - l > )
- {
- int rNew = l + (r - l) / ;
- bitonicSort02(l, rNew, ASCENDING);
- bitonicSort02(rNew + , r, DESCENDING);
- bitonicMerge02(l, r, dir);
- }
- }
- void bitonicMerge03(int l, int r, const int dir)
- {
- if (r - l > )
- {
- int stride = (r - l) / ;
- for (int i = l; i < l + stride; i++)
- compare(i, i + stride, dir);
- bitonicMerge03(l, l + stride, dir);
- bitonicMerge03(l + stride, r, dir);
- }
- }
- void bitonicSort03(int l, int r, const int dir)
- {
- if (r - l > )
- {
- int rNew = l + (r - l) / ;
- bitonicSort03(l, rNew, ASCENDING);
- bitonicSort03(rNew, r, DESCENDING);
- bitonicMerge03(l, r, dir);
- }
- }
- int main()
- {
- int i, error;
- srand();
- for (i = ; i < LENGTH; a[i++] = rand());
- printf("\n");
- for (i = ; i < LENGTH; i++)
- {
- printf("%5d,", a[i]);
- if ((i + ) % == )
- printf("\n");
- }
- //bitonicSort01(0, LENGTH, ASCENDING); // 使用起点和长度
- //bitonicSort02(0, LENGTH - 1, ASCENDING); // 使用左端点和右端点(都包含)
- bitonicSort03(, LENGTH, ASCENDING); // 使用左端点和右端点(左包含右不包含)
- printf("\n");
- for (i = , error = -; i < LENGTH; i++)
- {
- printf("%5d,", a[i]);
- if (i < LENGTH - && a[i] > a[i + ])
- error = i;
- if ((i + ) % == )
- printf("\n");
- }
- if (error != -)
- printf("\n\nerror at i==%d, a[i]==%d, a[i+1]==%d", error, a[error], a[error + ]);
- getchar();
- return ;
- }
● 输出结果(临时改为排序 64 个元素,每行显示 16个)
- , ,,,,,,, ,,,,,,,,
- ,,, ,,, ,,,,,,,,,,
- ,, ,,,,,,,, ,,,, ,,
- ,, ,,,,,,,,,,,,, ,
- , , , , , , , , , , ,,,,,,
- ,,,,,,,,,,,,,,,,
- ,,,,,,,,,,,,,,,,
- ,,,,,,,,,,,,,,,,
OpenCL 双调排序 CPU 版的更多相关文章
- OpenCL 双调排序 GPU 版
▶ 参考书中的代码,写了 ● 代码,核函数文件包含三中算法 // kernel.cl __kernel void bitonicSort01(__global uint *data, const ui ...
- DirectX11 With Windows SDK--27 计算着色器:双调排序
前言 上一章我们用一个比较简单的例子来尝试使用计算着色器,但是在看这一章内容之前,你还需要了解下面的内容: 章节 26 计算着色器:入门 深入理解与使用缓冲区资源(结构化缓冲区/有类型缓冲区) Vis ...
- 【转载】双调排序Bitonic Sort,适合并行计算的排序算法
双调排序是data-independent的排序, 即比较顺序与数据无关的排序方法, 特别适合做并行计算,例如用GPU.fpga来计算. 1.双调序列 在了解双调排序算法之前,我们先来看看什么是双调序 ...
- 三十分钟理解:双调排序Bitonic Sort,适合并行计算的排序算法
欢迎转载,转载请注明:本文出自Bin的专栏blog.csdn.net/xbinworld 技术交流QQ群:433250724,欢迎对算法.技术.应用感兴趣的同学加入 双调排序是data-indepen ...
- tensorflow安装过程cpu版-(windows10环境下)---亲试可行方案
tensorflow安装过程cpu版-(windows10环境下)---亲试可行方案 一, 前言:本次安装tensorflow是基于Python的,安装Python的过程不做说明 二, 安装环境: ...
- Windows7下安装cpu版的Tensorflow
windows7下安装python3.5 1.下载python-3.5.2-amd64.whl https://www.python.org/downloads/release/python-352/ ...
- 教你从头到尾利用DQN自动玩flappy bird(全程命令提示,GPU+CPU版)【转】
转自:http://blog.csdn.net/v_JULY_v/article/details/52810219?locationNum=3&fps=1 目录(?)[-] 教你从头到尾利用D ...
- Ubuntu16.04下caffe CPU版的详细安装步骤
一.caffe简介 Caffe,是一个兼具表达性.速度和思维模块化的深度学习框架. 由伯克利人工智能研究小组和伯克利视觉和学习中心开发. 虽然其内核是用C++编写的,但Caffe有Python和Mat ...
- CentOS 7 下使用虚拟环境Virtualenv安装Tensorflow cpu版记录
1.首先安装pip-install 在使用centos7的软件包管理程序yum安装python-pip的时候会报一下错误: No package python-pip available. Error ...
随机推荐
- BZOJ4475: [Jsoi2015]子集选取【找规律】【数学】
Description Input 输入包含一行两个整数N和K,1<=N,K<=10^9 Output 一行一个整数,表示不同方案数目模1,000,000,007的值. Sample In ...
- Laravel学习之旅(二)
控制器 一.怎么编写控制器? 1.控制器文件存放路径:app\Http\Controllers: 2.命名规范如:TestController.php 3.完整的控制器例子如下: <?php n ...
- WPF开源界面库及控件
WPF开源项目 WPF有很多优秀的开源项目,我以为大家都知道,结果,问了很多人,其实他们不知道.唉,太可惜了! 先介绍两个比较牛逼的界面库 1.MaterialDesignInXamlToolkit ...
- hdu1301 Jungle Roads 最小生成树
The Head Elder of the tropical island of Lagrishan has a problem. A burst of foreign aid money was s ...
- 使用webpack搭建vue项目中遇到的问题
1:data数据文件经试验,需要放在生成的build文件夹中才能生效,但是应该把data文件夹先放在src中,然后如何定义config文件,让其复制过去? new CopyWebpackPlugin( ...
- python、java大作战,python测试dubbo接口
很多小伙伴都反映公司要求测dubbo(dubbo是一个java的分布式开源框架)接口,不会写java代码,怎么测,能不能用python来调dubbo接口.当然是可以的了,最近研究了一下,很简单,分享给 ...
- shell教程-001:shell简介 什么是shell,shell命令的两种执行方式
Shell本身是一个用C语言编写的程序,它是用户使用Unix/Linux的桥梁,用户的大部分工作都是通过Shell完成的. Shell既是一种命令语言,又是一种程序设计语言.作为命令语言,它交互式地解 ...
- c# list排序的三种实现方式 (转帖)
用了一段时间的gridview,对gridview实现的排序功能比较好奇,而且利用C#自带的排序方法只能对某一个字段进行排序,今天demo了一下,总结了三种对list排序的方法,并实现动态传递字段名对 ...
- Kibana安装及使用
1.Kibana介绍Kibana是一个基于浏览器页面的Elasticsearch前端展示工具.Kibana全部使用HTML语言和Javascript编写的. 2.安装配置Kibana下载地址:http ...
- Monit安装与配置
Monit安装与配置 monit 监控并自动重启服务 官方文档