我的功能设计如下:
int brutesearch(startNumber,endNumber);
如果通过执行线性搜索匹配我的条件,则此函数返回正确的数字;如果在搜索的数字中找不到,则返回null。
说:
我的问题如下:
优化此搜索的最佳选择是什么?将数字空间划分为4个段并在每个核心上运行4个函数实例一个?或者例如分成10个段并将它们全部一起运行,或者分成12个段并使用队列以4个批次运行它们?
有什么想法吗?
答案 0 :(得分:0)
对您的搜索条件一无所知(可能还有内存子系统创建的其他注意事项),这里的权衡取决于让某些处理器比其他处理器做更多工作的成本(例如,因为搜索谓词在某些值上更快)比其他人,或因为其他线程被安排)和协调工作的成本。对我来说运行良好的策略是拥有一个工作队列,每次线程从中获取剩余任务的常量/ #thread部分,但只有四个处理器,很难出错,尽管运行时间非常长胜利在于算法。
答案 1 :(得分:0)
没有一般答案。您需要提供更多信息。
如果您的每个比较完全独立于其他比较,并且没有机会在全局资源中保存计算,则说没有涉及全局哈希表,并且您的操作都在一个阶段完成,
那么最好的办法是将问题空间划分为可用的核心数,在这种情况下为4,并将1/4的数据发送到每个核心。
例如,如果你有1000万个唯一数字,你想测试素数。或者如果你有1000万个密码,你试图哈希找到一个匹配,那么只需要除以4。
如果您遇到现实问题,那么您需要了解更多有关基础操作的信息才能获得良好的解决方案。例如,如果涉及全局资源,那么除非以某种方式隔离全局资源上的操作,否则不会从并行性中获得任何改进。