谷歌正在赞助一个开源项目,将Python的速度提高5倍.
为什么并发这么难?
LLVM是否会解决并发问题?
硬件推进的多核之外是否有其他解决方案?
我正在研究F#中的多核并行性.我必须承认,不可变性确实有助于编写正确的并行实现.但是,当核心数量增长时,很难实现良好的加速和良好的可扩展性.例如,我使用快速排序算法的经验是,许多尝试以纯粹功能的方式实现并行快速排序并使用List或Array作为表示失败.对这些实现进行分析表明,与顺序版本相比,缓存未命中数量显着增加.但是,如果使用阵列内部的突变实现并行快速排序,则可以获得良好的加速.因此,我认为突变可能是优化多核并行性的一种很好的实践.
我认为缓存局部性是功能语言中多核并行的一大障碍.函数式编程涉及创建许多短期对象; 破坏这些对象可能会破坏CPU缓存的一致性.我已经看到很多建议如何改进命令式语言中的缓存局部性,例如,这里和这里.但是我不清楚如何在函数式编程中完成它们,特别是对于经常出现的递归数据结构(如树等).
是否有任何技术可以改进不纯函数语言(特别是F#)中的缓存局部性?任何建议或代码示例都非常受欢迎.
parallel-processing f# asynchronous functional-programming multicore
我有几个小问题.
首先,多线程和多核之间有区别吗?它们是两个完全不同的东西,还是多线程在需要时使用多个核心?
其次大多数内核都有两个线程,但在分析我的应用程序时,我注意到许多不同的线程,从线程128到线程3460.什么决定了你的计算机有多少线程?
谢谢
我正在阅读新的英特尔凌动330的评论,他们注意到任务管理器显示4个核心 - 两个物理核心,另外两个由超线程模拟.
假设你有一个包含两个线程的程序.假设这些是在PC上进行任何工作的唯一线程,其他一切都是空闲的.操作系统将两个线程放在同一个核心上的概率是多少?这对程序吞吐量有很大影响.
如果答案不是0%,那么除了创建更多线程之外,是否还有其他缓解策略?
我希望Windows,Linux和Mac OS X会有不同的答案.
我一直在阅读Python的多处理模块.我仍然认为我对它能做什么没有很好的理解.
假设我有一个四核处理器,我有一个包含1,000,000个整数的列表,我想要所有整数的总和.我可以这样做:
list_sum = sum(my_list)
Run Code Online (Sandbox Code Playgroud)
但这只会将其发送到一个核心.
是否有可能使用多处理模块将数组分开并让每个核心得到它的部分之和并返回值,以便计算总和?
就像是:
core1_sum = sum(my_list[0:500000]) #goes to core 1
core2_sum = sum(my_list[500001:1000000]) #goes to core 2
all_core_sum = core1_sum + core2_sum #core 3 does final computation
Run Code Online (Sandbox Code Playgroud)
任何帮助,将不胜感激.
所以,我正在玩Stackless Python并且脑子里出现了一个问题,也许这是"假设的"或"常见的"知识,但我发现它实际上写在无堆栈网站上的任何地方.
Stackless Python是否利用多核CPU?在普通的Python中,你有GIL不断出现并且(使用多个核心)需要使用多个进程,这对Stackless来说也是如此吗?
python concurrency multithreading multicore python-stackless
我正在制作一个用Python运行模拟的程序,带有一个wxPython接口.在程序中,您可以创建模拟,程序为您渲染(=计算)它.有时渲染可能非常耗时.
当用户启动模拟并定义初始状态时,我希望程序在后台连续渲染模拟,而用户可能在程序中执行不同的操作.有点类似于填充的YouTube风格的条形图:您可以仅在渲染点进行模拟.
我应该使用多个进程还是多个线程或者什么?人们告诉我使用这个multiprocessing软件包,我检查了它看起来不错,但我也听说过程序,不像线程,不能分享很多信息(我想我的程序需要分享很多信息.另外我还听说过Stackless Python:它是一个单独的选项吗?我不知道.
请指教.
python multithreading multicore multiprocessing python-stackless
我有一个包含40多个项目的大解决方案.其中几乎一半是测试项目.在我的项目中,我们使用代码合同,代码分析,样式分析.我希望能够在我的四核CPU上构建不依赖的项目.
如何设置msbuild来并行构建项目?
我需要了解多核机器中的内存屏障.说我有这个代码
mov [_x], 1; mov r1, [_y]
Run Code Online (Sandbox Code Playgroud)
mov [_y], 1; mov r2, [_x]
Run Code Online (Sandbox Code Playgroud)
现在没有内存栅栏的意外结果是r1和r2在执行后都可以为0.在我看来,为了解决这个问题,我们应该在两个代码中都放置内存栅栏,因为将它放到一个代码中仍然无法解决问题.如下......
mov [_x], 1; memory_fence; mov r1, [_y]
Run Code Online (Sandbox Code Playgroud)
mov [_y], 1; memory_fence; mov r2, [_x]
Run Code Online (Sandbox Code Playgroud)
我的理解是正确的还是我仍然缺少某些东西?假设架构是x86.另外,有人可以告诉我如何在C++代码中放置内存栅栏吗?
multicore ×10
python ×4
assembly ×1
asynchronous ×1
c ×1
c++ ×1
concurrency ×1
distributed ×1
f# ×1
llvm ×1
mpi ×1
msbuild ×1