Я пытаюсь решить несколько линейных систем, используя python и scipy, используя потоки.Я абсолютный новичок в том, что касается потоков Python.Я приложил код, который очищает то, что я пытаюсь достичь.Этот код работает, но время выполнения фактически увеличивается при увеличении totalThreads.Я предполагаю, что spsolve рассматривается как критический раздел и фактически не запускается одновременно.
У меня следующие вопросы:
- Является ли spsolve поточно-ориентированным?
- Если spsolve блокирует, есть ли способ обойти это?
- Есть ли другой пакет линейных решателей, который я могу использовать, который лучше распараллеливает?
- Есть ли лучший способ написать этот сегмент кода, который увеличит производительность?
Я искал ответы в Интернете, но безуспешно.Возможно, я просто использую неправильные ключевые слова.Спасибо всем за помощь.
def Worker(threadnum, totalThreads):
for i in range(threadnum,N,totalThreads):
x[:,i] = sparse.linalg.spsolve( A, b[:,i] )
threads = []
for threadnum in range(totalThreads):
t = threading.Thread(target=Worker, args=(threadnum, totalThreads))
threads.append(t)
t.start()
for threadnum in range(totalThreads): threads[threadnum].join()