一些相关的问题和一年之久:JVM的JIT编译器是否生成使用向量化浮点指令的代码?
前言:我试图在纯java中执行此操作(没有JNI到C++,没有GPGPU工作等等).我已经进行了分析,并且大部分处理时间来自此方法中的数学运算(可能是95%的浮点数学运算和5%的整数运算).我已经将所有Math.xxx()调用减少到足够好的近似值,因此大部分数学运算现在都是浮点数乘以一些加法.
我有一些处理音频处理的代码.我一直在进行调整,并且已经获得了巨大的收益.现在我正在研究手动循环展开以查看是否有任何好处(至少手动展开2,我看到大约25%的改进).在尝试手动展开4时(由于我展开嵌套循环的两个循环,这开始变得非常复杂)我想知道是否有任何我可以做的提示到jvm在运行时它可以使用向量操作(例如SSE2,AVX等......).音频的每个样本都可以完全独立于其他样本计算,这就是为什么我已经能够看到25%的改进(减少浮点计算的依赖性).
例如,我有4个浮点数,循环的4个展开中的每一个都有一个浮点数来保存部分计算的值.我如何声明和使用这些浮子很重要吗?如果我把它变成一个浮点数[4],它会向jvm暗示它们彼此无关,而不是浮动,浮动,浮动,浮动甚至是一类4个公共浮标?有什么我可以做的没有意义,这会杀死我的代码被矢量化的机会?
我在网上看到有关"正常"编写代码的文章,因为编译器/ jvm知道常见模式以及如何优化它们并偏离模式可能意味着更少的优化.至少在不过这种情况下,我也没有想到2展开环之多具有改进的性能,因为它没有,所以我想知道如果有什么我可以做的(或至少不这样做),以帮助我机会.我知道编译器/ jvm只会变得更好所以我也要警惕做将来会伤害我的事情.
编辑为好奇:4展开的提高性能的另一个〜25%,比展开了2,所以我真的觉得向量运算会在我的情况下帮助如果JVM支持它(或者是已经被使用它们).
谢谢!
我正在写一个简单的网络上传脚本.目标是使用php上传文件,然后调用java程序来处理该文件.
我已经完成了上传文件的工作,但我无法从php脚本中成功运行java程序.
我曾尝试exec(),shell_exec()和system()没有结果.
对于命令,我使用了" java Test"," java < directory >/Test"," /usr/bin/java < directory >/Test",我甚至将应用程序设置为没有结果的jar文件.我使用的实际代码行是:
echo shell_exec("java Test");
Run Code Online (Sandbox Code Playgroud)
通常没有输出.但是,如果我有shell_exec("java"),那么show splash screen with specified image显示java(" ")的最后一行帮助,这表明该命令已被执行.例如,如果我使用s,hell_exec("whoami")我会返回"nobody",这是正确的.java文件唯一要做的就是创建一个文件,以便我可以看到应用程序已成功运行(如果我在命令行上运行它,应用程序就会成功运行).我已将java文件的权限设置为777,以排除任何权限错误的可能性.我一直在努力尝试各种各样的选项而没有结果 - 文件永远不会被创建(文件是用绝对路径创建的,所以它没有被创建,我只是找不到文件).有没有人有任何想法?
谢谢.
我以前使用Visual Studio 2008来编译和运行CUDA应用程序.我已经切换到Visual Studio 2010和Windows 7.我一直在尝试整个上午设置集成,但还没有取得圆满成功.我已经下载了工具包,安装了Nsight,确保设置了libraries/include/bin路径,选中框以使用CUDA 3.2的Build Customization,并将单个.cu文件的属性设置为CUDA C类型/ C++而不是C/C++.我得到一个关于不支持编译器v100的错误,所以我将项目平台设置为v90并且现在正在下载Visual Studio 2008.我希望我不必安装两个版本的visual studio,但是哦.无论如何,大多数语法高亮显示已启用,一些关键字如"int"为蓝色,注释为绿色,字符串为红色.但是,像__ global__这样的cuda特定关键词不是.另外,我已经通过include目录检查了,找不到cutil.h,所以我想知道3.2 SDK的安装中是否还有其他内容(我已经包含了cuda_runtime.h,但是我不知道这是否能解决我的问题).有谁知道如何解决这一问题?
编辑:我安装了Visual Studio 2008.当我尝试编译时,我得到一个巨大的错误列表,从1> C开始:\ Program Files(x86)\ Microsoft Visual Studio 9.0\VC\include\crtdefs.h(490):错误:类型名称重新声明无效"size_t",而以下大多数错误都必须处理size_t类型.所有错误都在包含的文件中,其中大部分都是我从未见过的.有谁知道发生了什么?或者,如果有一个简单的逐步指南让VS2010使用cuda?
编辑2:显然我有许多当前设置中的一个为64位,其他设置为32位.将活动配置,Cuda C/C++目标机器平台和链接器|高级目标机器全部更改为32位或64位允许我编译和运行.我仍然不知道如何修复__ global__和这样的语法高亮,但它不是一个大问题.