尝试cython和openmp(二)

2014-11-24 13:28:32 · 作者: · 浏览: 74
。当然,同时还有一些杂七杂八的文件,如‘build’目录下面的‘lib’文件。这都提示着,这是在windows vistual studio环境下。在linux+gcc环境下,就要生成.so文件了,而且“/openmp”的选项就要写成“-fopenmp”


6. 写TestOMP.py文件

上述两个步骤,相当于把某个python效率瓶颈模块(这之前需要用profile工具来定位)用效率更高的代码写成了python的c扩展形式,接下来,就是要在python代码中调用他们。TestOMP.py就是这个调用的脚本,如下:

from TestOMP import Test

Test()

这个就很容易了,import并且调用。在控制台下,输入“python TestOMP.py”,运行。


7. 结果

507569
507570
507571
507572
507573
507574
507575
507576
507577
507578
507579
9185
9186
9187
9188
9189
9190
9191
9192
9193
9194
9195
9196
9197
9198
9199
9200
9201
9202
9203
9204
9205
9206
9207
9208
9209
9210
9211
9212
9213
9214
9215
9216

上面是在控制台上的输出的一个片段。能够看到,的确是prange把1000000这一个大循环分成了两个区间:[0, 500000) 和 (500001,1000000],两个循环并行运行,并交替使用控制台IO进行输出。


8. 对应的c++程序

同时写了一个对等的c++程序,如下:

#include 
  
   

using namespace std;

void PlayOMP (void)
{
#pragma omp parallel for num_threads(2)
	for (int i=0; i<1000000; i++)
		cout <
   
同时,在Configuration Properties->C/C++->Language->OpenMP Support,在下拉菜单里选择Yes。并且从C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.OPENMP 和 C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\Debug_NonRedist\x86\Microsoft.VC90.DebugOpenMP目录下分别拷贝vcomp90d.dll和vcomp90.dll文件到工程文件当前目录下,或者将上述两个路径设置到环境变量里面。

编译、运行,结果和python上面的一样――不过貌似更快!


完。

转载请注明出处:http://blog.csdn.net/xceman1997/article/details/26977483