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

上一篇:没有了

下一篇:没有了

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

  1. 用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化

    前一段时间就在研究用Dockerfile构建MySQL镜像并实现容器启动过程中MySQL数据库系统的初始化,但被一些无关紧要的事儿给耽误了,经过查阅<dockerfile最佳实践>及MyS ...

  2. kali linux 支持什么编程语言_渗透过程中可能要用到的Kali工具小总结

    渗透过程中可能要用到的Kali工具小总结 写在最前面 最近在搞渗透的时候,发现过程中有一些kali工具还是很适合使用的 所以写一个渗透过程中可能用到的kali渗透工具的小小总结 写的不对 多多包涵 各 ...

  3. mysql集群和主从区别_搭建MySQL主从集群,主从复制过程中同步延迟问题

    上一节我们成功搭建了主从复制.读写分离,实际上并发量和数据量不大的情况下,使用起来也是非常的流畅,无任何问题,可以正常运行了. 但是,要保证高可用,高并发的情况,可以写数据库master就有累了,从服 ...

  4. 《大话软件工程—需求分析与软件设计》,给出了分析与设计过程中需要的理论、方法、工具和标准

    □ 做好一款软件从哪里开始呢?→ 客户需求的调研: □ 一款软件的价值高低由哪个环节决定呢?→ 软件的分析与设计: □ 软件顺利完成开发靠什么?→ 高效的项目管理: □ 软件开发的主要角色?→ 客户. ...

  5. [项目过程中所遇到的各种问题记录]工具篇——.NET开发时常用的工具类库

    在日常开发的过程当中我们总是会根据项目的开发需求将一些公用的类或者方法进行抽象封装,这些类或方法的抽象封装可能是基于某个项目或者多个项目,最常见的应该就是SQLHelper了,这些类库在实际使用的过程 ...

  6. 解决回归过程中内生性问题的方法之一-工具变量法

    OLS是常用的回归方法之一,那么OLS在使用过程中最重要的一个前提是解释变量与扰动项不相关,解释变量可以理解为我们研究时的自变量,扰动项可以理解为我们研究时与自变量独立的控制变量,如果出现解释变量与扰 ...

  7. springboot 主键重复导致数据重复_程序员:MySQL处理插入过程中主键或唯一键重复值的解决办法

    向MySQL插入数据有时会遇到主键重复的场景,原来的做法是先在程序代码中SELECT一下,判断是否存在指定主键或唯一键的数据,如果没有则插入,有的话则执行UPDATE操作,或另外一套逻辑,这种方法是不 ...

  8. MySQL处理插入过程中主键或唯一键重复值的解决办法

    向MySQL插入数据有时会遇到主键重复的场景,原来的做法是先在程序代码中SELECT一下,判断是否存在指定主键或唯一键的数据,如果没有则插入,有的话则执行UPDATE操作,或另外一套逻辑,这种方法是不 ...

  9. MM32F3277 MicroPython移植过程中对应的接口文件

    简 介: 给出了在MM32移植MicroPython过程中基础语法中Pin相关的内容. 关键词: MM32F3277,machine,Pin §01 MacinePin /* machine_pin. ...

  10. S3C2440移植Linux4.19.275内核以及过程中遇到的问题

    目录 1 问题一:内核移植时MTD分区问题 2 问题二:uboot的MTDPARTS_DEFAULT定义的MTD分区,bootargs中的文件系统分区,内核的mtd_partition smdk_de ...

最新文章

  1. 5.1 python的缩进
  2. R语言gganimate包创建可视化gif动图、可视化动图:创建动态散点图动画基于transition_time函数、使用shadow_wake函数配置动画的渐变效果(gradual falloff)
  3. 【转】【C#】无边框窗体移动的三种方法
  4. 在Hue中创建一个Oozie工作流
  5. JavaScript之match()方法讲解
  6. 突然明白了如何看待细枝末节
  7. mysql 数据库存储表情
  8. IDEA的使用注释编程时,出现报错解决方案
  9. redis 值字符串前面部分乱码_redis key乱码
  10. gps频率范围_一种应用于低电压GPS接收机的高线性度低噪声放大器
  11. mongoose c++封装
  12. android excel布局,Androidui布局控件(2)表格布局excelPanel
  13. c语言中Oo是什么进制整数字,C语言中的大小端存储及原码补码反码的运算关系 %d %u...
  14. 如何配置Mysql驱动
  15. 行为式验证码小侃,滑块验证码详解
  16. VS Code格式化代码插件Beautify
  17. 斐讯N1盒子刷Armbian安装jdk做Java服务器
  18. Java-枚举类enum及常用方法
  19. 如何两台电脑共享文件?
  20. Beatbox brilliance—TED Record

热门文章

  1. 蓝牙车载 linux,《基于嵌入式Linux蓝牙在车载电子系统中的应用》.pdf
  2. 文本文件单词的检索与计数c语言,文本文件单词的检索与计数
  3. 魔众刮刮卡抽奖系统 v2.0.0 支付抽奖,更好用的刮刮卡系统
  4. 机器学习基础-Lagrange duality
  5. iOS开发-代码分析工具之Infer
  6. 2009-03-13读书记录:《Enjoying Web Development with Wickte》三章心得
  7. Centos设置打开终端快捷键
  8. 论文笔记 - Learning Compact Binary Descriptors with Unsupervised Deep Neural Networks
  9. PTA L1-087(C++) 机工士姆斯塔迪奥
  10. 基于stm32的自动循迹及自动搬运物联网图传小车