我想将以下代码转换为SSE / AVX:
float x1, x2, x3;
float a1[], a2[], a3[], b1[], b2[], b3[];
for (i=0; i < N; i++)
{
if (x1 > a1[i] && x2 > a2[i] && x3 > a3[i] && x1 < b1[i] && x2 < b2[i] && x3 < b3[i])
{
// do something with i
}
}
Run Code Online (Sandbox Code Playgroud)
这里N是一个小常量,比如说8. 8. if(...)语句在大多数情况下的计算结果为false.
第一次尝试:
__m128 x; // x1, x2, x3, 0
__m128 a[N]; // packed a1[i], a2[i], a3[i], 0
__m128 b[N]; // packed b1[i], b2[i], b3[i], 0 …Run Code Online (Sandbox Code Playgroud) 我正在开发一款与蓝牙LE设备通信的应用程序.对于iOS和Android,我想要一些避免开发两次的方法.是否有一个跨平台的应用程序框架,对蓝牙LE有很好的支持?
我已经快速浏览了Cordova(PhoneGap),Appcelerator,Xamarin等框架(通常的嫌疑人:例如这个列表),但我无法弄清楚他们是否(a)在每个平台上都支持蓝牙LE,并且(b)如果它们这样做,是否通过本机调用(访问如何?)或本机API的某种包装器(包装器看起来是什么样的?),以及(c)如果它是包装器,它是如何完成的是的,它是多么稳定.
如果您有这方面的经验,您能否总结一下不同框架中蓝牙LE支持的状态?
编辑从挖掘到各种选项以及下面的答案中获得的一些信息:
Cordova:几个开源插件,例如https://github.com/evothings/cordova-ble https://github.com/don/cordova-plugin-ble-central https://github.com/randdusing/ BluetoothLE(不完整列表).Evothings是一个很好的Cordova +蓝牙设置.这些是否适用于其他基于Cordova的应用程序框架,如Appery.io,Telerik AppBuilder,Ionic Creator?
Xamarin:这只是通过MonoTouch.CoreBluetooth和Android.Bluetooth使用本机API .这意味着使用它们的代码实际上并不是跨平台的,但它们可能与本机API相同(因为它们本质上是本机API).
Appcelerator有蓝牙的第三方商业插件(https://marketplace.appcelerator.com/apps/3834和 https://marketplace.appcelerator.com/apps/6611),没有内置支持.这些工作吗?
PS除了蓝牙,我的需求是非常小的:这个应用程序将有很多UI元素,但不是一个复杂的类型,只是一堆按钮/复选框/滑块在一堆不同的屏幕上(维持两个非常繁琐)平台).我还需要调用一些REST API.速度并不是非常重要,没有那么多应用程序逻辑(它现在主要用C语言编写),而本机UI外观并不重要.但是,在旧版本的平台上工作非常重要,最好是回到Android 4.3和iOS 7.0.
我想在python中编写TensorFlow操作,但我希望它是可微分的(能够计算渐变).
这个问题询问如何在python中编写一个op,答案建议使用py_func(没有渐变):Tensorflow:用Python编写一个Op
TF文档描述了如何仅从C++代码添加操作:https://www.tensorflow.org/versions/r0.10/how_tos/adding_an_op/index.html
在我的情况下,我正在进行原型设计,所以我不关心它是否在GPU上运行,我不关心它是否可以从TF python API以外的任何东西使用.
我有图像特征提取问题.输入图像是二进制(黑色和白色),并且可以包含近似已知区域和纵横比的斑点.这些需要使用一些最佳拟合算法与椭圆拟合.
输入示例:

期望的输出:

可能存在多个blob(零个或多个),该数量事先未知.所有斑点的近似面积和纵横比是已知的(并且是相同的).图像中有多少,它们的位置,方向和实际尺寸都是我想要找到的.根据实际找到的大小和纵横比,输出应该是每个blob的最佳拟合椭圆.
造成这种困难的是噪音和可能的重叠.
噪音示例:

重叠和噪音的示例:

嘈杂的图像可能在斑点中有洞,而且周围散布着小的其他斑点.小的其他斑点不计算在内,因为它们太小而且不能覆盖任何密集的区域以至于被认为是真正的匹配.
具有重叠的图像应该被计为两个斑点,因为该区域太大而单个斑点无法很好地覆盖它.
评估潜在拟合的可能指标是:
(K1*与预期尺寸的偏差百分比+ K2*与预期纵横比的偏差百分比+ K3*椭圆的百分比,非黑色+ K4*百分比与任何其他椭圆重叠)+ + K5*百分比的图像其余部分的总和这是黑色的
对于一些适当选择的参数K1..K5.完美的比赛得分为0.
我可以看到如何使用强力解决这个问题,例如尝试足够的不同可能的拟合来很好地对搜索空间进行采样.我无法想象一种比蛮力更快的方法.
我更喜欢python和/或opencv中的示例.我将尝试在python中实现并发布任何建议的解决方案.谢谢!
PS不能假设blob已连接.可能有足够的噪音将其分解成不连续的部分.
PPS二进制腐蚀无法消除少量噪声.在我的一些图像中,有足够的内部孔,如果图像被腐蚀到足以使噪声比特消失,则侵蚀使整个(真实)斑点消失.
PPPS我认为使用任何基于轮廓的方法来解决这个问题是非常困难的.我在实践中看到的数据有太多的边缘噪声,可能(通常是)一些噪声连接单独的blob,或者将单个blob分成几个(明显的)连接组件.我想基于区域的方法,因为区域覆盖似乎比边缘形状小得多.
PPPPS根据要求,这是一个由于噪音导致切入的示例:

和一个有很多很多噪音但仍然是一个明显斑点的样本:

编辑没有一个答案实际上解决了这个问题,尽管巴拉特提出了一个部分解决方案,它可以很好地解决非重叠的blob问题.请更多:)我将奖励任何实际解决方案的额外奖励.
我在C中有一个简单的OpenGL测试应用程序,它根据键输入绘制不同的东西.(Mesa 8.0.4,在带有NVIDIA GTX650的PC上试用了Mesa-EGL和GLFW,Ubuntu 12.04LTS).绘制非常简单/快速(旋转三角形类型的东西).我的测试代码不会故意以任何方式限制帧速率,它看起来像这样:
while (true)
{
draw();
swap_buffers();
}
Run Code Online (Sandbox Code Playgroud)
我非常小心地计时,我发现从一个eglSwapBuffers()(或glfwSwapBuffers)调用到下一个的时间是~16.6毫秒.从时间后调用eglSwapBuffers()到之前的下一次调用比只少一点点,即使什么画是很简单的.交换缓冲区调用的时间远低于1ms.
但是,从应用程序更改其响应按键的绘制时间到实际显示在屏幕上的更改的时间大于150毫秒(大约8-9帧).这是通过以60fps的屏幕和键盘的相机记录来测量的.(注意:确实,我没有办法测量从按键到应用程序获取它需要多长时间.我假设它是<< 150ms).
因此,问题:
在调用交换缓冲区和实际显示在屏幕之间的图形缓冲在哪里?为何延误?看起来应用程序看起来总是在屏幕前方绘制许多帧.
OpenGL应用程序可以做什么来立即绘制屏幕?(即:没有缓冲,只是阻止直到绘制完成;我不需要高吞吐量,我确实需要低延迟)
应用程序可以做些什么来尽快实现上述即时抽奖?
应用程序如何才能知道屏幕上实际显示的内容?(或者,当前缓冲延迟的时间长度/帧数是多少?)
我想编写一个Android应用程序,它使用framebuffer在屏幕上显示内容.这将仅在特定的root设备上运行,因此权限等不是问题.相同的应用程序(无论如何简单的测试版本)已经在PC/Linux上正常运行.
问题:
如何避免Android操作系统访问帧缓冲区?我希望,在我的应用程序运行时,操作系统永远不会触摸帧缓冲区,没有写入和没有ioctl.我需要做什么才能独占使用framebuffer,然后(当我的应用程序退出时)将其返回给操作系统?
Android framebuffer和Linux framebuffer之间有什么区别需要注意吗?
PS我想将我的应用程序作为常规Android应用程序(带有一些本机代码)启动,它除了用于接管整个屏幕的帧缓冲区绘制外,没有可见的UI.能够从操作系统获取事件会很高兴.
另见:http: //www.kandroid.org/online-pdk/guide/display_drivers.html
我想要一种方法来降低TensorFlow(大约:截断尾数)中浮点数的精度到定义的整个范围内的任意位数.我不需要完全以降低的精度编写代码(如tf.float16),而是需要提出一系列操作来降低张量的精度,同时保留原始类型(例如tf.float32).
例如,如果整个范围是0到1,精度是8位,则0.1234将变为圆形(0.1234*256)/ 256 = 0.125.这使用简单的舍入.
我还想进行统计舍入,其中每个方向的舍入概率与该值的距离成正比.例如,0.1234*256 = 31.5904,这将在59%的时间内达到32/256,并且在41%的时间内达到31/256.
额外的问题:如何获取现有图表并修改它以在每次卷积后添加舍入?
假设我有一个这样的程序
// print-addresses.cpp
#include <stdio.h>
void foo() { }
void bar() { }
void moo() { }
int main(int argc, const char** argv) {
printf("%p\n", foo);
printf("%p\n", bar);
printf("%p\n", moo);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
它会打印一些数字
013510F0
013510A0
01351109
Run Code Online (Sandbox Code Playgroud)
如何将这些数字转换回正确的符号?实际上,我希望能够做到这一点
print-addresses > address.txt
addresses-to-symbols < address.txt
Run Code Online (Sandbox Code Playgroud)
并打印出来
foo
bar
moo
Run Code Online (Sandbox Code Playgroud)
我知道这与调试接口访问SDK有关,但我并不完全清楚如何从地址转到符号.
我想将Android原生命令行应用程序打包到apk中.我有使用jni/Android.mk的ndk-build构建的应用程序.输出位于libs/armeabi/<MyApp>中.我也有蚂蚁的apk建筑.但是,apk似乎没有拿起命令行应用程序.如果我解压缩apk应用程序不在那里.
我需要做些什么来让ant包含一个预先构建的命令行应用程序?
另外,我需要做什么才能让ant运行ndk-build?(已经回答:使用ANT脚本构建Android NDK)
我正在寻找一种在Android上获得高分辨率计时器(时钟源)的方法.这必须是本机代码,并且可能相当不可移植.我想要微秒分辨率,或者更好.对于我的特定应用,分辨率比精度更重要,单调的定时器是最好的.我一直在使用Android 4.0.3测试特定的ARMv7芯片组.
到目前为止我尝试过的:
clock_gettime(CLOCK_MONOTONIC):在目标硬件上以1ms为单位递增(由于我的代码中的错误,EDIT最初我认为10ms,1ms是正确的,但仍然不是很好)gettimeofday():类似于clock_gettime我没有尝试过:
System.nanoTime():这不是原生的.我相信它基于clock_gettime(),但我更愿意找出引擎盖下的内容并直接使用它./dev/rtcSysTick(http://web.eecs.umich.edu/~prabal/teaching/eecs373-f10/readings/ARMv7-M_ARM.pdf)或通用定时器(GPT).另见(相关问题,但没有答案):
android ×4
c ×3
python ×3
tensorflow ×2
3d ×1
android-ndk ×1
arm ×1
assembly ×1
avx ×1
bluetooth ×1
command-line ×1
cordova ×1
debugging ×1
framebuffer ×1
graphics ×1
ios ×1
latency ×1
linux ×1
opencv ×1
opengl ×1
opengl-es ×1
optimization ×1
precision ×1
rounding ×1
sse ×1
symbols ×1
time ×1
windows ×1