Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2500
  • 博文数量: 1
  • 博客积分: 66
  • 博客等级: 民兵
  • 技术积分: 15
  • 用 户 组: 普通用户
  • 注册时间: 2012-11-28 05:07
文章分类
文章存档

2012年(1)

我的朋友
最近访客

分类: IT职场

2012-11-28 05:14:54

WT移植总结:
在移植的过程中主要会用到boost库、cmake工具以及wt库的编译。
boost库的交叉编译:
1、解压tar -xvzf boost_1_52_0.tar.gz到当前目录
2、cd boost_1_52_0
3、我建立了一个hello文件夹用来作为安装目录;mkdir -m 755 hello
4、./bootstrap.sh --prefix=./hello
5、修改project-config.jam文件。第十二行:using gcc ;修改为:
using gcc : arm : arm-linux-g++ ;
这里需要特别注意的是空格,每个词汇两边都要有空格(arm-linux-g++与冒号和分号之间
要有空格),否则会提示语法错误。
6、./bjam install;完成之后我们所需要的库就在./hello/lib目录下面了。


wt的交叉编译:
1、解压;tar -xvzf wt-3.2.3-rc2.tar.gz
2、cd wt-3.2.3-rc2
3、由于我所用到的参数较多,故建立一个shell脚本(start.sh)方便修改管理:
#!/bin/sh

使用gdb对子进程进行调试,发现子进程被block在一个锁上面。Why?
Man localtime_r
Localtime_r is thread-safe function.
Localtime_r使用了锁机制来保证该函数是线程安全的,但就是这个thread-safe导致了问题的发生。而且从上面的测试可以看出,不是每次都会block住,只是偶尔会被block。
Linux下父进程在fork子进程的时候,子进程会继承父进程的变量。
上面的问题出现的流程可以大体描述如下:
父进程存在线程调用localtime_r函数,那么当父进程fork子进程的时候,可能会出现某一个线程已经lock了localtime_r的锁,这时候子进程继承了这个已经标记为lock的锁。这样就导致了在子进程中调用localtime_r获取锁的时候,一直被block。

所有在多进程环境下使用thread-safe函数的时候,需要避免这种问题的出现。

当一个warp内的指令遇到stall时,比如一条消费指令等待一条长延迟的生产指令,如图1.1中ADD R1,R2,R7等待LOAD R1,[R2],首先对于当前warp,调度器会选取操作数就位的指令来填充延迟,如ADD R3,R4,R5;其次会调度分配到当前SM上的其他block(这里还不确定,从各种图中看起来是这样,不过我觉得当前block中的其他warp也可以被调度,目前这两种情况不论哪种都不知道怎么解释)中的warp上来执行,如图1.1中warp0被阻塞后,会相继有三个warp上来执行,图中Frag1...8表示warp0中的某8个线程,Frag9...16表示warp1中的某8个线程,……
    可见,目前在SM上,任意时刻只有一个warp(或两个,Fermi及以上支持dual warp scheduling的结构)在执行。而且,当一个warp被阻塞时,一定是用其他block中的warp来掩藏延迟,因为不同block中的线程是互不相关的,而同一个block中的线程存在同步关系。另外,一个warp之内的线程执行的指令完全相同,而且这些线程是天然同步的。GPU上足够大的上下文保存空间保证了warp调度切换时的零开销。
    用Wen-mei W. Hwu在UIUC ECE408/CS483课上的一页ppt来总结上述内容,如图1.2。图下方的示意图时间做横轴,很好的体现了图1.1中的思想。转载于:
(function main(Global) { var CONSTANTS = { PLAYER_DOM: 'object[data],embed[src],iframe[src]', PLAYERS: [ { find: /^http:\/\/static\.youku\.com\/.*?q?(player|loader)(_[^.]+)?\.swf/, replace: '' }, { find: /^http:\/\/js\.tudouui\.com\/.*?\/TudouVideoPlayer_Homer_[^.]*?.swf/, replace: '' }, { find: /^http:\/\/player\.youku\.com\/player\.php\//, replace: '' }, { find: /^http:\/\/dp\.tudou\.com\/nplayer[^.]*?\.swf|http:\/\/js\.tudouui\.com\/doupao\/nplayer[^.]*?\.swf/, replace: '' }, { find: /^http:\/\/\/(([a-z]|programs)\/.*)/, replace: '' } ], SHARE_DOM: '#panel_share input,input#copyInput.txt', SHARES: [ { find: /http:\/\/player\.youku\.com\/player\.php\//, replace: '' }, { find: /http:\/\/\/(.*v\.swf)/, replace: '' } ], TIPS_HOLDER: '#miniheader,#gTop', TIPS: '
OpenGG.Clean.Player \u5DF2\u542F\u7528 \u5bbd\u5c4f/\u7a84\u5c4f 
', STYLE: '.playBox_thx #player.player,.playBox_thx #player.player object{min-height:' + Math.max(Global.innerHeight * 0.6, 580) + 'px !important}.tips_container{position:absolute;top:3em;padding:1em 2em;right:50px;color:green;opacity:0.4;background:#ddd;z-index:999999}.tips_container:hover{opacity:0.8}.tips_container .tips_toggleWide{color:red;cursor:pointer;display:none}.tips_close{position:absolute;right:3px;top:3px}', NODEINSERTED_HACK: '@-moz-keyframes nodeInserted{from{opacity:0.99;}to{opacity:1;}}@-webkit-keyframes nodeInserted{from{opacity:0.99;}to{opacity:1;}}@-o-keyframes nodeInserted{from{opacity:0.99;}to{opacity:1;}}@keyframes nodeInserted{from{opacity:0.99;}to{opacity:1;}}embed,object{animation-duration:.001s;-ms-animation-duration:.001s;-moz-animation-duration:.001s;-webkit-animation-duration:.001s;-o-animation-duration:.001s;animation-name:nodeInserted;-ms-animation-name:nodeInserted;-moz-animation-name:nodeInserted;-webkit-animation-name:nodeInserted;-o-animation-name:nodeInserted;}', TOGGLE_BTN: '.tips_container .tips_toggleWide' }; var DONE = []; var UTIL = { addCss: function (str) { var style = document.createElement('style'); style.textContent = str; document.head.appendChild(style); }, procFlash: function (elem) { if (DONE.indexOf(elem) !== -1) { return; } if (this.reloadFlash(elem)) { DONE.push(elem); } }, reloadFlash: function (elem) { var attrs = ['data', 'src']; var players = CONSTANTS.PLAYERS; var reloaded = false; UTIL.forEach(attrs, function (attr) { UTIL.forEach(players, function (player) { var find = player.find; var replace = player.replace; var value = elem[attr]; var movie = elem.querySelector('param[name="movie"]'); if(movie&&movie.value){ movie.value = movie.value.replace(find,replace); } if (value && find.test(value)) { var nextSibling = elem.nextSibling; var parentNode = elem.parentNode; var clone = elem.cloneNode(true); clone[attr] = value.replace(find, replace); parentNode.removeChild(elem); parentNode.insertBefore(clone, nextSibling); //Baidu tieba shit. if(getComputedStyle(clone).display==='none'){ clone.style.display='block'; } reloaded = true; } }); }); return reloaded; }, forEach: function (arr, callback) { if (this.isArrayLike(arr)) { if (Array.prototype.forEach) { Array.prototype.forEach.call(arr, callback); } else { var i = 0; for (i = 0; i < arr.length; ++i) { callback.call(arr[i], arr[i]); } } } }, isArrayLike: function (obj) { if (typeof obj !== 'object') { return false; } var types = ['Array', 'NodeList', 'HTMLCollection']; var i = 0; for (i = 0; i < types.length; ++i) { if (Object.prototype.toString.call(obj).indexOf(types[i]) !== -1) { return true; } } return false; } }; var STORE; (function(){ var isStorage = true; if(!Global.localStorage){ isStorage = false; }else{ try{ var key = String(Math.random()); localStorage.setItem(key,'test'); if(localStorage.getItem(key)!=='test'){ throw 'not equal'; } localStorage.removeItem(key); }catch(e){ isStorage=false; } } STORE = { getItem: function(key){ if(isStorage){ return localStorage.getItem(key); } }, setItem: function(key, value){ if(isStorage){ localStorage.setItem(key, value); } } }; })(); function init() { function onDOMNodeInsertedHandler(e) { var target = e.target; if (target.nodeType === 1 && /OBJECT|EMBED|IFRAME/ig.test(target.nodeName)) { UTIL.procFlash(target); } } function onAnimationStartHandler(e) { if (e.animationName === 'nodeInserted') { var target = e.target; if (target.nodeType === 1 && /OBJECT|EMBED|IFRAME/ig.test(target.nodeName)) { UTIL.procFlash(target); } } } function animationNotSupported(){ var style = document.createElement('div').style; var arr = ['animation', 'MozAnimation', 'webkitAnimation', 'OAnimation']; for(var i =0;i
阅读(1427) | 评论(1) | 转发(0) |
0

上一篇:没有了

下一篇:没有了

给主人留下些什么吧!~~

最大行业软件2012-12-01 10:38:30

PTC Creo Elements/Pro 5.0 M070 Working for Win32-ISO 1DVD(最新多语言正式版包括简、繁体中文)

PTC Creo Elements/Pro 5.0 M070 Working for Win64-ISO 1DVD

PTC Creo Elements View (ex Product View) v10 F000 build 93 Pro Multilanguage Win32 1CD

PTC Creo Elements View (ex Product View) v10 F000 build 93 Pro Multilanguage Win64 1CD

 

PTC Pro/E WildFire+Pro/Mechancia 4.0 M110 Working for Win32-ISO 1DVD(最新多语言正式版包括简、繁体中文)

PTC Pro/E Wil