Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
HPC使用哪种语言/框架:Java/.Net/Delphi/C/C++/目标C?_Java_.net_C++_Objective C_C - Fatal编程技术网

HPC使用哪种语言/框架:Java/.Net/Delphi/C/C++/目标C?

HPC使用哪种语言/框架:Java/.Net/Delphi/C/C++/目标C?,java,.net,c++,objective-c,c,Java,.net,C++,Objective C,C,我一直在考虑哪种语言/框架最适合以下内容。我需要开发一个HPC框架。所有处理都将完全面向对象。它将在实例之间(外部)和线程与引擎之间内部传递对象。这些对象将是的扩展 这些实例可以在移动、Windows、Mac、Linux等平台上运行 系统需要能够以速度和效率执行高度并行计算,最好利用SSE,最好支持CUDA/OpenCL 我曾考虑过以下几点: Java—它内存不足,不能在Mac上运行(无论如何,不是官方版本) .Net-内存不足;平台范围有限;没有本地SSE Delphi-不是64位;有限的平台

我一直在考虑哪种语言/框架最适合以下内容。我需要开发一个HPC框架。所有处理都将完全面向对象。它将在实例之间(外部)和线程与引擎之间内部传递对象。这些对象将是的扩展

这些实例可以在移动、Windows、Mac、Linux等平台上运行

系统需要能够以速度和效率执行高度并行计算,最好利用SSE,最好支持CUDA/OpenCL

我曾考虑过以下几点:

Java—它内存不足,不能在Mac上运行(无论如何,不是官方版本)
.Net-内存不足;平台范围有限;没有本地SSE
Delphi-不是64位;有限的平台范围
C/C++——不直接受Mac支持;代码复杂;然而,它无处不在
目标-C-由Mac支持;似乎在其他地方得到了支持;通过传递消息来工作,这符合我的设计要求;我对它了解不多


有什么建议吗?

以下是我对一些选项的概述(没有具体顺序):

信用证++ 如果您只关心性能(而不关心其他方面),那么这些功能将提供。直接访问系统级构造(如处理器关联和内联程序集)肯定会对性能产生影响。但是,C/C++选项有两个主要缺点。首先,两者都没有一个定义良好的内存模型,因此您开发的内存模型是您运行系统的CPU的内存模型(如果您不知道什么是内存模型以及它如何应用于并发编程,那么您不应该这样做)。这将您与单个平台紧密地联系在一起。第二个问题是缺少垃圾收集器,在简单的情况下,手动内存管理是棘手的(但可行的),用C++支持的实用程序简化了问题(例如自动指针/智能指针)。当编写并发代码时,这是一个数量级的困难,因为应该释放特定内存段的规则变得非常难以定义。例如,当一个对象被传递到另一个线程时,谁负责释放它?使用C++时,确保使用用于帮助管理内存的类的线程安全版本是很重要的。例如,boost智能指针仅支持在不同线程之间使用声明为“const”的方法(例如,取消引用是可以的),但是非const方法(例如,赋值)不是线程安全的

JAVA 我建议使用Java,它支持您提到的所有平台(包括移动平台,如JavaME和Android),也支持。Java有一个定义良好的跨平台一致的内存模型,一个健壮而成熟的JIT和Optimizer,以及大量优秀且不断改进的垃圾收集器。大多数用Java编写的通用应用程序的运行速度与C/C++应用程序的运行速度一样快。虽然这有点占用内存,但如果你在做HPC工作,你很可能会用一些像样的硬件来解决这个问题。考虑到您可以在商品硬件上处理100GB的地址,内存问题已不像过去那样成为一个问题。移动设备是唯一一个内存使用受到限制的实际领域,专业运行时环境在这方面表现更好(见上文)。Java的唯一主要缺点(从HPC的角度来看)是缺少通过复制的复杂类型(即C#中的结构),因此所有复杂对象都必须进行堆分配,这给GC带来了压力。Escape分析应该在某种程度上有帮助,但是在非常一般的情况下很难让它很好地工作(请注意,它最近在JDK的各种修订版中频繁出现)

值得一提的是广泛的语言支持(Scala和Groovy++具有相当好的性能配置文件),并且有许多消息传递并发框架(,)

C#/.Net 从语言的角度来看,这可能是最完整的,特别是如果你包含了F#之类的东西,以功能的方式处理事情。然而,如果你想要最好的性能,你通常会选择MS平台(这里的手机故事也不太好)。Mono提供了一个非常好的平台功能(注意:我是一个贡献者),但是他们仍然在追赶性能,例如,最近添加了一个精确、紧凑的收集器,并且仍然有点实验性

谷歌围棋 非常新,但从本机编译的角度来看很有趣(没有jit开销),但仍然具有强大的运行时、内存模型、垃圾收集器和对语言(通道)中CSP(并发顺序处理)特性的直接支持。可能还有一些路要走,一个新的GC的开发已经开始,但还没有出现,他们可能从编译器中得到更多

Haskell和其他函数式语言 这里没有太多经验,但是一些功能性构造(如不变性和持久性集合)对于构建健壮的并发应用程序非常有用

系统需要能够以速度和效率执行高度并行计算,理想情况下利用SSE,理想情况下支持CUDA/OpenCL

这将其范围缩小到
C
C++
。因为您需要OO,所以它被缩小到只
C++


<> P>严重的是,选择你或你的开发者最好的。在Mac上,java的运行是在Mac检查C和C++的绝对支持下。你认为Mac OS是用什么写的?“传递消息”==“调用方法”。绝对没有区别。手动内存管理在C++中并不难。它有容器、智能指针和RAII,意思是你永远不会删除或手动释放。我已经更新了C++部分,但是重点是C/C++内存管理(甚至使用支持库)BECO。