小编Pat*_*rik的帖子

c#setter中的堆栈溢出异常

这很容易解释:这很有效

using System;
using ConstraintSet = System.Collections.Generic.Dictionary<System.String, double>;

namespace ConsoleApplication2
{
    class test
    {
        public ConstraintSet a { get; set; }
        public test()
        {
            a = new ConstraintSet();
        }
        static void Main(string[] args)
        {
            test abc = new test();
            Console.WriteLine("done");
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

这不

using System;
using ConstraintSet = System.Collections.Generic.Dictionary<System.String, double>;

namespace ConsoleApplication2
{
    class test
    {
        public ConstraintSet a { get { return a; } set { a = value; } }
        public test()
        {
            a = new ConstraintSet(); …
Run Code Online (Sandbox Code Playgroud)

c# stack-overflow setter callstack

14
推荐指数
3
解决办法
8133
查看次数

多核系统的并行线性代数

我正在开发一个需要进行重线性代数计算的程序.

现在我正在使用LAPACK/BLAS例程,但我需要利用我的机器(24核Xeon X5690).

我发现像pblasscalapack这样的项目,但它们似乎都专注于分布式计算和使用MPI.

我没有可用的集群,所有计算都将在一台服务器上完成,并且使用MPI看起来像是一种过度杀伤力.

有人对此有任何建议吗?

parallel-processing linear-algebra lapack

10
推荐指数
2
解决办法
8515
查看次数

装配说明,以取代openmp关键区域

我有一个由openmp任务处理的元素数组.任务可能会在数组末尾添加新元素.当然,这些元素也必须处理,并可能产生新的项目.目前我正在使用此代码

int p;
#pragma omp critical
{
    p=l.n++;
}
Run Code Online (Sandbox Code Playgroud)

这只是在阵列末尾保留一个位置.类型l

struct list
{
    int n;
    double *e;
}
Run Code Online (Sandbox Code Playgroud)

并将p用作存储新元素的位置的索引.我想知道是否有办法在不使用关键区域的情况下执行此操作.是否有一个汇编指令复制一个值,然后原子地增加原始值?

代码将在nehalem cpu上执行,无需担心旧机器

assembly openmp critical-section

4
推荐指数
1
解决办法
932
查看次数

将替换应用于grep返回的第一个项目

我有这个程序

sub f {                                                                                                                                                                                                                       
    return ("A/X", "B/X");                                                                                                   
}                                                                                                                            

$x = grep( /X$/, f() ) =~ s/\/X$//r;                                                                                           
print "$x\n";                                                                                                                

($x) = grep( /X$/, f() ) =~ s/\/X$//r;                                                                                         
print "$x\n";                                                                                                                

( ($x) = grep( /X$/, f() ) ) =~ s/\/X$//;                                                                                        
print "$x\n";                                                                                                                

($x) = grep( /X$/, f() );                                                                                                      
$x =~ s/\/X//;                                                                                                               
print "$x\n";
Run Code Online (Sandbox Code Playgroud)

结果是

2
2
A/X
A
Run Code Online (Sandbox Code Playgroud)

我想要的结果是

A
Run Code Online (Sandbox Code Playgroud)

但只有最后一次尝试才能产生它.

在我的完整程序中,我想用一行来完成这个,因为我必须多次这样做.我想避免这样的事情,$x[0]并且f()是一个更复杂的功能

我该怎么做?

perl grep substitution

4
推荐指数
1
解决办法
82
查看次数

OpenMP:首先完成第一次迭代

我有一个C parallel for循环,包括一行

b[i] = b[0];
Run Code Online (Sandbox Code Playgroud)

所以我需要在开始任何其他迭代之前完成第一次迭代.是否有强制执行此类行为的条款?

c loops for-loop openmp

0
推荐指数
1
解决办法
88
查看次数