不详细介绍我的算法,只给出一些实验结果。对于某些给定的输入,我的Java顺序算法在我的笔记本电脑上工作4秒(Intel Core i5 430M - 2核,4线程,2.27 GHz,4Mb缓存,3Gb内存)。该算法的并行版本使用1个线程工作6秒,使用2个线程工作5秒,使用3个线程工作4秒。如果我通过ssh在amazon ec2上运行它,顺序时间为6秒,并行时间为6到7之间,无论有多少线程。
为什么你觉得它慢?因为亚马逊使用的虚拟机和代码运行速度较慢?你有什么经历?
我有一个应用程序,我想在具有大量内存和计算能力的环境中进行测试。目前在亚马逊上没有成功。
我使用普通Java对象和hppc
外部库(高性能原始计算库)。没有数据库和花哨的东西。
实例类型是c1,也许是这个(如果它正确我会尽快通知你,我知道它是c1,但不知道它是中等还是大):
High-CPU Extra Large Instance
7 GiB of memory
20 EC2 Compute Units (8 virtual cores with 2.5 EC2 Compute Units each)
1690 GB of instance storage
64-bit platform
I/O Performance: High
EBS-Optimized Available: 1000 Mbps
API name: c1.xlarge
答案 0 :(得分:2)
根据我的经验,虚拟机具有非常昂贵的mutltithread任务切换惩罚,如果出现以下情况,可能会导致严重的性能损失:
虚拟机“核心”实际上作为线程映射到物理机的主操作系统上。如果主操作系统的线程量为30毫秒且VM的线程量为30毫秒,则可能发生的情况是:
如果你的另一个线程期望响应速度比30ms快一点,那么你就有了自己的瓶颈。更糟糕的是,基于Linux的服务器上非空闲线程调度的默认量程实际上是~100ms。
Amazon EC2系统不仅仅是虚拟机,它们是共享单个物理机的虚拟机。为了获得每台服务器机架最大的优势,亚马逊必须在某种程度上过度订阅系统。例如:
这样做是因为许多应用程序不使用满载的8核。但是,如果你与使用完整8核的东西配对,那么......真可惜!我不确定实际的配对比例是多少,而且我想亚马逊不断调整它。