虽然我是菜鸟,但是三个月的工作,收获很多,在此和大家分享一下!
1.全局变量vs局部变量
全局变量可以用来private吗?答案是不可以!这是三个月工作最痛苦的总结,搞来搞去,实在是恶心,最后发现原来全局变量不能真正在#pragma omp ...private()列表里面实现每个线程私有,具体原因不知道,我猜测是因为,程序执行过程中,并不能保证本线程修改全局变量时时修改的本线程所私有的那个全局变量。
局部变量当然可以用来private了。
2.静态变量
static变量在串行时是个宝贝,在并行时,就是个屁。。。而且现在还没有找到解决办法——怎么让程序正确并行,并且允许static的存在。
3.指针
指针可以用来private吗?没有任何意义。。。因为指针本身就是个地址,而一旦私有,指针的值改变,预示着变量的地址胡乱跑,肯定出错。
4.结构体、类
结构体,类中的元素,如果是非指针类型,是可以private的,而且语义正确。
里面的指针类型,最好改成数组,如果是特别大的数组,那就等死吧。。。
5.再论指针
最好不要有任何指针出现在并行域里面,但是,这几乎不可能。那个,总得找个办法吧?办法就是再搞几个指针,然后申请空间,然后复制,然后每个线程一个,但是不要放到private列表里。
1.全局变量vs局部变量
全局变量可以用来private吗?答案是不可以!这是三个月工作最痛苦的总结,搞来搞去,实在是恶心,最后发现原来全局变量不能真正在#pragma omp ...private()列表里面实现每个线程私有,具体原因不知道,我猜测是因为,程序执行过程中,并不能保证本线程修改全局变量时时修改的本线程所私有的那个全局变量。
局部变量当然可以用来private了。

2.静态变量
static变量在串行时是个宝贝,在并行时,就是个屁。。。而且现在还没有找到解决办法——怎么让程序正确并行,并且允许static的存在。
3.指针
指针可以用来private吗?没有任何意义。。。因为指针本身就是个地址,而一旦私有,指针的值改变,预示着变量的地址胡乱跑,肯定出错。
4.结构体、类
结构体,类中的元素,如果是非指针类型,是可以private的,而且语义正确。
里面的指针类型,最好改成数组,如果是特别大的数组,那就等死吧。。。
5.再论指针
最好不要有任何指针出现在并行域里面,但是,这几乎不可能。那个,总得找个办法吧?办法就是再搞几个指针,然后申请空间,然后复制,然后每个线程一个,但是不要放到private列表里。