作业提交命令:
- 参数 -I (交互式运行、本地终端挂掉,作业就挂掉了; 后续使用 -o out.log 后台运行)
- 参数 -q(太湖之光有4W的CPU,为了使用方便,认为的划分为若干队列; -q 指定在哪个队列上运行任务)
- 参数 -n (指定使用的核组数(sw26010CPU上有4个核组(那么太湖之光上,有近16万个核组)))
- 参数 -b (指定使用从核栈空间;从核函数若涉及函数调用,肯定要压栈(如果压栈到主存,有访存开销))
- 参数 -cgsp (指定使用从核的数量)
- 参数 -host_stack (指定主核栈空间大小;默认为8M,一般设置在128MB以上;(如果主核函数比较大,涉及较多的函数调用,需要压栈操作;局部变量的数据的大小))
- 参数 -share_size (设置核组共享空间大小;(其实我理解就是设置堆空间的大小))
注意:
1、 -host_stack 、 -share_size的单位都是MB
2、 -host_stack 、 -share_size指的都是主存的大小
3、一般设置 host_stack + share_size 小于 7500 (因为主存的空间大小为8GB,还有一部分内存空间是内核的)
SW26010处理器架构
获取从核ID号
thread_id = athread_get_id(-1)
LDM降低访存开销
主核 从核 访问数据的开销
从核并行编程关键点2
利用athread_get(主存地址,从核地址,数据量)
把主存数据放到从核LDM
降低访存开销
具体从核函数怎么写?
// 将主存数据 放到 从核LDM处
athread_get(数据的主存地址,数据的从核LDM局存地址,数据量,&get_reply);
// 将从核LDM数据 放到 主存地址处
athread_put(数据的从核LDM局存地址, 数据的主存地址,数据量,&put_reply);
/*
注意,每成功一次athread_get、和athread_put操作,回答字都会加一
*/
主核函数的写法
extern SLAVE_FUN(func)(); // 从核函数声明
athread_init(); /*1、从核线程初始化*/
athread_spawn(func, args); /*2、从核线程启动*/
athread_join(); /*3、从核线程回收*/
athread_halt(); /*4、从核线程终止*/
sw5cc编译主核从核文件