小编Dim*_*iev的帖子

C#.net多线程

我正在尝试在名为Grasshopper(Rhino3D的一部分)的包中使用C#.net优化一些数学运算.操作非常简单,但必须执行的列表很大,可能会变得更大.

我在我的C#脚本中使用Parallel.ForEach和列表,我得到的最终结果数低于预期.这很可能是因为list.add不是线程安全的(或者我正在构建它的软件中没有线程安全).

  private void RunScript(double z, int x, List<double> y, ref object A)
  {
    List<double> temp = new List<double>();
    double r;
    System.Threading.Tasks.Parallel.ForEach(y, numb =>
      {
      r = Math.Pow((numb * x), z);
      temp.Add(r);
      });
    A = temp;
Run Code Online (Sandbox Code Playgroud)

请帮我找出一种使用CPU多线程在数百个值上运行这个简单数学运算的简单有效的方法(或者如果你有关于GPU CUDA的建议).

我希望这个模糊不清的软件不会打扰你,因为据我所知,它的表现与普通的C#.Net/Python/VB.Net完全相同.

c# multithreading grasshopper rhino3d

15
推荐指数
2
解决办法
1092
查看次数

将 ipc:// 更改为 tcp:// python zmq (Windows)

我不想让 python 应用程序在 Windows 上运行,但我得到了一个 ZMQError: Protocol not supported 这是因为 Windows 不支持 ipc。从我所读到的,从 ipc 到 tcp 协议的更改应该与更改 bind() 中使用的字符串一样简单。

        master_addr = 'ipc://{0}/sailfish-master-{1}_{2}'.format(
                tempfile.gettempdir(), os.getpid(), subdomain.id)
        ipc_files.append(master_addr.replace('ipc://', ''))
        sock = ctx.socket(zmq.PAIR)
        sock.bind(master_addr)
        sockets.append(sock) 
Run Code Online (Sandbox Code Playgroud)

如果我将 ipc:// 更改为 tcp:// 我得到 ZMQError: Invalid argument 所以我想这不是那么简单。你能告诉我为 Windows 修复这个问题的过程吗,或者告诉我我是否在问一个愚蠢的问题。

你可以看到完整的脚本https://github.com/sailfish-team/sailfish/blob/master/sailfish/master.py上面的代码来自第 250 行。 SailfishCFD 是一个用于 GPU 的 Python Lattice Boltzmann (LBM) 模拟包(CUDA、OpenCL)

非常感谢!

python tcp ipc zeromq

5
推荐指数
1
解决办法
3348
查看次数

标签 统计

c# ×1

grasshopper ×1

ipc ×1

multithreading ×1

python ×1

rhino3d ×1

tcp ×1

zeromq ×1