实验室编译
㈠ 瀹为獙瀹cuda瀹夎
浠ヤ笅鏄瀹为獙瀹linux链嶅姟鍣╟uda瀹夎呭拰kaldi甯cuda缂栬疟镄勬祦绋嬶纴鍦╬cc鍜宲c涓婃祴璇曢氲繃銆
鍦╬cc涓婂疄楠屼简cuda7鍜宑uda6.5锛岀粨鏋渒aldi锛2015骞3链堢増锛変技涔庝笉鍏煎筩uda7锛屽湪kaldi-trunk/src/cudamatrix涓
make test 镐绘槸澶辫触锛屾渶钖庡畨瑁呯殑cuda6.5銆
鍦╬c涓婅牏妗ョ殑kaldi锛2014骞10链堜互鍓嶏级鍦╟uda6.5涓嬫祴璇曚笉阃氲繃锛宬aldi锛2015骞3链堢増锛夊彲浠ユ祴璇曢氲繃銆
鍦╬cc涓婄殑kaldi鍦╣pu 0 涓婃绘姤阌欙纴鍦╣pu 1涓婂彲浠ワ纴链钖庢垜𨰾疯礉镄勬枃楣忕殑娌℃敼杩囩殑cudamatrix/Makefile锛屽苟镓ц宫ake -B 閲嶆柊缂栬疟锛屽彲浠ョ敤gpu 0浜嗐
瀹夎呭墠鍑嗗 cuda_6.5.14_linux_64.run锛 鏂囦欢澶у皬928M锛岃繖鏄痯c链嶅姟鍣ㄤ笂淇濆瓨瀹夎呭寘镄勪綅缃銆
928M pc-pc: /home/pc/disk2/hcq/install_cuda/cuda_6.5.14_linux_64.run
kaldi鐗堟粴宸炴湰 2015骞3链
ps: 鍙浠ラ氲繃杩愯 locate --regex cuda.*.run$ 𨱒ユ煡镓炬満鍣ㄤ笂鍒浜轰互鍓崭笅镄刢uda瀹夎呭寘銆
涓銆佸畨瑁 cuda
(1) 鍒犻櫎宸叉湁nvidia锛屾媺榛戝悕鍗
sudo apt-get remove --purge nvidia*
sudo nano /etc/modprobe.d/blacklist.conf
blacklist.conf锷犲叆
(2) 寮濮嫔畨瑁
sudo service lightdm stop
chmod +x cuda_6.5.14_linux_64.run
sudo ./cuda_6.5.14_linux_64.run
瀹夎呬竴璺痽es鎴栭粯璁ら厤缃銆
鎴愬姛鎻愮ず锛
===========
= Summary =
===========
Driver: Installed
Toolkit: Installed in /usr/local/cuda-6.5
Samples: Installed in /home/hcq, but missing recommended libraries
Please make sure that
To uninstall the CUDA Toolkit, run the uninstall script in /usr/local/cuda-6.5/bin
To uninstall the NVIDIA Driver, run nvidia-uninstall
Please see CUDA_Getting_Started_Guide_For_Linux.pdf in /usr/local/cuda-6.5/doc/pdf for detailed information on setting up CUDA.
(3) 閰岖疆鐜澧冨彉閲
鎸夌収涓婂甫澶囩寷涓姝ユ垚锷熸彁绀鸿剧疆PATH鍜孡D_LIBRARY_PATH 鐜澧冨彉閲
sudo vim /etc/profile
/etc/profile锷犲叆
PATH= LD_LIBRARY_PATH:/usr/local/cuda-6.5/lib64
export PATH
export LD_LIBRARY_PATH
(4) 娴嬭瘯
1. /usr/local/cuda/bin/nvcc -V
鏄剧ず镓瀹夎卌uda鐗堟湰锛
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2014 NVIDIA Corporation
Built on Thu_Jul_17_21:41:27_CDT_2014
Cuda compilation tools, release 6.5, V6.5.12
鍙浠ョ‘瀹氩畨瑁呯殑鐗堟湰涓6.5
2. cd /home/hcq/NVIDIA_CUDA-6.5_Samples/
鍙浠make 骞惰繘鍏ョ浉搴斿瓙鐩褰曡繍琛屾祴璇
渚嫔傦细 ./0_Simple/simplePrintf/simplePrintf 镓揿嵃
GPU Device 0: "Quadro 600" with compute capability 2.1
Device 0: "Quadro 600" with Compute 2.1 capability
printf() is called. Output:
[3, 0]: Value is:10
[3, 1]: Value is:10
.....
[2, 6]: Value is:10
[2, 7]: Value is:10
浜屻乲aldi甯cuda缂栬疟
(1) 棣栧厛杩涘叆tools鐩褰曞苟鎸夌収INSTALL鎸囩ず缂栬疟銆傚傛灉涔嫔墠宸茬粡缂栬疟杩囱烦杩囨ゆラわ纸tools涓嬬殑绋嫔簭娌℃湁浣跨敤cuda搴掳级銆
(2) 杩涘叆src鐩褰
1. make clean
2. ./configure
鍙浠ョ湅鍒版墦鍗颁俊鎭镄勬渶钖庢湁杩欎箞涓琛岋细
Using CUDA toolkit /usr/local/cuda (nvcc compiler and runtime libraries)
鍙浠ョ‘瀹歬aldi灏呜佸甫cuda瀹夎呫
3. make depend -j 24
4. make -j 24
鍦 make -j 24 杩囩▼涓濡傛灉链夌被浼间竴涓嬮敊璇锛
nvcc fatal : Unsupported gpu architecture 'compute_10'
鍒栾繘鍏src/cudamatrix鐩褰曪纴淇鏀筂akefile锛
鎶 CUDA_ARCH=-gencode arch=compute_10,code=sm_10 涓镄
-gencode arch=compute_10,code=sm_10 铡绘帀銆
閲嶆柊 make -j 24銆
(3) 濡傛灉浠ヤ笂姝ラゆ病链夐敊璇锛屽垯杩涘叆src/cudamatrix鐩褰曡繘琛屾祴璇
make test -j 5
鎴愬姛镄勮瘽鎻愮ず锛
Running cu-vector-test ...... SUCCESS
Running cu-matrix-test ...... SUCCESS
Running cu-math-test ...... SUCCESS
浠ヤ笂鍙傝冭嚜
http://blog.csdn.net/abcjennifer/article/details/23016583
Ubuntu12.04閰岖疆NVIDIA cuda5.5缁忛獙甯
鍒嗙被锛 Computer System Linux & MAC Python2014-04-06 08:58 9938浜洪槄璇 璇勮(16) 鏀惰棌 涓炬姤
涔嫔墠閰嶈繃涓阆嶉兘蹇桦厜浜嗭纴鐜板湪瑕侀吨鏂伴厤涓阆岖湡鏄濂介毦杩囥伞伞傜壒姝よ板綍鍙傝幂绣绔欎互渚挎煡阒呫
=============
鐜澧冿细Ubuntu 12.04+Cuda5.5
The setup of CUDA development tools on a system running the appropriate version of Linux consists of a few simple steps:
瑙佸畼鏂归厤缃镓嫔唽锛 http://docs.nvidia.com/cuda/cuda-getting-started-guide-for-linux/index.html
涓媟un濂戒简
[plain] view plain
[plain] view plain
blacklist.conf锷犲叆
[plain] view plain
[plain] view plain
Cuda5.5闆嗘垚浜唗oolkit锛宻dk鍜宒river, 镓浠ュ畨瑁呯殑镞跺欎竴璺钖屾剰涓嬫潵灏卞ソ浜
涔熷氨鏄疭DK瀹夎呭け璐ワ纴杩欎釜瀹樻柟镓嫔唽涓娄篃鎻愬埌浜呜В鍐虫柟妗堛
[plain] view plain
鍒版牴鐩褰曚笅镄/path/to/extract/dir/铡绘垒cuda-samples_5.5.22_*******.run, 瀹夎
[plain] view plain
[plain] view plain
浣夸箣鐢熸晥锛
source /etc/profile锛埚瑰簲profile锛夋垨sudo ldconfig锛埚瑰簲bashrc锛
杩樻湁涓绉嶈却dk镄勬柟娉曡 http://askubuntu.com/questions/338907/how-to-install-cuda-5-5-under-ubuntu-12-04-lts-64-bit
deviceQuery:
姝f枃链涓嬫柟
=============
姝ゅ栭梼涓婂叾浠栭厤缃鍙傝冿细
㈡ MD5是如何编译的
MD5简介
MD5的全称是Message-Digest Algorithm 5,在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。
Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。请注意我使用了“字节串”而不是“字符串”这个词,是因为这种变换只与字节的值有关,与字符集或编码方式无关。
MD5将任意长度的“字节串”变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法将一个MD5的值变换回原始的字符串,从数学原理上说,是因为原始的字符串有无穷多个,这有点象不存在反函数的数学函数。
MD5的典型应用是对一段Message(字节串)产生fingerprint(指纹),以防止被“篡改”。举个例子,你将一段话写在一个叫readme.txt文件中,并对这个readme.txt产生一个MD5的值并记录在案,然后你可以传播这个文件给别人,别人如果修改了文件中的任何内容,你对这个文件重新计算MD5时就会发现。如果再有一个第三方的认证机构,用MD5还可以防止文件作者的“抵赖”,这就是所谓的数字签名应用。
MD5还广泛用于加密和解密技术上,在很多操作系统中,用户的密码是以MD5值(或类似的其它算法)的方式保存的,用户Login的时候,系统是把用户输入的密码计算成MD5值,然后再去和系统中保存的MD5值进行比较,而系统并不“知道”用户的密码是什么。
一些黑客破获这种密码的方法是一种被称为“跑字典”的方法。有两种方法得到字典,一种是日常搜集的用做密码的字符串表,另一种是用排列组合方法生成的,先用MD5程序计算出这些字典项的MD5值,然后再用目标的MD5值在这个字典中检索。
即使假设密码的最大长度为8,同时密码只能是字母和数字,共26+26+10=62个字符,排列组合出的字典的项数则是P(62,1)+P(62,2)….+P(62,8),那也已经是一个很天文的数字了,存储这个字典就需要TB级的磁盘组,而且这种方法还有一个前提,就是能获得目标账户的密码MD5值的情况下才可以。
在很多电子商务和社区应用中,管理用户的Account是一种最常用的基本功能,尽管很多Application Server提供了这些基本组件,但很多应用开发者为了管理的更大的灵活性还是喜欢采用关系数据库来管理用户,懒惰的做法是用户的密码往往使用明文或简单的变换后直接保存在数据库中,因此这些用户的密码对软件开发者或系统管理员来说可以说毫无保密可言,本文的目的是介绍MD5的java Bean的实现,同时给出用MD5来处理用户的Account密码的例子,这种方法使得管理员和程序设计者都无法看到用户的密码,尽管他们可以初始化它们。但重要的一点是对于用户密码设置习惯的保护。
有兴趣的读者可以从这里取得MD5也就是RFC 1321的文本。 http://www.ietf.org/rfc/rfc1321.txt
实现策略
MD5的算法在RFC1321中实际上已经提供了C的实现,我们其实马上就能想到,至少有两种用Java实现它的方法,第一种是,用Java语言重新写整个算法,或者再说简单点就是把C程序改写成Java程序。第二种是,用JNI(Java Native Interface)来实现,核心算法仍然用这个C程序,用Java类给它包个壳。
但我个人认为,JNI应该是Java为了解决某类问题时的没有办法的办法(比如与操作系统或I/O设备密切相关的应用),同时为了提供和其它语言的互操作性的一个手段。使用JNI带来的最大问题是引入了平台的依赖性,打破了SUN所鼓吹的“一次编写到处运行”的Java好处。因此,我决定采取第一种方法,一来和大家一起尝试一下“一次编写到处运行”的好处,二来检验一下Java 2现在对于比较密集的计算的效率问题。
实现过程
限于这篇文章的篇幅,同时也为了更多的读者能够真正专注于问题本身,我不想就某一种Java集成开发环境来介绍这个Java Bean的制作过程,介绍一个方法时我发现步骤和命令很清晰,我相信有任何一种Java集成环境三天以上经验的读者都会知道如何把这些代码在集成环境中编译和运行。用集成环境讲述问题往往需要配很多屏幕截图,这也是我一直对集成环境很头疼的原因。我使用了一个普通的文本编辑器,同时使用了Sun公司标准的JDK 1.3.0 for Windows NT。
其实把C转换成Java对于一个有一定C语言基础的程序员并不困难,这两个语言的基本语法几乎完全一致.我大概花了一个小时的时间完成了代码的转换工作,我主要作了下面几件事:
把必须使用的一些#define的宏定义变成Class中的final static,这样保证在一个进程空间中的多个Instance共享这些数据
删去了一些无用的#if define,因为我只关心MD5,这个推荐的C实现同时实现了MD2 MD3和 MD4,而且有些#if define还和C不同编译器有关
将一些计算宏转换成final static 成员函数。
所有的变量命名与原来C实现中保持一致,在大小写上作一些符合Java习惯的变化,计算过程中的C函数变成了private方法(成员函数)。
关键变量的位长调整
定义了类和方法
需要注意的是,很多早期的C编译器的int类型是16 bit的,MD5使用了unsigned long int,并认为它是32bit的无符号整数。而在Java中int是32 bit的,long是64 bit的。在MD5的C实现中,使用了大量的位操作。这里需要指出的一点是,尽管Java提供了位操作,由于Java没有unsigned类型,对于右移位操作多提供了一个无符号右移:>>>,等价于C中的 >> 对于unsigned 数的处理。
因为Java不提供无符号数的运算,两个大int数相加就会溢出得到一个负数或异常,因此我将一些关键变量在Java中改成了long类型(64bit)。我个人认为这比自己去重新定义一组无符号数的类同时重载那些运算符要方便,同时效率高很多并且代码也易读,OO(Object Oriented)的滥用反而会导致效率低下。
限于篇幅,这里不再给出原始的C代码,有兴趣对照的读者朋友可以去看RFC 1321。MD5.java源代码
测试
在RFC 1321中,给出了Test suite用来检验你的实现是否正确:
MD5 ("") =
MD5 ("a") =
MD5 ("abc") =
MD5 ("message digest") =
MD5 ("abcdefghijklmnopqrstuvwxyz") =
……
这些输出结果的含义是指:空字符串””的MD5值是,字符串”a”的MD5值是……
编译并运行我们的程序:
javac –d . MD5.java
java beartool.MD5
为了将来不与别人的同名程序冲突,我在我的程序的第一行使用了package beartool;
因此编译命令javac –d . MD5.java 命令在我们的工作目录下自动建立了一个beartool目录,目录下放着编译成功的 MD5.class
我们将得到和Test suite同样的结果。当然还可以继续测试你感兴趣的其它MD5变换,例如:
java beartool.MD5 1234
将给出1234的MD5值。
可能是我的计算机知识是从Apple II和Z80单板机开始的,我对大写十六进制代码有偏好,如果您想使用小写的Digest String只需要把byteHEX函数中的A、B、C、D、E、F改成a、b、 c、d、e、f就可以了。
MD5据称是一种比较耗时的计算,我们的Java版MD5一闪就算出来了,没遇到什么障碍,而且用肉眼感觉不出来Java版的MD5比C版的慢。
为了测试它的兼容性,我把这个MD5.class文件拷贝到我的另一台Linux+IBM JDK 1.3的机器上,执行后得到同样结果,确实是“一次编写到处运行了”。
Java Bean简述
现在,我们已经完成并简单测试了这个Java Class,我们文章的标题是做一个Java Bean。
其实普通的Java Bean很简单,并不是什么全新的或伟大的概念,就是一个Java的Class,尽管 Sun规定了一些需要实现的方法,但并不是强制的。而EJB(Enterprise Java Bean)无非规定了一些必须实现(非常类似于响应事件)的方法,这些方法是供EJB Container使用(调用)的。
在一个Java Application或Applet里使用这个bean非常简单,最简单的方法是你要使用这个类的源码工作目录下建一个beartool目录,把这个class文件拷贝进去,然后在你的程序中import beartool.MD5就可以了。最后打包成.jar或.war是保持这个相对的目录关系就行了。
Java还有一个小小的好处是你并不需要摘除我们的MD5类中那个main方法,它已经是一个可以工作的Java Bean了。Java有一个非常大的优点是她允许很方便地让多种运行形式在同一组代码中共存,比如,你可以写一个类,它即是一个控制台Application和GUI Application,同时又是一个Applet,同时还是一个Java Bean,这对于测试、维护和发布程序提供了极大的方便,这里的测试方法main还可以放到一个内部类中,有兴趣的读者可以参考: http://www.cn.ibm.com/developerWorks/java/jw-tips/tip106/index.shtml
这里讲述了把测试和示例代码放在一个内部静态类的好处,是一种不错的工程化技巧和途径。
把Java Bean装到JSP里
正如我们在本文开头讲述的那样,我们对这个MD5 Bean的应用是基于一个用户管理,这里我们假设了一个虚拟社区的用户login过程,用户的信息保存在数据库的个名为users的表中。这个表有两个字段和我们的这个例子有关,userid :char(20)和pwdmd5 :char(32),userid是这个表的Primary Key,pwdmd5保存密码的MD5串,MD5值是一个128bit的大整数,表示成16进制的ASCII需要32个字符。
这里给出两个文件,login.html是用来接受用户输入的form,login.jsp用来模拟使用MD5 Bean的login过程。
为了使我们的测试环境简单起见,我们在JSP中使用了JDK内置的JDBC-ODBC Bridge Driver,community是ODBC的DSN的名字,如果你使用其它的JDBC Driver,替换掉login.jsp中的
Connection con= DriverManager.getConnection("jdbc:odbc:community", "", "");
即可。
login.jsp的工作原理很简单,通过post接收用户输入的UserID和Password,然后将Password变换成MD5串,然后在users表中寻找UserID和pwdmd5,因为UserID是users表的Primary Key,如果变换后的pwdmd5与表中的记录不符,那么SQL查询会得到一个空的结果集。
这里需要简单介绍的是,使用这个Bean只需要在你的JSP应用程序的WEB-INF/classes下建立一个beartool目录,然后将MD5.class拷贝到那个目录下就可以了。如果你使用一些集成开发环境,请参考它们的deploy工具的说明。在JSP使用一个java Bean关键的一句声明是程序中的第2行:
<jsp:useBean id='oMD5' scope='request' class='beartool.MD5'/>
这是所有JSP规范要求JSP容器开发者必须提供的标准Tag。
id=实际上是指示JSP Container创建Bean的实例时用的实例变量名。在后面的<%和%>之间的Java程序中,你可以引用它。在程序中可以看到,通过 pwdmd5=oMD5.getMD5ofStr (password)引用了我们的MD5 Java Bean提供的唯一一个公共方法: getMD5ofStr。
Java Application Server执行.JSP的过程是先把它预编译成.java(那些Tag在预编译时会成为java语句),然后再编译成.class。这些都是系统自动完成和维护的,那个.class也称为Servlet。当然,如果你愿意,你也可以帮助Java Application Server去干本该它干的事情,自己直接去写Servlet,但用Servlet去输出HTML那简直是回到了用C写CGI程序的恶梦时代。
如果你的输出是一个复杂的表格,比较方便的方法我想还是用一个你所熟悉的HTML编辑器编写一个“模板”,然后在把JSP代码“嵌入”进去。尽管这种JSP代码被有些专家指责为“空心粉”,它的确有个缺点是代码比较难管理和重复使用,但是程序设计永远需要的就是这样的权衡。我个人认为,对于中、小型项目,比较理想的结构是把数据表示(或不严格地称作WEB界面相关)的部分用JSP写,和界面不相关的放在Bean里面,一般情况下是不需要直接写Servlet的。
如果你觉得这种方法不是非常的OO(Object Oriented),你可以继承(extends)它一把,再写一个bean把用户管理的功能包进去。
到底能不能兼容?
我测试了三种Java应用服务器环境,Resin 1.2.3、Sun J2EE 1.2、IBM WebSphere 3.5,所幸的是这个Java Bean都没有任何问题,原因其实是因为它仅仅是个计算程序,不涉及操作系统,I/O设备。其实用其它语言也能简单地实现它的兼容性的,Java的唯一优点是,你只需提供一个形态的运行码就可以了。请注意“形态”二字,现在很多计算结构和操作系统除了语言本身之外都定义了大量的代码形态,很简单的一段C语言核心代码,转换成不同形态要考虑很多问题,使用很多工具,同时受很多限制,有时候学习一种新的“形态”所花费的精力可能比解决问题本身还多。比如光Windows就有EXE、Service、的普通DLL、COM DLL以前还有OCX等等等等,在Unix上虽说要简单一些,但要也要提供一个.h定义一大堆宏,还要考虑不同平台编译器版本的位长度问题。我想这是Java对我来说的一个非常重要的魅力吧。
MD5算法说明
一、补位
二、补数据长度
三、初始化MD5参数
四、处理位操作函数
五、主要变换过程
六、输出结果
补位:
MD5算法先对输入的数据进行补位,使得数据位长度LEN对512求余的结果是448。即数据扩展至K*512+448位。即K*64+56个字节,K为整数。
具体补位操作:补一个1,然后补0至满足上述要求。
补数据长度:
用一个64位的数字表示数据的原始长度B,把B用两个32位数表示。这时,数
据就被填补成长度为512位的倍数。
初始化MD5参数:
四个32位整数 (A,B,C,D) 用来计算信息摘要,初始化使用的是十六进制表
示的数字
A=0X01234567
B=0X89abcdef
C=0Xfedcba98
D=0X76543210
处理位操作函数:
X,Y,Z为32位整数。
F(X,Y,Z) = X&Y|NOT(X)&Z
G(X,Y,Z) = X&Z|Y?(Z)
H(X,Y,Z) = X xor Y xor Z
I(X,Y,Z) = Y xor (X|not(Z))
主要变换过程:
使用常数组T[1 ... 64], T[i]为32位整数用16进制表示,数据用16个32位
的整数数组M[]表示。
具体过程如下:
/* 处理数据原文 */
For i = 0 to N/16-1 do
/*每一次,把数据原文存放在16个元素的数组X中. */
For j = 0 to 15 do
Set X[j] to M[i*16+j].
end /结束对J的循环
/* Save A as AA, B as BB, C as CC, and D as DD.
*/
AA = A
BB = B
CC = C
DD = D
/* 第1轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + F(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 0 7 1] [DABC 1 12 2] [CDAB 2 17 3] [BCDA 3
22 4]
[ABCD 4 7 5] [DABC 5 12 6] [CDAB 6 17 7] [BCDA 7
22 8]
[ABCD 8 7 9] [DABC 9 12 10] [CDAB 10 17 11] [BCDA
11 22 12]
[ABCD 12 7 13] [DABC 13 12 14] [CDAB 14 17 15]
[BCDA 15 22 16]
/* 第2轮* */
/* 以 [abcd k s i]表示如下操作
a = b + ((a + G(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 1 5 17] [DABC 6 9 18] [CDAB 11 14 19] [BCDA
0 20 20]
[ABCD 5 5 21] [DABC 10 9 22] [CDAB 15 14 23]
[BCDA 4 20 24]
[ABCD 9 5 25] [DABC 14 9 26] [CDAB 3 14 27] [BCDA
8 20 28]
[ABCD 13 5 29] [DABC 2 9 30] [CDAB 7 14 31] [BCDA
12 20 32]
/* 第3轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + H(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 5 4 33] [DABC 8 11 34] [CDAB 11 16 35]
[BCDA 14 23 36]
[ABCD 1 4 37] [DABC 4 11 38] [CDAB 7 16 39] [BCDA
10 23 40]
[ABCD 13 4 41] [DABC 0 11 42] [CDAB 3 16 43]
[BCDA 6 23 44]
[ABCD 9 4 45] [DABC 12 11 46] [CDAB 15 16 47]
[BCDA 2 23 48]
/* 第4轮*/
/* 以 [abcd k s i]表示如下操作
a = b + ((a + I(b,c,d) + X[k] + T[i]) <<< s). */
/* Do the following 16 operations. */
[ABCD 0 6 49] [DABC 7 10 50] [CDAB 14 15 51]
[BCDA 5 21 52]
[ABCD 12 6 53] [DABC 3 10 54] [CDAB 10 15 55]
[BCDA 1 21 56]
[ABCD 8 6 57] [DABC 15 10 58] [CDAB 6 15 59]
[BCDA 13 21 60]
[ABCD 4 6 61] [DABC 11 10 62] [CDAB 2 15 63]
[BCDA 9 21 64]
/* 然后进行如下操作 */
A = A + AA
B = B + BB
C = C + CC
D = D + DD
end /* 结束对I的循环*/
输出结果。
㈢ 计算机体系结构国家重点实验室(中国科学院计算技术研究所)的研究方向
计算机体系结构国家重点实验室设立五个主要研究方向,即高端计算机体系结构和设计方法、微体系结构、编译和编程、VLSI与容错计算、非传统计算机体系结构。围绕五个研究方向,结合实验室现有的基础和未来的发展规划,下设五个实验室(先进计算机系统实验室、微体系结构实验室、编译与编程实验室、集成电路实验室、并行算法实验室)和四个研究组(处理器设计研究组、操作系统研究组、存储体系结构研究组、量子计算研究组)。
以计算机系统结构的学科优势为依托,围绕超并行计算机系统和多核处理器开展基础研究和高技术前沿探索。主要研究方向包括:高性能计算机系统设计理论,微处理器设计的新原理、新结构和新方法。通过研究新型高性能计算机的体系结构,面向新型体系结构的模拟仿真、操作系统、应用建模和优化技术,高端处理器的微体系结构,跨平台多系统虚拟化技术、大规模片上多核并行处理器设计方法、可扩展可重构处理器设计方法,并行程序设计模型、语言、编译,先进微处理器的代码生成与优化,计算机体系结构及微体系结构可靠性设计,多核处理器的自测试、自诊断、自修复设计,VLSI测试和设计验证方法,为高性能计算机系统和高性能处理器设计领域的发展持续提供创新方法和关键技术。解决本领域国家急待解决的重大关键问题,推动计算机系统结构学科的科技进步。
㈣ MathLab - 涓涓锘轰簬璁$畻链轰唬鏁扮郴缁熺殑鏋佽交閲忕骇璁$畻鍣ㄥ拰缂栬疟鍣
鏁板﹀疄楠屽 - 涓娆捐交閲忕骇绉戝﹁$畻鍣ㄤ笌缂栫▼缂栬疟鍣ㄧ殑闱炲嚒涔嬩綔
鍦ㄥぇ瀛︿竴骞寸骇瀵掑亣镄勫垱鏂扮伀鑺变腑璇炵敓锛孧athLab鍑鍊熷叾绠绾︾殑璁捐″拰寮哄ぇ镄勫姛鑳斤纴涓虹戝﹁$畻鐖卞ソ钥呮彁渚涗简涓浣揿寲镄勮В鍐虫柟妗堛傝繖娆句粎120KB镄勫崟鏂囦欢绋嫔簭锛岄泦鎴愪简楂樼簿搴﹁$畻銆佽$畻链轰唬鏁扮郴缁熶互鍙婅嚜瀹氢箟缂栫▼镄勬棤闄愬彲鑳姐
镙稿绩锷熻兘浜镣癸细
- 绉戝﹁$畻涓揿: 镊瀹氢箟C璇瑷缂栫▼锛屾敮鎸侀珮绾ф暟瀛﹁繍绠楋纴鍖呮嫭浣嗕笉闄愪簬锷犲噺涔橀櫎銆佹寚鏁拌繍绠楀拰瀵兼暟璁$畻锛屽唴缃涓板瘜鏁板﹀嚱鏁板簱锛屾弧瓒冲氩厓闇姹伞
- 瀹炴椂缂栫▼浣挞獙: 瀹炴椂缂栬疟骞舵墽琛屼唬镰侊纴杞绘涧鍒涘缓钖锷ㄧ幆澧冿纴鏀鎸佽緭鍏ヨ緭鍑恒佹带鍒跺彴浜や簰锛岃缮鑳芥墽琛屽瓧绗︿覆镎崭綔鍜屾枃浠舵搷浣滐纴浠ュ强宓屽楀嚱鏁颁笌鍏ㄥ眬鍙橀噺镄勭$悊銆
- 渚挎恶寮忚繍绠楀姏閲: 鍙闇灏嗕唬镰佷缭瀛树负鏂囨湰鏂囦欢锛屾斁缃鐩褰曪纴閰岖疆钖锷ㄥご鏂囦欢锛岀劧钖庤繍琛屽皬宸х殑MathLab.exe锛屽嵆鍙钖锷ㄩ珮鏁堣$畻涔嬫梾銆
浠ヤ笅鏄疢athLab镄勪竴浜涘疄鐢ㄧず渚嬶细
- 渚1: 鍒╃敤阃掑綊瀹氢箟璁$畻F(n)镄勫硷纴F(16) = 1597
- 渚2: 璁$畻鍑芥暟f(x,y,z,w) = x*z + y*w镄勬棆杞锛孯(grad f) = ...
- 渚3: 鍒ゆ柇姝f暣鏁2017鏄钖︿负绱犳暟锛岃緭鍑虹粨鏋滀负1
- 渚4: 鎺㈢储寰鍒呜繍绠楋纴濡俤(x*z + ...)
- 渚5: 绱犲洜鏁板垎瑙g▼搴忥纴杈揿叆2352锛岃緭鍑轰负2^4*3*7^2
```csharp
F(n) = [n F(16)
```
```csharp
grad(f) = [∂f/∂x, ∂f/∂y, ∂f/∂z, ∂f/∂w]; R(v) = (y, -x, w, -z); R(grad f) > R(grad f)
```
```csharp
isprime(2017) > isprime(2017)
```
```csharp
d(x*z + ...) > d(x*e^y*z^2*(dy + dz)) > d(1/z*dx蚂dy)
```
```csharp
factor.txt: 杈揿叆2352锛岃緭鍑虹粨鏋
```
MathLab镄勮稿彲璇佹敛绛栨槸Creative Commons Attribution-NonCommercial-ShareAlike 4.0锛屽晢涓氢娇鐢ㄨ锋彁鍓嶈仈绯诲紑鍙戣呫
褰揿墠鐗堟湰宸叉洿鏂拌呖3.0.20210630锛屼紭鍖栦简镐ц兘骞跺紩鍏ヤ简鏂板姛鑳斤纴濡傜┖闂磋繍绠楃﹀拰鍑芥暟璋幂敤銆傚揩𨱒ヤ笅杞组athLab 3.0鍙婄敤鎴锋寚鍗楋纴浣挞獙杩欐捐交閲忕骇绉戝﹁$畻镄勯潻锻芥у伐鍏峰惂锛
娉ㄦ剰锛氢腑锲藉ぇ闄嗙敤鎴疯蜂娇鐢↙INE 1 钬 BILNN CLOUD銆
㈤ 用vs2008编了一段c++程序 用到opencv和crypto++库 调试无误 如何把这段程序交叉编译到实验室的嵌入式arm
把opencv的库加载arm的底层的代码中,关键你的arm支持什么操作系统
arm9可以移植操作系统
调试跟出问题可能跟自己的键盘按键设置有关,直接不用就行了哦
㈥ hxcpp瀹为獙瀹ょ爷绌朵粈涔堢殑锛
鍏充簬hxcpp镰旂┒瀹为獙瀹ゅ垎浜濡备笅锛
hxcpp镰旂┒瀹为獙瀹ゆ槸涓涓镊村姏浜庣爷绌跺拰寮鍙慼xcpp鎶链镄勫疄楠屽ゃ备笅闱㈠皢浠庝互涓嫔嚑涓镙囬樿繘琛岃︾粏鎻忚堪銆
1銆乭xcpp鎶链绠浠嬶细
hxcpp鏄涓绉嶅紑婧愮殑璺ㄥ钩鍙癈++缂栬疟鍣锛岀敤浜庡皢Haxe璇瑷缂栬疟鎴愰珮鏁埚彲镓ц岀殑C++浠g爜锛屼粠钥屽疄鐜板湪澶氢釜骞冲彴涓婅繍琛孒axe搴旂敤绋嫔簭镄勭洰镄勚
缁间笂镓杩帮纴hxcpp镰旂┒瀹为獙瀹よ嚧锷涗簬鎺ㄥ姩hxcpp鎶链镄勫彂灞曞拰搴旂敤锛屽苟涓哄紑鍙戜汉锻樻彁渚涙洿濂界殑璺ㄥ钩鍙板紑鍙戣В鍐虫柟妗堛傞氲繃涓嶆柇娣卞叆镰旂┒鍜屾帰绱锛宧xcpp镰旂┒瀹为獙瀹ゅ皢淇冭繘璇ユ妧链鍦ㄦ父鎴忓紑鍙戙佺Щ锷ㄥ簲鐢ㄥ紑鍙戠瓑棰嗗烟镄勫箍娉涘簲鐢ㄣ