Author Archives: leo2013

OpenCL 介绍

OpenCL是当前一个通用的由很多公司和组织共同发起的多CPUGPU其他芯片 异构计算(heterogeneous)的标准,它是跨平台的。旨在充分利用GPU强大的并行计算能力以及与CPU的协同工作,更高效的利用硬件高效的完成大规模的(尤其是并行度高的)计算。在过去利用GPU对图像渲染进行加速的技术非常成熟,但是我们知道GPU的芯片结构擅长大规模的并行计算(PC级的GPU可能就是CPU的上万倍),CPU则擅长逻辑控制,因此不只局限与图像渲染,人们希望将这种计算能力扩展到更多领域,所以这也被称为GPGPU(即通用处计算处理的GPU)。

继续阅读

Posted in 杂项 | Tagged | Leave a comment

深度学习浅入门

我打算写一系列的博客来一点点介绍人工智能,以及在背后支持人工智能的机器学习和深度学习
所有的东西都是根据个人搜集和按照自己的理解(当时的理解)所写,因此难免会有错误,不过
随着学习的深入,我会不断的更新和纠正。

继续阅读

Posted in 人工智能 | Tagged | Leave a comment

机器学习的算法简单描述

1. 回归算法

  在大部分机器学习课程中,回归算法都是介绍的第一个算法。原因有两个:一.回归算法比较简单,介绍它可以让人平滑地从统计学迁移到机器学习中。二.回归算法是后面若干强大算法的基石,如果不理解回归算法,无法学习那些强大的算法。回归算法有两个重要的子类:即线性回归和逻辑回归。

继续阅读

Posted in 人工智能 | Tagged | Leave a comment

Python真正意义上的并行执行

前面我有篇文章专门介绍Python的GIL,

浅谈Python的多线程的GIL

由于Python中GIL的存在,导致Python的threading不是真正意义上的线程,那么使用python难道就真的没有办法同时在多个cpu上面执行并行执行代码了吗?并不是,首先你可以使用jython和ironPython这2个解释器,如果你不想换掉解释器的话,还想继续使用python的默认的解释器的话,python还提供了,

继续阅读

Posted in Python | Tagged | Leave a comment

markdown的主要的语法

今天开始打算使用markdown来写博客了,因为我的博客大部分是跟编程有关系,所以经常要嵌入代码,而传统的编辑器实在很难看。下面把markdown的主要的语法写下来,

Markdown Processed Emphasis *Emphasize* _emphasize_

**Strong** __Strong__ Emphasize
Strong

Some WordPress.com themes

may have different formatting

继续阅读

Posted in 杂项 | Tagged | Leave a comment

浅谈Python的多线程的GIL

在谈什么是GIL之前,我们来看看Python的线程例子

import threading

def worker():
    """thread worker function"""
    print 'Worker'
    return

threads = []
for i in range(5):
    t = threading.Thread(target=worker)
    threads.append(t)
    t.start()

上面的例子中,创建了5个线程,每个线程打印Worker之后就退出了。

继续阅读

Posted in Python | Tagged | 1 Comment

C++模板元编程初探

下面的文字摘自,

https://kelvinh.github.io/blog/2013/08/09/cpp-template-meta-programming/

这篇博客,主要是为了记一下当初看到C++模板元编程时的震惊程度。

在看Effective C++的时候,条款48,其中有这样一个例子:

继续阅读

Posted in C/C++ | Tagged | Leave a comment

H264的Annex B格式和AVCC格式

本文转载自

http://blog.csdn.net/romantic_energy/article/details/50508332

本文需要读者对H.264流有一定的了解才可以理解2种格式差异。

首先要理解的是没有标准的H.264基本流格式。文档中的确包含了一个Annex,特别是描述了一种可能的格式Annex B格式,但是这个并不是一个必须要求的格式。标准文档中指定了视频怎样编码成独立的包,但是这些包是怎样存储和传输的却是开放的。

继续阅读

Posted in 视频技术研究 | Tagged | Leave a comment

std::thread错误 terminate called without an active exception

本人之前写过一篇文章介绍如何使用C++11的是线程库
C++11的新特性之线程类

在之后的实践中发现一个问题,就是本文标题中列出的这个错误
terminate called without an active exception

本文中的代码使用下面的命令编译,编译环境 Centos 7,

$> g++ test.cpp -std=c++11 -ggdb -lpthread -o test

这个错误是在程序运行的时候出现的,编译阶段没有任何错误。问题代码如下,

“` c++
#include <iostream>
#include <stdlib.h>
#include <string>
#include <thread>

void task1(std::string msg){
std::cout << "task1 says: "<< msg;
}
int main() {
std::thread t1(task1, "hello");
return 0;
}

<pre><code><br>

本意是在主线程中创建一个线程答应一个字符串,但是程序没有任何输出,并且出错。原因就是std::thread在main()结束的时候,被销毁了。

除了上面这个这种情况,还有一种情况下(或者说使用场景)也会出现这个错误。这个问题是在子线程的对象是一个局部变量,在超出局部变量的生命周期,变量被销毁,下面的代码演绎了这种情况,

<br> “`C++ #include <iostream> #include <stdlib.h> #include <string> #include <thread> #include <unistd.h>

void task1(std::string msg){
std::cout << “task1 says: ” << msg;
}

void createThread( void )
{
try {
std::thread t1(task1, “hello”); }catch( … ){
std::cout<<“got exception”<<std::endl;
}
}

int main()
{
createThread();
while( true )
{
std::cout<<“main thread”<<std::endl;
usleep( 1000000 );
}

return 0;
}

解决办法就是join或者detach

  • join方法

“` C++
#include <iostream>
#include <stdlib.h>
#include <string>
#include <thread>

void task1(std::string msg){
std::cout << "task1 says: " << msg;
}
int main() {
std::thread t1(task1, "hello");
t1.join();
return 0;
}

<pre><code><br />* detach方法

“` C++
#include <iostream>
#include <stdlib.h>
#include <string>
#include <thread>

void task1(std::string msg){
std::cout << “task1 says: ” << msg;
}

int main() {
std::thread t1(task1, “hello”);
t1.detach();
return 0;
}

注意这里,t1.detach()只是保证了,在运行的时候不报本文所讨论的错误,但是这样的做法在这个例子中是有问题的,因为子线程可能还有没有机会执行,主线程已经退出。所以上面的例子可以自行修改(因为这不是本文讨论的重点)。

上面的程序会报上面的那个运行时的错误,然后进程退出,同时会生成core dump文件(如果你开启了生成core dump文件的开关),在linux下面开启生成core dump文件的开关的方法如下
$> ulimit -c unlimited

然后我们看看调用情况,
$> gdb test core.xxx
xxx是系统自动生成,根据你的系统生成的数字,自行修改。

(gdb) bt
#0  0x00007f9a72fe05f7 in raise () from /lib64/libc.so.6
#1  0x00007f9a72fe1ce8 in abort () from /lib64/libc.so.6
#2  0x00007f9a738e59d5 in __gnu_cxx::__verbose_terminate_handler() () from /lib64/libstdc++.so.6
#3  0x00007f9a738e3946 in ?? () from /lib64/libstdc++.so.6
#4  0x00007f9a738e3973 in std::terminate() () from /lib64/libstdc++.so.6
#5  0x00000000004012ff in std::thread::~thread (this=0x7fff5c2a97f0, __in_chrg=) at /usr/include/c++/4.8.2/thread:143
#6  0x0000000000401196 in createThread () at test.cpp:13
#7  0x00000000004011a1 in main () at test.cpp:17

继续阅读

Posted in C/C++ | Tagged | Leave a comment

C++11的新特性之shared_ptr和unique_ptr

本篇文章将继续介绍C++11的新特性-智能指针 shared_ptr和unique_ptr。关于所有C++11的重要的改变请参看,

C++11的重大改变

智能指正并不是C++11才引入的,早在C++98/03标准中已经有了auto_ptr。在C++11定义了新的智能指针来替代 std::auto_ptr.

继续阅读

Posted in C/C++ | Tagged | Leave a comment