-
Notifications
You must be signed in to change notification settings - Fork 11
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Migrate code to numpy #29
Comments
Что есть: В нескольких местах в программе встречаются величины, которые удобно задавать векторами в трехмерном пространстве. Это импульсы и координаты частиц, а также компоненты полей в узлах PIC-сетки или внешних полей. С этими величинами делается довольно много арифметики (см. класс ParticleToMeshMap и . Что имеет смысл сделать: Заменить массивы Vec3d на numpy-массивы. Возможный вариант - использовать dtype из numpy. Т.е. заменить from math import sqrt
class Vec3d():
def __init__(self, x, y, z):
self.x = x
self.y = y
self.z = z
@classmethod
def zero(cls):
return cls(0.0, 0.0, 0.0)
def length(self):
return sqrt(self.x ** 2 + self.y ** 2 + self.z ** 2)
def negate(self):
return Vec3d(-self.x, -self.y, -self.z)
..... на что-то типа from math import sqrt
vec3d_dtype = numpy.dtype( [ ('x', float), ('y', float), ('z', float) ] ) # или как-то так
def new(x, y, z):
return np.array( [x, y, z], dtype=vec3d_dtype ) # или как-то так
def zero():
return np.zero(dtype=vec3d_dtype) # или как-то так
def length(vec):
return np.linalg.norm(vec)
..... Поэлементные операции уже определены в numpy и соответствующие операторы тоже уже перегружены, поэтому ими заниматься не придется. Но надо будет оставить функции для векторного и скалярного произведения и некоторые другие. |
Что касается класса Particle, для него также можно определить отдельный dtype. Numpy вроде позволяет довольно гибко индексировать массивы, поэтому останется возможность работать с компонентами как с векторами, что-то типа: Также нужно будет заменить классе |
Создал класс ParticleArray, которй хранит все поля частиц как однотипные массивы. Должно заметно ускорить симуляцию в питоне. Надо бы добавить тесты производительности... С dtype как бы не возникло проблем с передачей данных на графический ускоритель. |
Migration to
numpy
from lists and Vec3d classes should accelerate the code.Besides, pyCUDA and pyOpenCL libraries can transfer numpy arrays to GPU semiautomatically.
The text was updated successfully, but these errors were encountered: