2011-02-25 3 views
1

나는 두 배의 벡터를 가지고 있는데, 각각 길이가 길면 10,000이라고 말하면서 (N)을 만드는 것에 의해 연산 (각 벡터에 3을 곱하기)을하고 싶었다. 스레드.자바 초보자 : 시리얼 넘기의 비용

직렬 (Serial) 하나 이상의 작업에 병렬 (N) 스레드를 사용하는 데 비용이 들었습니까? 비용 (메모리, 속도 등)?

또는 사용 가능한 코어를 사용하기 때문에 실제로 쓰레드를 사용하는 것이 더 좋습니다.

+0

관련 항목 : [스레드의 대략 "비용"은 무엇입니까?] (http://stackoverflow.com/questions/1492711/java-what-is-the-rough-cost-of-a-thread-cpu -cycles-memory) – justkt

+0

분명히 말하지만 추측 할 수 있듯이, 내가 elsewere에 대해 언급 한 것을 볼 수 없기 때문에 : 코어를 가지고있는 것보다 많은 스레드를 만드는 것이 의미가 없지만, 그 이외에는 오버 헤드에 달려있다. 작업의 전체 런타임과 비교하여 스레드를 생성합니다. 이러한 요인들이 교차하는 곳을 찾으려면 테스트해야합니다. –

+0

대용량 병렬 벡터 연산을 원한다면 CUDA를 들여다 볼 수도 있지만, Java에서하기에는 까다 롭고 휴대하기가 어렵습니다. –

답변

2

예 : 각 스레드는 리소스를 사용합니다. 적어도 메모리는 가능하지만 OS 프로세스 또는 다른 OS 리소스도 가능합니다. 세부 사항은 JVM 구현에 따라 달라집니다. 메모리 사용량이 높게 될 경우

당신은 또한 인해 더 자주 GC, 페이징 및 이제까지 어떤 컴퓨터가 메모리를 관리 할

0

메모리를 많이 사용하는 작업을 수행, 캐시의 크기가에 성능 저하가 걸릴 수 있습니다 주 메모리의 크기보다 중요 할 가능성이 높습니다. 하위 캐시가 공유되므로이 하나의 캐시를 집중적으로 사용하면 다중 코어를 사용할 때 많은 확장 성을 제공하지 못할 수도 있습니다. 그러나 각 코어가 사용하는 데이터의 양을 최소화하거나 연산이 중요하지 않은 경우 거의 선형 확장 성을 얻을 수 있습니다.

0

각 벡터에 대해 새 스레드를 생성하고 싶지는 않습니다. 새 스레드를 만드는 오버 헤드는 중요한). 그러나 복수 코어를 개발하려면 thread pool에서이 작업을 수행하는 것이 좋습니다. 경우로

소리가 난다 : 계산은 당신이 힘을 모으고 여러 스레드에서 도움이 될만큼 큰

  • 각각의 벡터들이 작품의 덩어리로 사용될 수 있음을 충분히 큰

위의 내용에 해당하는 경우 ThreadPoolExecutor을 사용하면 처리를 위해 각 벡터를 스레드 풀로 보낼 수 있습니다.