我正在构建一个 C# 项目。该项目将通过 CUDA 使用 NVidia 的 Tesla。CUDA C 原生实现没有直接暴露给 C#,而且在我看来,可用的 C# 包装器(如 Brahma、CUDAfy、Linq to GPU)对于生产来说还不够成熟。
我决定继续在一个 C++ 组件中构建我的数学逻辑,该组件将访问官方支持的 CUDA。C++/CLI 不是一个选项,因为我使用英特尔 C++ 编译器来提高性能,它不支持 CLR 扩展。
我最重要的标准是性能,因此,我会尽量减少 C++(我的业务逻辑所在)和 .NET(我的其余应用程序)之间的编组和复制数组。
我知道以前有人问过这个问题,但大多数情况下,C++ 库已经存在,而其他时候,C++/CLI 是一个选项,但在这里,两种情况都不是这样。
鉴于我打算用 C++ 从头开始编写 C++ 库,因此我可以决定将它暴露给 C# 的最佳方式。您是否有任何建议或最佳实践,我应该遵循以在 C++ 和 .NET 之间实现最简单和最高性能的集成?请注意,我将要交换的主要是大型数组
编辑:澄清我正在用 C++ 构建我的业务逻辑(数学),而不是一个基础设施库来促进对 GPU 的访问。