- 浏览: 82360 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
neptunecai:
2.创建nutch2.1的编译环境 这部分能详细些吗?比如:T ...
Nutch2.1 in eclipse
首先由于项目的关系需要使用IBM的Rational Assert Manager做ROA的资源存储。所以需要编写一个队RAM进行池化的东西。大致实现类似JDBC下DBCP的功能。当然这里记录下的只是利用pool进行简单池化,并没有添加其他额外的功能。后期在使用中可能会增强该方法的功能。
首先列出该池化实现的需要jar:
junit-4.8.2.jar
log4j-1.2.16.jar
commons-pool-1.6.jar
com.ibm.ram.common_7.5.1.v20110224.jar
ramclient-ant.jar
ramclient.jar
首先pool中主要有三个接口:ObjectPool,ObjectPoolFactory和PoolableObjectFactory。这一组接口是基于Object的,而相对的还有一组也是三个接口就是基于KeyObject,底层使用Map实现。这里我们不需要使用Map的这种数据结构,所以只选择了Object讲解。
而ObjectPool接口implement后,主要就是用于实现池存储的功能。
ObjectPoolFactory这个接口主要是用于池的创建。当需要批量创建配置相同的池时,可以实现该工厂接口去批量穿件ObjectPool。
PoolableObjectFactory这个接口主要就是对我们需要池化的对象的创建,销毁,挂起,和激活等操作的管理工厂。
而pool包中,已经implement了以上接口实现了部分类。我们只需要通过继承那些类,稍作添加一些功能和重写一些方法即可。这种方式也是最简单实用的方式。不用自己去实现一些存储的实现。
而这里对于Object的,有genericObject和stackObject。两者只是存储的方式不同而已。前者使用arraylist实现,后者使用stack实现。本人选择arraylist实现的genericObject系列。作为池子的父类。
简简单单就可以对对象进行池化了。
由于这里我们只使用一个池子,所以不使用池子创建的工厂。就再实现一个对象的创建销毁工厂即可。因为这里我们需要使用的功能很简单,所以只是继承了BasePoolableObjectFactory类就可以了。
而对象工厂如果每次都去创建的话,会比较麻烦,而如果写成单例的话,创建出来的RAMSession会不大好管理,所以创建了一个专门用于从池中获取RAMSession进行管理的对象。并用单例模式进行创建。单例模式使用的是bob lee的单例模式。
最后就是BaseConfig和LoadObjectPoolConfig两个配置进行读取类的编写就可以了。这里就不附上代码了。详情请参考附件。
首先列出该池化实现的需要jar:
junit-4.8.2.jar
log4j-1.2.16.jar
commons-pool-1.6.jar
com.ibm.ram.common_7.5.1.v20110224.jar
ramclient-ant.jar
ramclient.jar
首先pool中主要有三个接口:ObjectPool,ObjectPoolFactory和PoolableObjectFactory。这一组接口是基于Object的,而相对的还有一组也是三个接口就是基于KeyObject,底层使用Map实现。这里我们不需要使用Map的这种数据结构,所以只选择了Object讲解。
而ObjectPool接口implement后,主要就是用于实现池存储的功能。
ObjectPoolFactory这个接口主要是用于池的创建。当需要批量创建配置相同的池时,可以实现该工厂接口去批量穿件ObjectPool。
PoolableObjectFactory这个接口主要就是对我们需要池化的对象的创建,销毁,挂起,和激活等操作的管理工厂。
而pool包中,已经implement了以上接口实现了部分类。我们只需要通过继承那些类,稍作添加一些功能和重写一些方法即可。这种方式也是最简单实用的方式。不用自己去实现一些存储的实现。
而这里对于Object的,有genericObject和stackObject。两者只是存储的方式不同而已。前者使用arraylist实现,后者使用stack实现。本人选择arraylist实现的genericObject系列。作为池子的父类。
public class RAMObjectPool extends GenericObjectPool<RAMSession> { public RAMObjectPool() { super(); } public RAMObjectPool(PoolableRAMObjectFactory factory) { super(factory); } public RAMObjectPool(PoolableRAMObjectFactory factory,Config config) { super(factory, config); } @Override public RAMSession borrowObject() throws Exception { return borrowObject(); } @Override public void invalidateObject(RAMSession obj) throws Exception { invalidateObject(obj); } @Override public void returnObject(RAMSession obj) throws Exception { returnObject(obj); }
简简单单就可以对对象进行池化了。
由于这里我们只使用一个池子,所以不使用池子创建的工厂。就再实现一个对象的创建销毁工厂即可。因为这里我们需要使用的功能很简单,所以只是继承了BasePoolableObjectFactory类就可以了。
public class PoolableRAMObjectFactory extends BasePoolableObjectFactory<RAMSession> { private static Logger logger = Logger.getLogger(PoolableRAMObjectFactory.class); private String url = null; private String userId = null; private String userPwd = null; public PoolableRAMObjectFactory(String ramURL, String ramUserID, String ramPassword) { url = ramURL; userId = ramUserID; userPwd = ramPassword; } /** * create a RAMSession * @return * @throws Exception */ @Override public RAMSession makeObject() throws Exception { // Create a connection to Rational Asset Manager RAMSession session = new RAMSession(url,userId, userPwd); if(logger.isDebugEnabled())logger.debug("obj is created"); return session; } /** * * @param obj * @return */ @Override public boolean validateObject(RAMSession obj) { return true; } @Override public void destroyObject(RAMSession obj) throws Exception { if(obj!=null) { if(logger.isDebugEnabled())logger.debug("obj is destroyed"); obj.release(); obj = null; } } @Override public void activateObject(RAMSession obj) throws Exception { } @Override public void passivateObject(RAMSession obj) throws Exception { if (obj!=null) { if(logger.isDebugEnabled())logger.debug("obj is cleared"); obj.clear(); obj = null; } } }
而对象工厂如果每次都去创建的话,会比较麻烦,而如果写成单例的话,创建出来的RAMSession会不大好管理,所以创建了一个专门用于从池中获取RAMSession进行管理的对象。并用单例模式进行创建。单例模式使用的是bob lee的单例模式。
public class RAMSessionManager { private static Logger logger = Logger.getLogger(RAMSessionManager.class); private RAMObjectPool objectPool = null; private ThreadLocal<RAMSession> localSession = new ThreadLocal<RAMSession>(); private RAMSessionManager() { GenericObjectPool.Config config = null; Properties properties = BaseConfig.load(); String ramURL = properties.getProperty("ramURL"); String ramUserID = properties.getProperty("ramUserID"); String ramPassword = properties.getProperty("ramPassword"); try { config = LoadObjectPoolConfig.load(properties.getProperty("poolConfigURL")); } catch (Exception e) { config = null; } if(config==null) { objectPool = new RAMObjectPool(new PoolableRAMObjectFactory(ramURL, ramUserID, ramPassword)); } else { objectPool = new RAMObjectPool(new PoolableRAMObjectFactory(ramURL, ramUserID, ramPassword),config); } printDebugInfo(); } static class RAMSessionHolder { public static RAMSessionManager instance = new RAMSessionManager(); } public static RAMSessionManager getInstance() { return RAMSessionHolder.instance; } /** * create session * @return * @throws Exception */ public RAMSession createSession() throws Exception { RAMSession obj = objectPool.borrowObject(); if(obj!=null) { printDebugInfo(); localSession.set(obj); } else { throw new NullPointerException("RAMSession is null from pool!"); } return obj; } /** * if created Session get it, else create Session * @return * @throws Exception */ public RAMSession openSession() throws Exception { RAMSession obj = localSession.get(); if(obj==null) { obj = createSession(); } return obj; } /** * close Session * @param obj * @throws Exception */ public void closeSession(RAMSession obj) throws Exception { if(obj!=null) { objectPool.returnObject(obj); printDebugInfo(); } } private void printDebugInfo() { if (logger.isDebugEnabled()) { logger.debug("Active number : "+objectPool.getNumActive()+"\t Idle number : "+objectPool.getNumIdle()); } } }
最后就是BaseConfig和LoadObjectPoolConfig两个配置进行读取类的编写就可以了。这里就不附上代码了。详情请参考附件。
- PoolPro.zip (3.3 MB)
- 下载次数: 5
发表评论
-
jetty 对请求头的限制
2014-02-13 14:30 5703当浏览器发起请求时 出现http code 413 问题 fu ... -
java 最基础的设置介绍
2013-04-15 23:05 1283用java不长不短快5年了,最近在看一些基础的书籍,也想起很久 ... -
Hessian 初体验
2013-03-27 17:36 1197Hessian 官网:http://hessian.cauch ... -
Nutch2.1 in eclipse
2013-03-10 00:22 9464Nutch2.1 in eclipse 主要目的: 1. 将 ... -
LDAP connection issue
2012-10-23 16:25 1754Problem1: Sometimes we can not ... -
restlet2.0学习——请求超时设置
2012-09-26 11:01 2364一般,我们在请求一个rest service的时候,总是希望可 ... -
[转载]checkStyle使用手册
2012-08-23 20:28 6928Checkstyle是SourceForge下的一个项目,如名 ... -
[转载]高性能JAVA开发之内存管理
2012-08-13 21:53 1387这几天在找一个程序的bug,主要是java虚拟机内存溢出的问题 ... -
[转载]How to write LDAP search filters
2012-08-10 10:57 1438This document outlines how to g ... -
restlet2.0学习(extend)-restlet日志信息写入log4j中
2012-08-07 15:32 4055使用过restlet的人都知道,restlet使用的是JDK的 ... -
log4j级别输出
2012-08-03 11:12 4334我们知道: log4j.logger.XX cover ==& ... -
log4j配置
2012-05-30 11:36 1442log4j.rootLogger 根路径下的所有logger输 ... -
Restlet2.0学习——简单WebApp多Application与表单提交
2012-05-23 23:16 3583之前我们提到过简单的WebApp实现,使用的是一个applic ... -
Restlet2.0学习——文件路径访问
2012-05-22 14:42 1231由于就是官方的实例照搬了一下,简单尝试没有问题。就先把代码贴出 ... -
Restlet2.0学习——文件路径访问+BASIC认证
2012-05-22 14:38 1781这篇主要是让我们学习对于一些静态页面如何更加简单有效的去访问他 ... -
Restlet2.0学习——简单WebApp实现
2012-05-21 22:09 6563由于自己最近正在学习R ... -
HTMLPOST和GET编码问题(深入篇)
2011-07-07 02:12 11449浏览器 IE/FireFox -------——----> ...
相关推荐
6. 模型应用:最终模型可以部署到实际应用中,例如在手机应用或云端服务中实现对用户上传的鸟类图片进行实时识别。 这个项目展示了如何利用先进的机器学习技术,尤其是RAM模型(可能是一个比喻或特指的术语),解决...
本项目实现了CNN的纯Verilog硬件描述语言版本,覆盖了卷积层、池化层和全连接层,旨在提供一个可硬件加速的CNN计算平台。Vivado 2019.2是Xilinx公司的一款综合工具,用于FPGA(Field-Programmable Gate Array)和SoC...
在实现CNN时,需要利用ISE的IP核( Intellectual Property Core)功能,例如使用Xilinx的Block RAM或分布式RAM IP核来实现权重存储。 具体步骤如下: 1. **设计CNN结构**:编写Verilog代码,定义CNN的各个层,如...
PVS(Provisioning Services)是Citrix提供的一种基于网络的流式桌面虚拟化技术,它能够实现对桌面操作系统的集中管理和分发。PVS允许用户在数据中心中托管操作系统,并通过网络将这些操作系统作为“流”传输到最终...
CNN FPGA加速器实现(小型)CNN FPGA加速...图三为网络结构图,demo所实现输入为28*28*1,图四五为卷积层和池化层可配置部分。 单张图片推理时间50us左右 提供本项目实现中所用的所有软件( python)和硬件代码( verilog)。
可以使用分布式RAM(Distributed RAM)或块RAM(Block RAM)来存放这些参数,根据硬件资源和性能需求进行选择。 4. **流水线设计**:通过级联多个阶段,使数据在不同阶段之间流动,以实现连续的输入处理。这有助于...
Verilog代码会定义如何实现最大池化或平均池化操作。 4. **激活函数**:ReLU、Sigmoid、Tanh等激活函数在Verilog中通过逻辑门或查找表(LUT)实现,以非线性转换输出。 5. **权重存储**:权重通常被存储在分布式...
在FPGA实现CNN时,我们需要将CNN的各个层(如卷积层、池化层和全连接层)转换为Verilog代码。例如,卷积层可以通过多个乘加单元实现,每个单元对应一个滤波器的权重;池化层则可以设计为选择最大或平均值的逻辑;全...
本文首先对CNN模型进行了详细的介绍,包括CNN的基本结构、卷积层、池化层、全连接层等。然后,笔者介绍了FPGA的基本原理和架构,包括FPGA的结构、CLB、DSP、Block RAM等。接着,笔者详细介绍了基于FPGA的CNN加速器的...
四、卷积层和池化层的实现 卷积层和池化层是 CNN 的基本组成部分。卷积层负责对输入数据进行卷积操作,提取特征,而池化层负责对特征图进行下采样,减少数据维度。 五、测试结果分析 测试结果显示,YOLO-Lite ...
在FPGA实现CNN时,还需要关注资源优化,如利用DSP块进行乘法运算,以及使用BRAM(Block RAM)存储权重,以提高效率。此外,FPGA的并行性使得我们可以并行处理多个输入图像,进一步提升系统吞吐量。 总的来说,通过...
标题中的“基于VGG Simple手写体数字识别 FPGA实现 vivado”揭示了本项目的核心内容,涉及到了深度学习模型VGG Simple与硬件实现技术FPGA(Field-Programmable Gate Array),以及设计工具Vivado。VGG Simple是深度...
6. **Softmax层**:在软件层面,通常在ARM端执行Softmax操作,因为它对FPGA来说实现起来较为复杂。Softmax将全连接层的输出归一化到[0, 1]区间,便于分类决策。 综上所述,基于PYNQ的HLS CNN架构充分利用了FPGA的...
批量归一化层批量归一化层对网络中的激活值和梯度传播进行归一化,使网络训练成为更简单的优化问题。在卷积层和非线性部分(例如 ReLU 层)之间使用批量归一化层,来加速网络训练并降低对网络初始化的敏感度。 ReLU...
2. **池化层实现**:池化层用于减小数据尺寸,减少计算量。常见的池化操作有最大池化和平均池化。HLS代码会针对这些操作设计高效的硬件逻辑。 3. **激活函数**:如ReLU、Leaky ReLU等,它们用于引入非线性。硬件...
现代操作系统是计算机科学中研究操作系统设计、实现与应用的重要领域。操作系统作为计算机系统中的核心软件,负责管理计算机硬件与软件资源,提供用户与计算机交互的界面。本文将详细解析《现代操作系统 第三版 参考...
`memoryPool.zip`可能包含了一个实现内存池的C++示例代码,`Fast-Memory-Allocation-and-Pooling-for-Constrained.pdf`很可能是对这个主题的深入探讨,包括理论背景、最佳实践以及可能的优化策略。`下载链接.txt`...
整个系统通过CNN的强大特征学习能力,结合高斯朴素贝叶斯分类器的简单高效,实现了人脸表情的准确识别。在实际应用中,可以通过增加网络深度、训练更多数据或使用数据增强技术来进一步提高识别性能。
标题"性能增强器:通过使用计时器分辨率并清理RAM来提高性能"揭示了两个关键点:计时器分辨率的调整和内存(RAM)的优化。 首先,计时器分辨率在程序性能优化中扮演着重要角色。在C#中,`System.Diagnostics....