我正在尝试在名为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完全相同.
我不想让 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)
非常感谢!