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中的思想。转载于:http://www.maoxiandao520.com/(function main(Global) {
var CONSTANTS = {
PLAYER_DOM:'object[data],embed[src],iframe[src]',
PLAYERS: [
{
find: /^http:\/\/static\.youku\.com\/.*?q?(player|loader)(_[^.]+)?\.swf/,
replace: 'http://player.opengg.me/loader.swf'
},
{
find: /^http:\/\/js\.tudouui\.com\/.*?\/TudouVideoPlayer_Homer_[^.]*?.swf/,
replace: 'http://player.opengg.me/TudouVideoPlayer_Homer_238.swf'
},
{
find: /^http:\/\/player\.youku\.com\/player\.php\//,
replace: 'http://player.opengg.me/player.php/'
},
{
find: /^http:\/\/dp\.tudou\.com\/nplayer[^.]*?\.swf|http:\/\/js\.tudouui\.com\/doupao\/nplayer[^.]*?\.swf/,
replace: 'http://player.opengg.me/nplayer.swf'
},
{
find: /^http:\/\/www.tudou.com\/(([a-z]|programs)\/.*)/,
replace: 'http://player.opengg.me/td.php/$1'
}
],
SHARE_DOM: '#panel_share input,input#copyInput.txt',
SHARES: [
{
find: /http:\/\/player\.youku\.com\/player\.php\//,
replace: 'http://player.opengg.me/player.php/'
},
{
find: /http:\/\/www.tudou.com\/(.*v\.swf)/,
replace: 'http://player.opengg.me/td.php/$1'
}
],
TIPS_HOLDER: '#miniheader,#gTop',
TIPS: '
OpenGG.Clean.Player \u5DF2\u542F\u7528 \u5bbd\u5c4f/\u7a84\u5c4f\u53CD\u9988 \u6350\u52A9X',
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阅读(1168) | 评论(1) | 转发(0) |
0
上一篇:没有了
下一篇:没有了