博文

目前显示的是 2018的博文

LLVM 6.0发布,附下载地址及安装办法

官方文档: http://releases.llvm.org/6.0.0/docs/CMake.html

下载地址:
http://llvm.org/releases/6.0.0/

如果你没有找到与你系统对应的二进制包,可按下述步骤编译及安装:
下载源代码 mkdir llvm
cd llvm

aria2c -x 5 -j 5 -k 1M http://releases.llvm.org/6.0.0/llvm-6.0.0.src.tar.xz
aria2c -x 5 -j 5 -k 1M http://releases.llvm.org/6.0.0/cfe-6.0.0.src.tar.xz
aria2c -x 5 -j 5 -k 1M http://releases.llvm.org/6.0.0/compiler-rt-6.0.0.src.tar.xz
aria2c -x 5 -j 5 -k 1M http://releases.llvm.org/6.0.0/lldb-6.0.0.src.tar.xz
aria2c -x 5 -j 5 -k 1M http://releases.llvm.org/6.0.0/lld-6.0.0.src.tar.xz
aria2c -x 5 -j 5 -k 1M http://releases.llvm.org/6.0.0/clang-tools-extra-6.0.0.src.tar.xz
aria2c -x 5 -j 5 -k 1M http://releases.llvm.org/6.0.0/polly-6.0.0.src.tar.xz
aria2c -x 5 -j 5 -k 1M http://releases.llvm.org/6.0.0/openmp-6.0.0.src.tar.xz

解压缩
for filename in *.xz; do tar -Jxf $filename ; done

mv cfe-6.0.0.src llvm-6.0.0.src/tools/clang
mv compiler-rt-6.0.0.src llvm-6.0.0.src/projects/compiler-rt
mv clang-tools-extra-6.0.0.src llvm-6.0.0.src/tools/clang/tool…

异步执行task的时候,一定要把完成通知放在最末尾的地方

请看下面这段示例代码。这段程序的目的是计算1*2+3*4+5*6=? 。它试图并行的计算3个乘法,然后汇总。如果乘号的两边是大矩阵或者向量,这样的多线程计算会得到很好的加速。
#include <atomic> #include <condition_variable> #include <mutex> #include <pthread.h> #include <stdio.h> #include <thread> #include <unistd.h> #define DISALLOW_COPY_AND_ASSIGN(TypeName) \ TypeName(const TypeName &) = delete; \ void operator=(const TypeName &) = delete class SubTask; void *runSubTask(void *); class Job { public: Job() {} void compute(); void onSubTaskFinished() { if (--active_tasks == 0) { cv_.notify_all(); } } std::atomic<size_t> active_tasks; private: std::mutex m_; std::condition_variable cv_; DISALLOW_COPY_AND_ASSIGN(Job); }; class SubTask { public: int v1; int v2; std::atomic<int> *result; Job *parent; int task_id; ~SubTask() { printf("Sub task %d finished\n", task_id); } //BUG!…

Linux调整分区及备份恢复小结

如果想要扩展一个分区,那么只能向后扩展,不能向前扩展。
调整一个分区的大小分为三步:

1. 用fdisk/gdisk调整分区表。
     不能直接modify。需要先删除该分区,再新建。
2. fsck
3. 用resize2fs调整元数据信息

resize2fs要求分区的起始位置不能变。

"when  recreating the partition, make sure you create it with the same starting disk cylinder as before!  Otherwise, the resize operation will certainly not work, and you  may  lose  your  entire filesystem."

如果需要往前移动,那么最好是先备份再恢复。作为一个FreeBSD的老用户,我非常信赖dump/restore这两个命令。简略步骤如下:
$ mkfs.ext4 /dev/sda3
$ mount /dev/sda3 /mnt/a
$ cd /mnt/a
$ dump -a0f - /dev/sda4 | restore -rf -





linux wifi regulatory database在新版本kernel中的更改

更新linux kernel后经常会遇到这样的错误信息:

“Direct firmware load for regulatory.db failed”

这是因为新版本的kernel更改了load regulatory.db 的方式
解决办法是手动从https://mirrors.edge.kernel.org/pub/software/network/wireless-regdb/ 下载最新的包,解压缩后把regulatory.db regulatory.db.p7s 复制到/lib/firmware即可

然后reboot,看到这样的信息就对了
"cfg80211: Loading compiled-in X.509 certificates for regulatory database"


参考:https://wireless.wiki.kernel.org/en/developers/regulatory/wireless-regdb