- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我使用 cern.colt.ParallelQuickSort 库中的多线程快速排序 Java 函数( http://incanter.org/docs/parallelcolt/api/cern/colt/ParallelQuickSort.html 和 https://github.com/Danimoth/Parallel-Colt/blob/master/src/cern/colt/ParallelQuickSort.java )。我想测试选择不同数量的线程时花费了多少时间。我使用 System.nanoTime() 来跟踪运行时间。然而,即使我选择的线程数和未排序的数组对于多次运行相同,运行时间也有很大不同。我认为这是因为 cern.colt.ParallelQuickSort 库中提供的 fastsort() 无需等待线程完成。我想知道如何编写代码来等待所有线程完成,以便我可以测量库提供的函数之外的运行时间?如下所示:?
ParallelQuickSort qs=new ParallelQuickSort();
long startTime = System.nanoTime();
qs.quickSort(unsorted_array, 0, array_size, comp, number_threads);
//java code to wait for all threads to complete
long time_elapse= System.nanoTime() - startTime;
编辑:下面是我的代码:最初,我的代码是使用线程数从 1 到 15 运行快速排序,数组大小为 2^10、2^15、2^20、2^25 和 2^28,每种情况我运行 30 次。为了调试,我将代码更改为仅使用 1 个线程运行 array size=2^10 并运行 10 次。
import cern.colt.ParallelQuickSort;
import cern.colt.function.tint.IntComparator;
import cern.colt.Timer;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.System.*;
import java.util.*;
public class quick_sort {
static void readData(int dst[], int nitems, int num) throws IOException{
String s="mydata"+Integer.toString(num)+".txt";
//System.out.println(s);
Scanner scanner = new Scanner(new File(s));
int i = 0;
while(scanner.hasNextInt())
{
dst[i++] = scanner.nextInt();
}
}
public static void main(String [ ] args) throws IOException
{
//for(int i=0; i<n;i++) dst[i]=n-i;
/*
System.out.println("Unsorted: ");
for(int i=0; i<n; i++) System.out.print(dst[i]+" ");
System.out.println(" ");
*/
IntComparator comp=new IntComparator(){
public int compare(int a, int b){
if(a>b) return 1;
else if(a<b) return -1;
else return 0;
}
};
int iter=10;
int thread_num=1;
//FileWriter fw = new FileWriter("out.txt");
int num[]={10, 15, 20, 25, 28};
for(int m=0; m<1; m++){
for(int k=1; k<=thread_num; k++){
long estimatedTime=0;
for(int i=0; i<iter; i++){
int n=1<<num[m];
int dst[]=new int[n];
readData(dst, n, num[m]);
ParallelQuickSort qs=new ParallelQuickSort();
long startTime = System.nanoTime();
qs.quickSort(dst, 0, n, comp, k);
long temp= System.nanoTime() - startTime;
estimatedTime+=temp;
System.out.println("Time="+temp*0.000001);
}
System.out.println(num[m]+"Wall Clock Time when thread number="+k+": "+estimatedTime/iter*0.000001);
//fw.write(num[m]+"Wall Clock Time when thread number="+k+": "+estimatedTime/iter*0.000001+'\n');
}
//System.out.println("Sorted: ");
//for(int i=0; i<n; i++) System.out.print(dst[i]+" ");
//System.out.println(" ");
}
//fw.close();
System.out.println("Finish!");
}
}
结果如下所示:
Time=0.755289
Time=0.632124
Time=0.502016
Time=0.502922
Time=0.100524
Time=0.076072
Time=0.073657
Time=0.073355
Time=0.074261
Time=0.076374
10Wall Clock Time when thread number=1: 0.286659
Finish!
最佳答案
函数ParallelQuickSort.quicksort
仅在所有线程/子操作完成后才返回。您无需手动等待所有线程完成。
这可以通过查看代码(查找 other.get()
)来确认,并且这是唯一合理的行为。
编辑:测试性能可能非常困难,请参阅 Java Performance Testing以及许多其他地方的详细信息。
关于java - 在Java中等待所有线程完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28552124/
从 Redis 获取消息时,onDone:(){print('done')} 从未起作用。 import 'package:dartis/dartis.dart' as redis show PubS
昨天我玩了一些vim脚本,并设法通过循环来对当前输入的内容进行状态栏预测(请参见屏幕截图(灰色+黄色栏))。 问题是,我不记得我是怎么得到的,也找不到我用于该vim魔术的代码片段(我记得它很简单):它
我尝试加载 bash_completion在我的 bash (3.2.25) 中,它不起作用。没有消息等。我在我的 .bashrc 中使用了以下内容 if [ -f ~/.bash_completio
我正在尝试构建一个 bash 完成例程,它将建议命令行标志和合适的标志值。例如在下面 fstcompose 命令我想比赛套路先建议 compose_filter= 标志,然后建议来自 [alt_seq
当我尝试在重定向符号后完成路径时,bash 完成的行为就好像它仍在尝试在重定向之前完成命令的参数一样。 例如: dpkg -l > /med标签 通过在 /med 之后点击 Tab我希望它完成通往 /
我的类中有几个 CAKeyframeAnimation 对象。 他们都以 self 为代表。 在我的animationDidStop函数中,我如何知道调用来自哪里? 是否有任何变量可以传递给 CAKe
我有一个带有 NSDateFormatter 的 NSTextField。格式化程序接受“mm/dd/yy”。 可以自动补全日期吗?因此,用户可以输入“mm”,格式化程序将完成当前月份和年份。 最佳答
有一个解决方案可以使用以下方法完成 NSTextField : - (NSArray *)control:(NSControl *)control textView:(NSTextView *)tex
我正在阅读 Passport 的文档,我注意到 serialize()和 deserialize() done()被调用而不被返回。 但是,当使用 passport.use() 设置新策略时在回调函数
在 ubuntu 11.10 上的 Firefox 8.0 中,尽管 img.complete 为 false,但仍会调用 onload 函数 draw。我设法用 setTimeout hack 解决
假设我有两个与两个并行执行的计算相对应的 future 。我如何等到第一个 future 准备好?理想情况下,我正在寻找类似于Python asyncio's wait且参数为return_when=
我正在寻找一种 Java 7 数据结构,其行为类似于 java.util.Queue,并且还具有“最终项目已被删除”的概念。 例如,应可以表达如下概念: while(!endingQueue.isFi
这是一个简单的问题。 if ($('.dataTablePageList')) { 我想做的是执行一个 if 语句,该语句表示如果具有 dataTablesPageList 类的对象也具有 menu
我用replaceWith批量替换了许多div中的html。替换后,我使用 jTruncate 来截断文本。然而它不起作用,因为在执行时,replaceWith 还没有完成。 我尝试了回调技巧 ( H
有没有办法调用 javascript 表单 submit() 函数或 JQuery $.submit() 函数并确保它完成提交过程?具体来说,在一个表单中,我试图在一个 IFrame 中提交一个表单。
我有以下方法: function animatePortfolio(fadeElement) { fadeElement.children('article').each(function(i
我刚刚开始使用 AndEngine, 我正在像这样移动 Sprite : if(pValueY < 0 && !jumping) { jumping =
我正在使用 asynctask 来执行冗长的操作,例如数据库读取。我想开始一个新 Activity 并在所有异步任务完成后呈现其内容。实现这一目标的最佳方法是什么? 我知道 onPostExecute
我有一个脚本需要命令名称和该命令的参数作为参数。 所以我想编写一个完成函数来完成命令的名称并完成该命令的参数。 所以我可以这样完成命令的名称 if [[ "$COMP_CWORD" == 1 ]];
我的应用程序有一个相当奇怪的行为。我在 BOOT_COMPLETE 之后启动我的应用程序,因此在我启动设备后它是可见的。 GUI 响应迅速,一切正常,直到我调用 finish(),按下按钮时,什么都没
我是一名优秀的程序员,十分优秀!