我得到了"未知类型名称'uint8_t'",其他人喜欢在MinGW中使用C语言.任何想法如何解决这个问题?
我有一个移动大量数据的视频处理应用程序。
为了加快处理速度,我制作了一个查询表,因为实际上许多计算只需要计算一次即可重用。
但是,我现在所有查找都需要30%的处理时间。我想知道它是否可能是慢速RAM。但是,我仍然想尝试对其进行更多优化。
目前,我有以下内容:
public readonly int[] largeArray = new int[3000*2000];
public readonly int[] lookUp = new int[width*height];
Run Code Online (Sandbox Code Playgroud)
然后,我使用一个指针p
(相当于width * y + x
)执行查找以获取结果。
int[] newResults = new int[width*height];
int p = 0;
for (int y = 0; y < height; y++) {
for (int x = 0; x < width; x++, p++) {
newResults[p] = largeArray[lookUp[p]];
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,我无法进行整个阵列复制以进行优化。而且,该应用程序是高度多线程的。
在缩短函数堆栈方面取得了一些进展,因此没有吸气剂,而是直接从只读数组中检索。
我也尝试过转换为ushort,但是它似乎要慢一些(据我了解,这是由于字长引起的)。
IntPtr会更快吗?我将如何处理?
下面的附件是时间分配的屏幕截图:
我有一个用LibGDX创建的应用程序.我可以在桌面上运行该应用程序,它以90 fps @ 1080p运行.
在Firefox上,它以40-50 fps @ 1080p(最大化窗口)运行.
在Chrome上,它以30 fps @ 1080p(最大化窗口)运行.
但是在Chrome上,如果我降低分辨率,性能会翻倍(达到60fps).在Firefox上,这不会发生.这可能是什么原因?
我正在使用webkitRequestAnimationFrame.
如图所示,我知道我的电脑可以很好地处理分辨率.
编辑
我正在尝试应用下面的提示,虽然它们似乎主要针对移动GPU.
资料来源:https://wiki.mozilla.org/Platform/GFX/MobileGPUs#Memory_Bandwidth
始终在glBindFramebuffer之后立即调用glClear
请参阅Adreno 200文档的第3.2.1节:"必须(a)在切换帧缓冲对象(FBO)时使用清除以避免驱动程序尝试保存/恢复GMEM内容,以及(b)始终清除深度-buffer在一个帧的开头."
这是有道理的,所以我们应该总是这样做.具体来说,这意味着我们应该在每次glBindFramebuffer调用之后执行glClear,理想情况是在它之后,或者至少在任何绘制调用之前.
Framebuffer绑定很昂贵
更改帧缓冲区绑定强制会立即解析当前帧缓冲区的渲染.因此,对渲染进行排序以最小化帧缓冲区绑定非常重要.Adreno 200文档的第3.2.4节有一个有用的解释.
编辑
以上并没有显着的差异.
编辑
我感觉这个问题是由于GLSL编译器引起的.我对这个主题没有太多的了解,但我相信OpenGL ES的GLSL编译成普通的GLSL,并带有一些特定于浏览器的代码.可能是Chrome编译的次数不够理想,导致片段着色会在较高分辨率下降低程序速度.
如果某人有关于如何确保此编译最优化的一些提示,我可以尝试一下,看看它是否解决了问题.
编辑
在使用英特尔高清显卡4000+芯片组的Windows上Chrome中,问题似乎并不普遍.Chrome版本:40.0.2214.111米.分辨率低:45fps~.高分辨率:30 fps稳定.
我最初的测试案例是在Ubuntu上使用GTX 650的Chrome.Chrome版本将在稍后添加.
编辑
显示此问题的Chrome版本:GTX 650显卡上Ubuntu上的40.0.2214.111(64位).
编辑
在配备GTX 650的同一台PC上,在Windows 7下,同一应用程序在Chrome下稳定运行60fps.由于在Ubuntu下编译为Java的应用程序运行速度为90fps,我认为它不能成为Linux驱动程序的问题,而是Chrome版Linux的问题.
编辑
我已经向Chrome发送了一个关于此问题的错误报告.
我正在寻找一种在PostgreSQL中跳过行的方法.
我可以通过以下两种方式使用:
SELECT * FROM table WHERE id % 5 = 0
Run Code Online (Sandbox Code Playgroud)
但是,我必须获取顺序行才能正确跳过.例如,如果我获取行(带有ids)0,3,5,它将不会跳过5行中的4行,而是导致(ids)0和5.
或跳过SQL之外:
$count = 0;
while($row = progres_fetch_row($result))
if ($count++ % 5 == 0)
// do something
Run Code Online (Sandbox Code Playgroud)
从SQL数据库获取每个第n行的最快方法是什么?
我不想用OpenCL做一些计算过的pixelart,直接在显示器上显示它而不需要CPU往返.我可以使用OpenCL与OpenGL的互操作性,并写入GPU的纹理库并使用OpenGL显示纹理.我想知道最好的方法是什么,因为我不需要任何3D东西,只需2d pixelart.
我想知道在着色器中GL_TEXTURE_2D是否处于活动状态.
我将颜色绑定到着色器以及活动纹理(如果设置了GL_TEXTURE_2D)并且需要将这两者结合起来.
因此,如果绑定了纹理,请混合颜色和纹理(sampler2D*颜色),如果没有绑定纹理,请使用颜色.
或者我应该采取另一种方式吗?
我正在Android上试用Sensor.TYPE_ROTATION_VECTOR.它应该使用磁场传感器,加速度计和陀螺仪始终提供准确的旋转.但是,我注意到Moto G 2nd发生了巨大的漂移.我想知道这是否是特定于设备的问题,或者这种情况发生在很多手机上(我会假设,虽然我很熟悉Moto G 2nd是一个有问题的陀螺仪).
是否有另一种形式的传感器融合,它是无漂移的(使用磁传感器)?我也试过了Google Cardboard的传感器融合,但它使用了偏差估计,因此可能并非完全漂移(因为此时看不到磁场传感器),尽管仍然比TYPE_ROTATION_VECTOR好很多.
我想知道如何在Java中处理最佳的像素操作.我正在使用swing并绘制一个1 x 1像素的矩形非常慢.我需要至少获得60 fps,而不需要使用太多资源.对图像的影响首先意味着这可以成功地取得成功吗?或者用Java做这件事一般是个坏主意我是否需要坚持使用C或其他替代方案?
我正在编写一个raycaster的开头,因为我正在使用的openCL有一个Java包装器,我更喜欢用Java工作.
出于某些原因,在我的SaveFileDialog之后,我的应用程序将永远不会显示MessageBox.有什么我想念的吗?或者这是一个线程问题?
我使用VS 2010 Express将应用程序作为Windows窗体应用程序运行.
我没有任何例外.
添加:当我单步执行代码时,一切似乎都很顺利.这很奇怪,所以我认为这是一个时间问题.
LarsTech和其他人指出,MessageBoxes确实出现了,但重点已经消失; 换句话说,MessageBox被推到其他窗口后面或最小化.这是个问题.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Globalization;
using System.IO;
namespace SpeedDating
{
class Program
{
[STAThread]
static void Main(string[] args)
{
string filename = "test.test"; // args[0];
string ext = filename.Substring(filename.LastIndexOf('.'));
SaveFileDialog dialog = new SaveFileDialog();
dialog.Title = "SpeedDating App";
dialog.RestoreDirectory = true;
dialog.CheckFileExists = false;
dialog.CheckPathExists = false;
dialog.FileName = DateTime.Now.ToString("yyyyMMdd") + ext;
DialogResult result = dialog.ShowDialog();
if (result == DialogResult.OK && dialog.FileName != "")
{ …
Run Code Online (Sandbox Code Playgroud) void bar(int N){
int c=0;
for (int i=0; i<N*N; i++)
for (int j= i; j< N; j++)
c++;
}
Run Code Online (Sandbox Code Playgroud)
上面的外部(和内部)循环永远不会超过N.这是否意味着大O是N*N(外部为N,内部为N/2)?