C# 到 C++ 多线程,会出现什么问题?
C# to C++ multithreading, any issues to expect?
经过大量测试后,我有十几种算法在 C# 中不能给我令人满意的速度,而在 C++ 中工作得很好(以相同的方式实现,几乎是从 C# 复制粘贴到 C++,大量基于数组在大型数据集上)。
现在我知道如何从 C# 调用 C++ 代码,而且我不想切换整个应用程序,所以我正在考虑这样做。然而,这些微内核必须 运行 大量并行,并且由于 .net 中的并行性非常好,我正在考虑在这一方面处理它,并让来自 C# 的每个线程调用任何相关的东西。
在我看来我不应该有任何线程安全问题(我没有调用任何 C++ 库功能,所有方法只是将数组作为输入并返回数组作为输出,数据是不在 C++ 或 C# 端跨线程共享)。但是因为我从来没有这样做过,所以我的问题是:这完全是愚蠢的吗?我错过了房间里的一头大象还是我应该没事?我是否需要担心我是否在 C++ 端使用 MT 运行time 或不考虑我不调用任何系统调用?
每个微内核都足够慢(100+ 毫秒),因此 .net 边界交叉不是一个大问题,而且在 C++ 中速度要快得多,但我宁愿避免移植我所有的代码和测试以意识到我错过了一些明显的东西.
not calling any C++ lib functionality, all the methods are just taking arrays as input and returning arrays as output, data is not shared accross threads on either the C++ or C# side
由于线程之间不共享数据,我认为您是安全的。
是的,您这样做是安全的,但是跨越 C++/C# 鸿沟进行编组会产生一些开销。
一些想法:
考虑使用 C++ CLI
如果您的算法是数据并行算法,请考虑通过托管库使用 GPU 或通过 C++ 使用 CUDA(有托管包装器)
我还没有在 .net 中使用 RyuJIT(新的 jit 编译器),但它也能够使用 SIMD 指令,这些指令可能被证明是有用的,而无需使用 C++。
经过大量测试后,我有十几种算法在 C# 中不能给我令人满意的速度,而在 C++ 中工作得很好(以相同的方式实现,几乎是从 C# 复制粘贴到 C++,大量基于数组在大型数据集上)。
现在我知道如何从 C# 调用 C++ 代码,而且我不想切换整个应用程序,所以我正在考虑这样做。然而,这些微内核必须 运行 大量并行,并且由于 .net 中的并行性非常好,我正在考虑在这一方面处理它,并让来自 C# 的每个线程调用任何相关的东西。
在我看来我不应该有任何线程安全问题(我没有调用任何 C++ 库功能,所有方法只是将数组作为输入并返回数组作为输出,数据是不在 C++ 或 C# 端跨线程共享)。但是因为我从来没有这样做过,所以我的问题是:这完全是愚蠢的吗?我错过了房间里的一头大象还是我应该没事?我是否需要担心我是否在 C++ 端使用 MT 运行time 或不考虑我不调用任何系统调用?
每个微内核都足够慢(100+ 毫秒),因此 .net 边界交叉不是一个大问题,而且在 C++ 中速度要快得多,但我宁愿避免移植我所有的代码和测试以意识到我错过了一些明显的东西.
not calling any C++ lib functionality, all the methods are just taking arrays as input and returning arrays as output, data is not shared accross threads on either the C++ or C# side
由于线程之间不共享数据,我认为您是安全的。
是的,您这样做是安全的,但是跨越 C++/C# 鸿沟进行编组会产生一些开销。
一些想法:
考虑使用 C++ CLI
如果您的算法是数据并行算法,请考虑通过托管库使用 GPU 或通过 C++ 使用 CUDA(有托管包装器)
我还没有在 .net 中使用 RyuJIT(新的 jit 编译器),但它也能够使用 SIMD 指令,这些指令可能被证明是有用的,而无需使用 C++。