leenldk 发布的文章

记一下看的几个spmm项目的代码结构

spbenchmark

适之学长写的
common/test.h : 测试代码,测试主函数为 testMain

merge-spmm

来自论文design principle for SPMM on GPU

test/gbspmm.cu : 主函数位置,用于处理参数,运行test

graphblas/backend/apspie/spmm.hpp:调用spmmRowKernel

graphblas/backend/apspie/kernels/spmm.hpp: 实现spmmRowKernel

graphblas/util.hpp : 定义参数等

merged path过程:
garphblas/backend/apspie/mxm.hpp : mxm ->
graphblas/backend/apspie/spmm.hpp : mergepath_spmm ->
ext/moderngpu/include/kernels/spmvcsr.cuh : SpmmCsrBinary -> SpmmCsrHost -> SpmmCsrInner ->
1.csrtools.cuh -> PartitionCsrSegReducePrealloc
2.spmvcsr.cuh -> KernelSpmmCsr

block-sparse RNN

prune掉整个块
所有层使用相同超参数

balanced sparsity

每行切块,每块中 prune 掉指定数量元素

shrinkbench :
compression : 总参数数量 / 剩余参数数量

rules :

AndroidManifest.xml : 根内容记录

属性:
"@style" : 位于 res/values/styles.xml
"@color" : 位于 res/values/colors.xml,保存颜色 (格式argb)
"@string" : 位于 res/values/strings.xml,保存字符串
"@mipmap" :位于 res/mipmap,存储图片,每个图片一个文件夹

"@+id" : 设定 id,可以通过 findViewById(R.id.[id name]) 查找

R.layout : 位于 res/layout,所有layout
R.menu : 位于 res/menu,菜单资源

Activity

创建 Activity 后,需要在 AndroidManifest.xml 中配置

setContentView(R.layout.activity_main) :设定layout
startActivity(Intent intent) :启动新的Activity
传递信息:

//发送方
Intent intent = new Intent(this, TestActivity.class);
intent.putExtra("username", "Peter");
intent.putExtra("age", 20);
startActivity(intent);
//接收方
Intent intent = getIntent();
String username = intent.getExtra("username");
int age = intent.getExtra("age", 0);

finish() : 结束自身Activity,并回调启动者的 onActivityResult

onKeyDown :重写输入键实现

Service

后台运行
Started状态回调:onStartCommand
Bound状态回调:onBind

Application

管理应用级数据
onCreate() : 应用开始
onTerminate() : 应用结束
程序名:

Button

button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View view) {
        // do sth.
    }
})

TextView

textview.setText("String");

Toast

短暂显示提示

Toast toast = new Toast(this);
toast.setDuration(Toast.LEGTH_SHORT);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setView(ll);

x86-64

Loading a value into a 32-bit register name sets the upper 32 bits of the register to zero. Thus, after movl $-1, %eax, the %rax register has value 0x00000000FFFFFFFF.
Loading a value into a 16- or 8-bit register name leaves all other bits unchanged.
既movl等操作32bit指令会将后32bit置零

6.30

开始看适之学长给的论文
introduction 中提到bert模型的pre_train过程代价极高
1024 V100 1day
bert large 很难在12GB ~ 16GB 的显卡上reproduce 结果

bert有multiple layers 的双向 transformers
每个 transformer 有一个 multi-head self-attention层,position-wise feed-forward层