mysql cmake ncursor_在移植的过程中主要会用到boost库、cmake工具以及wt库的编译。...

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

上一篇:没有了

下一篇:没有了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值