использование OpenMP в Python 2.7 - PullRequest
0 голосов
/ 27 мая 2019

Я делаю свою задачу по использованию OpenMP (увеличение скорости программы и сравнение результатов).Я использую scipy.weave, чтобы сделать это.Я вычитаю из матрицы вектор, умноженный на число.Я использую Python 2.7 (потому что существует только для этой версии weave)

import weave
import numpy
from numpy import *
from random import *
from time import time

codeOpenMP = \
    """
    int i = 0;

    omp_set_num_threads(2);
    #pragma omp parallel shared(matrix, randRow, c) private(i)
    {
        #pragma omp for 
        for(i = 0; i < N*M; i++) {
            matrix[0,i] = matrix[0,i] - (c * randRow[i%M]);
        }
     }
    """


 # generate matrix
def randMat(x, y):
    randRaw = lambda a: [randint(0, 100) for i in xrange(0, a)]
    randConst = lambda x, y: [randRaw(x) for e in xrange(0, y)]

    return array(randConst(x, y))


def test():
    sizeMat = [100, 1000, 2000, 3000]
    results = []

    for n in sizeMat:
        sourceMat = randMat(n, n)
        N, M = sourceMat.shape
        randRow = sourceMat[randint(0, N)]
        c = randint(0, n)

        print "\nTest on size: %dx%d" % (n, n)

        """ python test """
        matrix = array(sourceMat)
        t1 = time()
        for i in xrange(N):
             matrix[i, :] -= c * randRow
        timePython = (time() - t1) * MACRO
        print "\tPure python: ", timePython
        results.append(matrix)



        """ C & OpenMP test """
        matrix = array(sourceMat)
        t1 = time()
        weave.inline(codeOpenMP, ['matrix', 'c', 'randRow', 'N', 'M'],
                     extra_compile_args=['-O3 fopenmp'],
                     compiler='gcc', libraries=['gomp'],
                     headers=['<omp.h>'])
        timeOpenMP = (time() - t1) * MACRO
        print "\tC plus OpenMP: %s" % (timeOpenMP)
        results.append(matrix)

        if array_equal(results[0], results[1]) and \
                array_equal(results[1], results[2]):
            print "\tTest - ok"
        else:
            print "\tTest - false"


 test()

Но у меня ОШИБКА (изображение по ссылке):

ОШИБКА

Чт.с кодировкой, но я не понимаю, что именно?Я пытался сделать что-л.вот так (добавьте код):

import sys
reload(sys)
sys.setdefaultencoding('utf-8')

Но это мне не поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...