155 lines
5.1 KiB
Python
155 lines
5.1 KiB
Python
"""
|
|
并行计算性能测试
|
|
测试并行计算对群体智能模拟性能的影响
|
|
"""
|
|
|
|
import time
|
|
from panda3d.core import Vec3
|
|
|
|
def performance_comparison_test(swarm_manager, member_counts=[100, 200, 500]):
|
|
"""
|
|
性能对比测试
|
|
比较串行和并行计算的性能差异
|
|
"""
|
|
print("=== 并行计算性能对比测试 ===")
|
|
|
|
# 保存原始设置
|
|
original_count = swarm_manager.config.get("member_count", 20)
|
|
original_parallel = swarm_manager.config.get("parallel_computation", True)
|
|
|
|
for count in member_counts:
|
|
print(f"\n测试群体规模: {count} 个成员")
|
|
|
|
# 设置群体数量
|
|
swarm_manager.config.set("member_count", count)
|
|
swarm_manager.reset()
|
|
|
|
# 测试串行计算性能
|
|
print(" 测试串行计算...")
|
|
swarm_manager.config.set("parallel_computation", False)
|
|
serial_time = run_performance_test(swarm_manager, 3.0)
|
|
serial_fps = 3.0 / serial_time if serial_time > 0 else 0
|
|
print(f" 串行计算FPS: {serial_fps:.2f}")
|
|
|
|
# 测试并行计算性能
|
|
print(" 测试并行计算...")
|
|
swarm_manager.config.set("parallel_computation", True)
|
|
parallel_time = run_performance_test(swarm_manager, 3.0)
|
|
parallel_fps = 3.0 / parallel_time if parallel_time > 0 else 0
|
|
print(f" 并行计算FPS: {parallel_fps:.2f}")
|
|
|
|
# 计算性能提升
|
|
if serial_fps > 0:
|
|
speedup = parallel_fps / serial_fps
|
|
print(f" 性能提升: {speedup:.2f}x")
|
|
|
|
# 恢复原始设置
|
|
swarm_manager.config.set("member_count", original_count)
|
|
swarm_manager.config.set("parallel_computation", original_parallel)
|
|
swarm_manager.reset()
|
|
|
|
print("\n性能对比测试完成")
|
|
|
|
def run_performance_test(swarm_manager, duration):
|
|
"""
|
|
运行性能测试
|
|
"""
|
|
start_time = time.time()
|
|
frame_count = 0
|
|
|
|
while time.time() - start_time < duration:
|
|
swarm_manager._update_swarm()
|
|
frame_count += 1
|
|
|
|
return time.time() - start_time
|
|
|
|
def scalability_test(swarm_manager):
|
|
"""
|
|
可扩展性测试
|
|
测试不同CPU核心数对并行计算性能的影响
|
|
"""
|
|
print("\n=== 可扩展性测试 ===")
|
|
|
|
# 设置大规模群体
|
|
original_count = swarm_manager.config.get("member_count", 20)
|
|
swarm_manager.config.set("member_count", 1000)
|
|
swarm_manager.reset()
|
|
|
|
# 测试不同并行度
|
|
parallel_settings = [1, 2, 4, 8]
|
|
|
|
for num_threads in parallel_settings:
|
|
print(f"\n测试并行度: {num_threads} 线程")
|
|
|
|
# 这里我们模拟不同的并行度设置
|
|
# 实际应用中可能需要调整线程池大小
|
|
test_time = run_performance_test(swarm_manager, 2.0)
|
|
test_fps = 2.0 / test_time if test_time > 0 else 0
|
|
print(f" FPS: {test_fps:.2f}")
|
|
|
|
# 恢复原始设置
|
|
swarm_manager.config.set("member_count", original_count)
|
|
swarm_manager.reset()
|
|
|
|
print("\n可扩展性测试完成")
|
|
|
|
def memory_usage_test(swarm_manager):
|
|
"""
|
|
内存使用测试
|
|
测试并行计算对内存使用的影响
|
|
"""
|
|
print("\n=== 内存使用测试 ===")
|
|
|
|
# 设置中等规模群体
|
|
original_count = swarm_manager.config.get("member_count", 20)
|
|
swarm_manager.config.set("member_count", 500)
|
|
swarm_manager.reset()
|
|
|
|
# 获取初始内存使用
|
|
import psutil
|
|
import os
|
|
process = psutil.Process(os.getpid())
|
|
initial_memory = process.memory_info().rss / 1024 / 1024 # MB
|
|
|
|
print(f"初始内存使用: {initial_memory:.2f} MB")
|
|
|
|
# 测试串行计算内存使用
|
|
swarm_manager.config.set("parallel_computation", False)
|
|
run_performance_test(swarm_manager, 1.0)
|
|
serial_memory = process.memory_info().rss / 1024 / 1024 # MB
|
|
print(f"串行计算内存使用: {serial_memory:.2f} MB")
|
|
|
|
# 测试并行计算内存使用
|
|
swarm_manager.config.set("parallel_computation", True)
|
|
run_performance_test(swarm_manager, 1.0)
|
|
parallel_memory = process.memory_info().rss / 1024 / 1024 # MB
|
|
print(f"并行计算内存使用: {parallel_memory:.2f} MB")
|
|
|
|
# 计算内存开销
|
|
serial_overhead = serial_memory - initial_memory
|
|
parallel_overhead = parallel_memory - initial_memory
|
|
print(f"串行计算内存开销: {serial_overhead:.2f} MB")
|
|
print(f"并行计算内存开销: {parallel_overhead:.2f} MB")
|
|
|
|
# 恢复原始设置
|
|
swarm_manager.config.set("member_count", original_count)
|
|
swarm_manager.reset()
|
|
|
|
print("\n内存使用测试完成")
|
|
|
|
def run_all_parallel_tests(swarm_manager):
|
|
"""
|
|
运行所有并行计算测试
|
|
"""
|
|
print("开始运行所有并行计算测试...")
|
|
|
|
# 性能对比测试
|
|
performance_comparison_test(swarm_manager)
|
|
|
|
# 可扩展性测试
|
|
scalability_test(swarm_manager)
|
|
|
|
# 内存使用测试
|
|
memory_usage_test(swarm_manager)
|
|
|
|
print("\n所有并行计算测试完成!") |