我正在使用 perf 对程序的性能进行采样。
这对我有用:
$ perf record -g ./bench
...
[ perf record: Woken up 1 times to write data ]
[ perf record: Captured and wrote 0.023 MB perf.data (93 samples) ]
$ ls -al perf.data
-rw------- 1 bram bram 26848 Oct 25 10:22 perf.data
Run Code Online (Sandbox Code Playgroud)
但现在我想在程序中的特定点开始和停止收集。但如果我这样做:
$ perf record -g -e cycles --filter="start render_image" ./bench
--filter option should follow a -e tracepoint option
Run Code Online (Sandbox Code Playgroud)
我很困惑,因为过滤器标志确实遵循 -e 选项。这里发生了什么?
我也对 perf.data 的体积如此之小感到困惑,难道它真的只收集了 93 个样本吗?它运行了几秒钟。
最后,我假设“-e Cycles”是默认事件?
更新:正如 Arnabjyoti Kalita 所解释的,有一类特殊的事件称为跟踪点。如果我以 root 身份运行 …
所以我在Objective-C应用程序上使用Xcode 6.1.我的应用程序使用GameKit框架.
我试图从我的GameViewController(Objective-C源代码)调用外部C++方法.
为了使GameViewController.mm编译,我必须手动将类型设置为'Objective-C++ Source'.
但是,即使源现在编译,它也将无法链接:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_GLKViewController", referenced from:
_OBJC_CLASS_$_GameViewController in GameViewController.o
"_OBJC_METACLASS_$_GLKViewController", referenced from:
_OBJC_METACLASS_$_GameViewController in GameViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Run Code Online (Sandbox Code Playgroud)
我只能通过将类型设置回'Objective-C Source'并删除对外部C++函数的调用来消除链接器错误.
如果我的源代码编译为'Objective-C++ Source'而不是'Objective-C Source'类型,为什么链接器会失败?
请注意,我在Build-phases中正确地链接了GameKit.
使用 Android Studio 构建时如何获取详细日志(包括编译器和链接器的命令行参数)?
我刚刚从 Ant / Android.mk 构建过渡到 Android-Studio 构建。使用旧系统,我能够通过执行以下操作来了解编译器是如何调用的:
$ ndk-build V=1
Run Code Online (Sandbox Code Playgroud)
Android Studio 中实现此目的的等效设置是什么?我怀疑我的项目是针对错误的 GLES 版本(gles2 而不是 gles3)构建的,并希望通过查看链接器的命令行参数来确定。
我已经将基于NDK的应用程序从命令行蚂蚁构建过渡到了Android Studio。
Android Studio位于Gradle之上。Gradle调用CMake来构建C ++代码。
我正在寻找的是一种仅为Android目标armv7,arm64,x86等构建一组静态.a文件的方法。
Android Studio项目面向完整的应用程序。
有没有办法让Gradle(或AStudio)仅构建静态库(.a),而无需构建应用程序或共享库?
我正在linux下使用所有最新的Android东西:Android Studio 3.0 canary4。NDK 15.0.4075724
我将GLSL与顶点着色器和片段着色器一起使用。
顶点着色器输出highp float[0,1]范围内的a
当它到达片段着色器时,我看到值(在三角形边缘)不少于 1.1!
这个问题就会消失,如果我...
flat。如果启用了 MSAA,固定的 0 到 1 高精度浮点如何以远大于 1 的值到达片段着色器?
顶点着色器代码:
out highp float lightcontrib2;
...
lightcontrib2 = clamp( irrad, 0.0, 1.0 );
Run Code Online (Sandbox Code Playgroud)
片段着色器代码:
in highp float lightcontrib2;
...
if (lightcontrib2>1.1) { fragColor = vec4(1,0,1,1); return; }
Run Code Online (Sandbox Code Playgroud)
果然,使用 MSAA 4x,这就是 OpenGL 生成的图像。(观察窗口中心的磁铁色像素。)
我已经排除了非数字值。
GL_版本:3.2.0 NVIDIA 450.51.06
我正在尝试分析为 RDNA3 AMD GPU 编译的 OpenCL 内核。
为此,我使用Radeon GPU 分析器。
当我在分析器中加载 OpenCL 内核时,它会在 gfx1102 (RDNA3) 程序集中显示其汇编指令。
到目前为止,一切都很好。
不过,我很难解释指令名称。我可以在ISA 文档中查找它们,但通常不会列出完整的指令名称。
在我的内核的内部循环中,我对 16 位浮点值进行乘加。
我看到这翻译成:
v_fmac_f16_e32 v?, v?, v?
Run Code Online (Sandbox Code Playgroud)
这似乎很合适,因为我知道“v”代表向量,fmac代表融合乘加,f16代表16位浮点参数。
但文档没有描述后缀_e32。
_e32RDNA3组装中的suffic是什么意思?
我使用极简主义代码示例将Google游戏服务与我的NDK游戏集成在一起.
启动应用程序时,身份验证在日志中失败:
V/GamesNativeSDK( 7212): Play Games callback indicates connection failure.
I/GamesNativeSDK( 7212): UI interaction required to connect to Google Play.
I/TeapotNativeActivity( 7212): Sign in finished with a result of -3
I/biplane ( 7212): OnAuthActionFinished
I/biplane ( 7212): You are not logged in!
I/TeapotNativeActivity( 7212): Fetching all blocking
I/TeapotNativeActivity( 7212): --------------------------------------------------------------
I/TeapotNativeActivity( 7212): Fetching all nonblocking
I/TeapotNativeActivity( 7212): --------------------------------------------------------------
I/TeapotNativeActivity( 7212): Achievement response status: -3
Run Code Online (Sandbox Code Playgroud)
我已执行在线文档中列出的所有步骤,包括:
我不确定哪条消息是原始错误,哪个是症状."连接失败"或"需要UI交互".
请注意,在开发者控制台中,两个链接的应用程序列为"准备发布".
我使用的源代码是来自c …
我知道通常应该避免跨SIMD通道的操作.但是,有时必须这样做.
我正在使用AVX2内在函数,并在__m256中有8个浮点值.
我想知道这个向量中的最低值,并使问题复杂化:也就是在哪个插槽中.
我目前的解决方案是内存往返,我不喜欢:
float closestvals[8];
_mm256_store_ps( closestvals, closest8 );
float closest = closestvals[0];
int closestidx = 0;
for ( int k=1; k<8; ++k )
{
if ( closestvals[k] < closest )
{
closest = closestvals[ k ];
closestidx = k;
}
}
Run Code Online (Sandbox Code Playgroud)
没有去往/从记忆中这样做的好方法是什么?
我有一个由7个__m256值组成的结构,它在内存中以32字节对齐的方式存储.
typedef struct
{
__m256 xl,xh;
__m256 yl,yh;
__m256 zl,zh;
__m256i co;
} bloxset8_t;
Run Code Online (Sandbox Code Playgroud)
我通过使用posix_memalign()动态分配数据的函数或使用(aligned(32))静态分配数据的属性来实现32字节对齐.
对齐很好,但是当我使用两个指向这样的结构的指针,并将它们作为memcpy()的目标和源传递时,编译器决定使用它__memcpy_avx_unaligned()来复制.
我如何强制clang使用对齐的avx memcpy函数,我认为这是更快的变体?
操作系统:Ubuntu 16.04.3 LTS,Clang:3.8.0-2ubuntu4.
UPDATE
仅在复制两个或多个结构时调用__memcpy_avx_unaligned().当只复制一个时,clang会发出14个vmovup指令.
我正在使用Vulkan 图形API(通过BGFX)进行渲染。我一直在测量我的电话需要多少(挂钟)时间。
我不明白的是vkAcquireNextImageKHR () 总是很快,而且从不阻塞。即使我禁用超时并使用信号量来等待演示。
演示文稿锁定为 60Hz 显示速率,我看到我的主循环确实以 16.6 或 33.3 毫秒运行。
我不应该在vkAcquireNextImageKHR()通话时长中看到此显示率的等待时间吗?
分析器将这个调用测量为 0.2 毫秒左右,而不是帧的重要部分。
VkResult result = vkAcquireNextImageKHR(
m_device
, m_swapchain
, UINT64_MAX
, renderWait
, VK_NULL_HANDLE
, &m_backBufferColorIdx
);
Run Code Online (Sandbox Code Playgroud)
目标硬件是手持控制台。