我想知道如果我有(N)雙矢量,每個具有大的長度說10,000和我想要(由3對每個向量乘法)到線程的操作線程的成本,其通過使(N)線程。Java初學者:通過串行
我想知道如果有超過一個的操作串行一個利用並行(N)線程的成本是多少?成本(內存,速度等)?
或使用線程實際上是更好的主意,因爲我讀它會使用可用的內核?
我想知道如果我有(N)雙矢量,每個具有大的長度說10,000和我想要(由3對每個向量乘法)到線程的操作線程的成本,其通過使(N)線程。Java初學者:通過串行
我想知道如果有超過一個的操作串行一個利用並行(N)線程的成本是多少?成本(內存,速度等)?
或使用線程實際上是更好的主意,因爲我讀它會使用可用的內核?
是:每個線程會佔用資源:至少記憶,但也可能OS進程或其他OS resouces。細節將取決於JVM的實現。
如果內存使用率變高,你也可能會採取的性能損失,由於更頻繁的GC,尋呼和電腦做來管理他們的記憶什麼都
當執行內存密集型操作,緩存的大小更可能比你的主內存大小重要。由於共享較低的緩存,因此在使用多個內核時,對這一個緩存的密集使用可能不會提供很大的可擴展性。不過,如果你減少每個內核使用的數據量或者你的操作是不平凡的,你可以接近線性的可擴展性得到
你不想爲每個向量創建新的線程(創建一個新線程的開銷重大)。但是,在thread pool中執行此項工作可能會利用多個內核。
聽起來好像:
如果上述屬實,那麼它可能是有意義的使用ThreadPoolExecutor這將使你的每個向量發送到處理線程池。
相關:什麼是一個線程的粗糙的「成本」(http://stackoverflow.com/questions/1492711/java-what-is-the-rough-cost-of-a-thread-cpu -cycles存儲器) – justkt
說明明顯,我想,但因爲我不能看到它elsewere提到的:它沒有任何意義創建多個線程比你有內核,但除此之外,它取決於開銷創建一個線程與操作的整體運行時間相比較。你需要測試它來找出這些因素相交的地方。 –
如果你想要大規模並行向量操作,你可以看看CUDA,但這對於Java來說會很棘手,而且非常不便攜。 –