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 ...
 
随机推荐
- ASP.NET MVC开发基础
			
一.ASP.Net MVC的开发模式 (1)处理流程 在ASP.Net MVC中,客户端所请求的URL是被映射到相应的Controller去,然后由Controller来处理业务逻辑,或许要从Mode ...
 - 文件和文件夹不存在的时候,FileSystemWatcher 监听不到文件的改变?如果递归地监听就可以了
			
当你需要监视文件或文件夹的改变的时候,使用 FileSystemWatcher 便可以完成.不过,FileSystemWatcher 对文件夹的监视要求文件夹必须存在,否则会产生错误“无效路径”. 那 ...
 - JS常用功能
			
1.字符串转Json var json='[{"id":0,"text":"ddddd"},{"id":1," ...
 - POJ_2299 Ultra-QuickSort【归并排序】
			
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/u013912596/article/details/35655703 题目链接:http://poj ...
 - ZedGraph 柱状图、饼图、折线图演示源码
			
http://code1.okbase.net/codefile/ZedGraphControl.ContextMenu.cs_201211225626_97.htm // //This librar ...
 - ZedGraph使用经验(转帖)
			
更改背景色 myPane.Fill = new Fill(Color.Black); Zedgraph 柱状图的宽度 gp.BarSettings.ClusterScaleWidth = 2; ...
 - mySQL 教程 第2章 安装和介绍mySQL
			
设置mySQL字符集 支持中文的字符集是utf8,该设置可以更改mySQL配置文件进行全局设置,也可以针对数据库设置,也可以针对表设置,也可以针对列设置.字符集更改后新插入的数据生效,对以前不生效. ...
 - CRM 2011 Plugin 知识的总结加代码解释
			
1.??的使用,就是判断值是否为null,为null的话,给赋初值,否则就直接取值. decimal new_amount = 0; if (targetEntity.Contains("字 ...
 - JZ2440 裸机驱动 第12章 I2C接口
			
本章目标: 了解I2C总线协议: 掌握S3C2410/S3C2440中I2C接口的使用方法: 12.1 I2C总线协议及硬件介绍 12.1.1 I2C总线协议 1 I2C总线的概念 2 I2C总线的信 ...
 - 【android】[转]Android软件测试的日志文件抓取简介
			
1 log文件分类简介 实时打印的主要有:logcat main,logcat radio,logcat events,tcpdump,还有高通平台的还会有QXDM日志 状态信息的有:adb s ...