numpy에서 두 개의 큰 행렬의 모든 요소를 만들고 곱한 다음 합계합니다. 나는 두 가지 방법, 루프 및 multiprocessing
모듈 (아래의 스 니펫 참조)을 사용하여이 작업을 몇 백 번 수행합니다.python-multiprocessing/multithreading에서 누락 된 점은 무엇입니까?
def worker_loop(n):
for i in n:
mul = np.sum(np.random.normal(size=[i,i])*np.random.normal(size=[i,i]))
def worker(i):
mul = np.sum(np.random.normal(size=[i,i])*np.random.normal(size=[i,i]))
n = range(100,300)
pool = ThreadPool(2)
pool.map(worker, n)
pool.close()
pool.join()
worker_loop(n)
시간을 측정하면 루프이 multiprocessing
보다 빠르다는 것을 알 수 있습니다. 나는 또한 성공하지 못한 threading
모듈을 시험해 보았습니다. (그 다음은 나쁜 아이디어라고 읽었습니다.) 더 읽기 here
이미지, 라벨, 테두리 상자를 변환해야하기 때문에 멀티 스레딩으로 실험을 시작했습니다 ... tfrecords에. 그 때문에 나는 tensorflow/inception 파일을 공부하고있다. (원한다면 build_imagenet_data.py, line 453). 여기서 멀티 스레딩이 작동하는 이유는 그것이 멀티 스레딩을 사용하는 이유입니다. 다음과 같이이 말하는
, 내 질문에 내가 내 코드에서 누락하고있는 무슨
- , 넣어 수 있습니다; 작은 수정으로 무언가를 성취 할 수 있습니까?
- tensorflow가 C++ 및 CUDA로 작성 되었기 때문에 예제가 시작되었습니다.
- numpy, tensorflow 등과 같은 다중 처리 또는 다중 스레딩을 사용하는 것이 바람직한 경우는 언제입니까?
그리고 두 번째 질문에 대답하기 위해 무거운 I/O 바인딩 작업을 수행하지 않는 한 numpy 또는 tensorflow로 다중 처리 또는 다중 스레딩을 사용하는 것은 좋지 않습니다. Tensorflow는 실제로 대기열 주자를 통해 이러한 우연성을 지원합니다. 실제 계산의 경우, tensorflow와 numpy는 이미 모든 코어에 부하를 분산시킬 수 있습니다. –
내가 아는 한 tensorflow는 Eigen을 사용하는데, 기본적으로 자체 (고도로 최적화 된) 저수준 루틴을 사용합니다. 물론, 이것은 sascha의 대답의 요지를 바꾸지 않습니다. – dseuss
@dseuss 흥미 롭습니다. 비록 모든 BLAS-libs에 대한 지원이 있지만 새로운 벤치 마크에서는 Eigen의 공식 FAQ (구식 벤치 마크 및 다소 단일 코어로 제한됨)에도 불구하고 이들이 더 빠르다는 것을 보여줄 것 같습니다. – sascha