Hetcompute image processing example (2)

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_38498942/article/details/97957510

一、Hetcompute 并行编程综述
HetCompute并行模式提供了可以进行数据交互的数据存储区,通过原子操作可以实现对数据的访问。HetCompute提供的API可以创建任务函数和申请空间,并可以在任务函数实现过程中访问内存数据。

二、实现过程
1)实例简介:
在本次实例中,主要实现了GPU、CPU、DSP基于Heterogeneous Compute SDK 协同工作,对照片去噪,并返回所需时间。
2)部分函数介绍:
在这里插入图片描述上图中使用函数申请了三个内存空间,并同时创建四个任务,ct1、ct2为CPU任务,dt、gt为DSP和GPU的任务,并通过函数确定它们的执行顺序,最后通过SDK实现去噪任务中CPU、GPU、DSP之间数据的传递。
CPU主要负责了原始图片的加载,去噪后图片的输出工作。
DSP主要实现了图片权重的初始化,然后传值给GPU。
GPU主要负责了去噪算法模块。GPU的启动执行在创建任务传参中已经进行了实现,因此在调用GPU处理算法计算部分时,只需要调用创建的任务即可。
通过wait_for()函数,实现所有任务顺序完成。
此处通过Heterogeneous Compute SDK提供的函数创建了三个缓冲区用作任务调度中的数据处理,将一个图片去噪任务实现了简化。每个处理器只需要处理一部分的数据,完成后数据传给下一位,充分的调用到了每一个硬件,真正意义上实现了并行处理。
在这里插入图片描述 上图中时GPU算法处理部分的去噪算法实现过程,调用GPU对CPU加载的图片数据进和DSP初始化的图片权重数据进行去噪处理,并返回去噪后的数据,放在上面提到的缓冲区中,供CPU进行调用。最终实现图片去噪这一流程。
在这里插入图片描述 上图为DSP初始化图片权重。DSP的启动加载在mian()函数中已经实现,通过调用对应dsp处理函数,加载.so文件启动DSP处理任务,dsp运算速度最慢,因此此处只是让它对部分数据进行初始化。最终的去噪算法的实现在速度最快的GPU中实现。
在这里插入图片描述
通过上图定义的路径,可以把处理好的图片拿到PC端。此任务通过CPU进行了实现。
三、实验结果分析
在这里插入图片描述 通过上图可以看出,在通过Heterogeneous Compute SDK提供的方法,我们可以很轻易地实现GPU、CPU、DSP协同工作,大大提高了任务的处理效率。

展开阅读全文

java image processing question

04-01

我有一个图像库,自己写了一个编译器,其中有一个问题:private static sun.tools.javac.Main javac;这一行代码编译后出现“package sun.tools.javac donot exist”请问在jdk1.4.2中能否找到这样的包。如果想修改怎样修改。source code:package ij.plugin;rnimport java.awt.*;rnimport java.io.*;rnimport ij.*;rnimport ij.gui.*;rnimport ij.io.*;rnimport ij.util.*;rnimport ij.plugin.frame.Editor;rnimport ij.text.TextWindow;rn//import sun.tools.java.Constants ;rn/** Compiles and runs plugins using the javac compiler. */rnpublic class Compiler implements PlugIn, FilenameFilter rnrn private static sun.tools.javac.Main javac;rn private static ByteArrayOutputStream output;rn private static String dir,name;rn private static Editor errors;rnrn public void run(String arg) rn IJ.register(Compiler.class);rn if (arg.equals("edit"))rn edit();rn elsern compileAndRun(arg);rn rnrn void edit() rn if (open("", "Edit, Compile and Run Plugin...")) rn Editor ed = (Editor)IJ.runPlugIn("ij.plugin.frame.Editor", "");rn if (ed!=null) ed.open(dir, name);rn rn rnrn void compileAndRun(String path) rn if (!isJavac())rn return;rn if (!open(path, "Compile and Run Plugin..."))rn return;rn if (compile(dir+name))rn runPlugin(name);rn rnrn boolean isJavac() rn try rn if (javac==null) rn output = new ByteArrayOutputStream(4096);rn javac = new sun.tools.javac.Main(output, "javac");rn rn catch (NoClassDefFoundError e) rn IJ.error("This JVM appears not to include the javac compiler. Javac\n"rn +"is included with the JRE 1.1.8 bundled with the Windows and\n"rn +"Linux versions of ImageJ. Mac OS 9 users must install Apple's\n"rn +"Java SDK. When using JDK 1.2 and later, the tools.jar file\n"rn +"must be added to the command line that runs ImageJ.");rn return false;rn rn return true;rn rnrn boolean compile(String path) rn IJ.showStatus("compiling: "+path);rn String classpath = System.getProperty("java.class.path");rn IJ.write("classpath: " + classpath);rn output.reset();rn boolean compiled = javac.compile(new String[] "-deprecation","-classpath",classpath,path);rn String s = output.toString();rn boolean errors = (!compiled || (s!=null && s.length()>0));rn if (errors)rn showErrors(s);rn elsern IJ.showStatus("done");rn return compiled;rn rnrn void showErrors(String s) rn if (errors==null || !errors.isVisible())rn errors = (Editor)IJ.runPlugIn("ij.plugin.frame.Editor", "");rn if (errors!=null)rn errors.display("Errors", s);rn IJ.showStatus("done (errors)");rn rnrn // open the .java source filern boolean open(String path, String msg) rn boolean okay;rn String name, dir;rn if (path.equals("")) rn FileDialog fd = new FileDialog(IJ.getInstance(), msg);rn if (this.dir!=null)rn fd.setDirectory(this.dir);rn else rn String pluginsDir = Menus.getPlugInsPath();rn if (path!=null)rn fd.setDirectory(pluginsDir);rn rn if (this.name!=null)rn fd.setFile(this.name);rn GUI.center(fd);rn fd.setFilenameFilter(this);rn fd.setVisible(true);rn name = fd.getFile();rn okay = name!=null;rn dir = fd.getDirectory();rn fd.dispose();rn if (okay && !(name.endsWith(".java")||name.endsWith(".txt"))) rn IJ.error("File name must end with \".java\".");rn okay = false;rn rn else rn int i = path.lastIndexOf('/');rn if (i==-1)rn i = path.lastIndexOf('\\');rn if (i>0) rn dir = path.substring(0, i+1);rn name = path.substring(i+1);rn else rn dir = "";rn name = path;rn rn okay = true;rn rn if (okay) rn this.name = name;rn this.dir = dir;rn rn return okay;rn rnrn // only show files with names ending in ".java"rn // doesn't work with Windowsrn public boolean accept(File dir, String name) rn return name.endsWith(".java");rn rnrn // run the plugin using a new class loaderrn void runPlugin(String name) rn name = name.substring(0,name.length()-5); // remove ".java"rn new PlugInExecuter(name);rn rnrnrnrnrnclass PlugInExecuter implements Runnable rnrn private String plugin;rn private Thread thread;rnrn /** Create a new object that runs the specified pluginrn in a separate thread. */rn PlugInExecuter(String plugin) rn this.plugin = plugin;rn thread = new Thread(this, plugin);rn thread.setPriority(Math.max(thread.getPriority()-2, Thread.MIN_PRIORITY));rn thread.start();rn rnrn public void run() rn try rn IJ.getInstance().runUserPlugIn(plugin, plugin, "", true);rn catch(Throwable e) rn IJ.showStatus("");rn IJ.showProgress(1.0);rn ImagePlus imp = WindowManager.getCurrentImage();rn if (imp!=null) imp.unlock();rn String msg = e.getMessage();rn if (e instanceof RuntimeException && msg!=null && e.getMessage().equals("Macro canceled"))rn return;rn CharArrayWriter caw = new CharArrayWriter();rn PrintWriter pw = new PrintWriter(caw);rn e.printStackTrace(pw);rn String s = caw.toString();rn if (IJ.isMacintosh())rn s = Tools.fixNewLines(s);rn new TextWindow("Exception", s, 350, 250);rn rn rnrnrn并请详细解释这些代码啊--谢谢 论坛

没有更多推荐了,返回首页