Gibt es eine Möglichkeit, den folgenden Code parallelisiert werden? Ich schaute in Cytons Prange, konnte aber nicht herausfinden, wie es funktioniert. Vereinheitlicht der Prange die internen Schleifen auf verschiedenen Kernen? Für den Code unten, wie kann ich es parallelisieren?Parallelisierung mit Cython
@cython.boundscheck(False)
def gs_iterate_once(double[:,:] doc_topic,
double[:,:] topic_word,
double[:] topic_distribution,
double[:] topic_probabilities,
unsigned int[:,:] doc_word_topic,
int num_topics):
cdef unsigned int doc_id
cdef unsigned int word_id
cdef unsigned int topic_id
cdef unsigned int new_topic
for i in xrange(doc_word_topic.shape[0]):
doc_id = doc_word_topic[i, 0]
word_id = doc_word_topic[i, 1]
topic_id = doc_word_topic[i, 2]
doc_topic[doc_id, topic_id] -= 1
topic_word[topic_id, word_id] -= 1
topic_distribution[topic_id] -= 1
for j in xrange(num_topics):
topic_probabilities[j] = (doc_topic[doc_id, j] * topic_word[j, word_id])/topic_distribution[j]
new_topic = draw_topic(np.asarray(topic_probabilities))
doc_topic[doc_id, new_topic] += 1
topic_word[new_topic, word_id] += 1
topic_distribution[new_topic] += 1
# Set the new topic
doc_word_topic[i, 2] = new_topic
Re Punkt 1 - Kann ich einen Zusatz vorschlagen: Python-Aufrufe sind erlaubt, wenn Sie sie in einen 'mit gil:' Block setzen. Vorausgesetzt, dass dies ein kleiner Teil der Schleife ist, sind die Leistungskosten nicht so schlecht. – DavidW