所以我意识到这个问题听起来很愚蠢(是的,我使用的是双核),但是我尝试了两个不同的库(Grand Central Dispatch和OpenMP),并且在使用clock()来计算带有和不带有线条的代码时它平行,速度是一样的.(为了记录,他们都使用自己的平行形式).他们报告说在不同的线程上运行,但也许它们运行在同一个核心上?有没有办法检查?(这两个库都用于C,我在较低层时感到不舒服.)这非常奇怪.有任何想法吗?
c parallel-processing performance openmp grand-central-dispatch
我想开始使用任务并行库,因为这是执行异步操作的推荐框架.我无法找到的一件事是强制中止的任何方法,例如Thread.Abort提供的内容.
我特别关注的是我安排运行代码的任务,我不希望完全信任.特别是,我不能确定这个不受信任的代码不会死锁,因此我无法确定使用此代码的任务我是否会完成.我想远离真正的AppDomain隔离(由于编组的开销和复杂性),但我也不想让任务线程挂起,死锁.有没有办法在TPL中做到这一点?
.net parallel-processing deadlock task task-parallel-library
有没有办法让子程序在处理时发回数据?例如(此示例仅用于说明) - 子例程读取文件.当它正在读取文件时,如果满足某些条件,则"返回"该行并继续处理.我知道有些人会回答 - 你为什么要那样做?你为什么不......?,但我真的想知道这是否可能.
我有一些涉及Parallel for循环和添加到List的问题.问题是,相同的代码可能在不同的时间生成不同的输出.我在下面设置了一些测试代码.在这段代码中,我创建了一个包含10,000个int值的List.1/10的值将为0,1/10的值将为1,一直到值的十分之一为9.
设置此List后,我设置了一个Parallel for循环,遍历列表.如果当前数字为0,我将一个值添加到新列表中.Parallel for循环完成后,我输出列表的大小.大小应始终为1,000.大多数时候,给出了正确的答案.但是,我发现有3种可能的错误结果:
doubleList.Add(0.0);doubleList.Add(0.0);给出ArgumentException的消息是: Destination array was not long enough. Check destIndex and length, and the array's lower bounds.
可能导致错误的原因是什么?这是一个.Net错误吗?有什么我可以做的,以防止这种情况发生?
请亲自试用代码.如果您没有收到错误,请尝试几次.另请注意,使用单核机器时可能不会发现任何错误.
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace ParallelTest
{
class Program
{
static void Main(string[] args)
{
List<int> intList = new List<int>();
List<double> doubleList = new List<double>();
for (int i = 0; i < 250; i++)
{
intList.Clear();
doubleList.Clear();
for (int j = 0; j < 10000; j++) …Run Code Online (Sandbox Code Playgroud) 目前,我在Snow Leopard的XCode 3.2.2上尝试OpenMP:
#include <omp.h>
#include <iostream>
#include <stdio.h>
int main (int argc, char * const argv[]) {
#pragma omp parallel
printf("Hello from thread %d, nthreads %d\n", omp_get_thread_num(), omp_get_num_threads());
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我还没有包含任何链接库,所以链接器抱怨:
"_omp_get_thread_num",引自:main.o
"_omp_get_num_threads"中的_main,引用自:main.o中的_main
好的,没问题,我看看现有的框架,寻找关键字,如openmp或omp ......这里出现问题,链接库在哪里?或者我应该说,openMP的链接库的名称是什么?它是dylib,框架还是什么?或者我是否需要先从某个地方获取它?
.net 4.0任务并行库是否替换MPI.NET以进行高性能计算?
在这里找到的MPI.NET http://www.osl.iu.edu/research/mpi.net/svn/是一个高性能,易于使用的Microsoft .NET环境的消息传递接口(MPI)实现.MPI是编写在分布式内存系统(如计算集群)上运行的并行程序的事实标准.
.NET 4 TPL说:"任务并行库(TPL)是.NET Framework版本4中System.Threading和System.Threading.Tasks名称空间中的一组公共类型和API .TPL的目的是使通过简化向应用程序添加并行性和并发性的过程,开发人员的工作效率更高.TPL动态扩展并发度,最有效地使用所有可用的处理器.此外,TPL处理工作的分区,线程的调度关于ThreadPool,取消支持,状态管理和其他低级细节.通过使用TPL,您可以最大限度地提高代码的性能,同时专注于您的程序旨在完成的工作."
我的目标是构建一个可以在Windows HPC 2008上运行的应用程序 ......哪种方式可以运行?
我被要求展示Parallelism的好处和局限,并对其进行评估,以便在我们公司内部使用.我们主要是面向数据的业务,基本上从数据库加载对象,然后通过一些业务逻辑,显示给用户,然后保存回数据库.在我看来,管道中并没有太多可以从并行运行中获益,但对于这个概念来说还是比较新的,我可能完全错了.这条简单的管道是否会受益于并行运行?有没有关于如何实现这种编程风格的指导方针?
此外,是否有任何工具(最好是与VS2010一起提供)可以显示瓶颈出现的位置,并且能够直观地显示当我在运行给定量的循环的简单应用程序上单击"开始"时发生了什么(写成简单的数学循环,例如对于i作为整数= 1到1000 - 做一些计算)并行,然后串联?
我需要能够使用体面的分析工具来显示差异.
我的程序使用套接字,我可以使用哪些并行计算API,这可以帮助我,而不必强迫我从套接字转到其他任何东西?
当我们在具有特殊的非套接字基础结构系统的集群上时,此API将模拟类似套接字但使用该基础结构的东西(因此程序执行速度比套接字快得多,但仍使用套接字API).
当我运行或在标签中时,多路复用日志将每个任务的输出混合在一起.我想要更容易阅读/ grokked的东西.
我尝试了以下方法,它们总比没有好,但仍然不是我想要的.以下回显了日志末尾的非交错日志输出,但它还首先具有两个任务的组合和混合输出.
有没有办法我可以告诉ant ONLY输出到有问题的文件,不要将日志输出冒泡到调用者?
<parallel>
<ant target="task1" output=${log.dir}/task1.log"/>
<ant target="task2" output=${log.dir}/task2.log"/>
</parallel>
<loadfile property="task1" srcfile="${log.dir}/task1.log"/>
<loadfile property="task2" srcfile="${log.dir}/task2.log"/>
<echo>Results:
Task1: ${task1}
---
Task2: ${task2}
</echo>
Run Code Online (Sandbox Code Playgroud) 鉴于两台独立的计算机,如何确保每个屏幕上的颜色投影大致相同?
在IE浏览器中,一个屏幕的亮度可能比另一个屏幕亮50%,因此在一个屏幕上颜色看起来比较暗淡.一台计算机上的一位艺术家可能会以不同的方式看到这些图片,重要的是他们看到相同的水平.
您可以通过软件进行某种类型的校准技术吗?任何技巧?或者硬件解决方案是唯一的方法吗?