小编Bra*_*ram的帖子

Android Studio 可以正确地将应用程序与 -lGLESv3 链接到 64 位arm,但不能链接到 32 位arm

我有一个使用 OpenGL ES3 的 Android 应用程序。我可以为我的 64 位 Android 设备构建(并运行)它。

当我尝试为 32 位构建它时,链接器找不到 libGLESv3 库并且无法构建。

在我的应用程序的 gradle 中,我有:

compileSdkVersion 26
defaultConfig {
    applicationId "com.steenriver.biplane"
    minSdkVersion 16
    targetSdkVersion 19
    versionCode 113
    versionName "1.13"
    testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    ndk {
        abiFilters 'armeabi-v7a'
        //abiFilters 'arm64-v8a'
    }
    externalNativeBuild {
        cmake {
            //ldFlags "-Wl,-fuse-ld=gold"
            cppFlags "-std=c++11 -DANDROID=1 -DPLAY=1 -DUSEES3=1 -DLOGTAG=biplane"
            arguments "-DCMAKE_VERBOSE_MAKEFILE=1", "-DANDROID_TOOLCHAIN=clang", "-DANDROID_ARM_NEON=TRUE", "-DANDROID_ARM_MODE=arm"
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

使用arm64-v8a,没有问题。

使用armeabi-v7a(在完成一个干净的项目之后),我得到:

/home/bram/android-sdk-linux/ndk-bundle/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../.. /../../arm-linux-androideabi/bin/ld.gold: 错误:找不到-lGLESv3

我在 Ubuntu 上使用 Android Studio 3.0.1。我在 CMakeLists.txt 中将 -lGLESv3 指定为: …

linker android arm android-studio opengl-es-3.0

3
推荐指数
1
解决办法
1435
查看次数

_mm256_xor_si256()和_mm256_xor_ps()之间的区别

我试图从AVX(2)中找到_mm256_xor_si256_mm256_xor_ps内在函数之间的实际差异.

他们分别映射到intel指令:

  • vpxor ymm,ymm,ymm
  • vxorps ymm,ymm,ymm

英特尔将其定义为:

dst[255:0] := (a[255:0] XOR b[255:0])
dst[MAX:256] := 0
Run Code Online (Sandbox Code Playgroud)

FOR j := 0 to 7
    i := j*32
    dst[i+31:i] := a[i+31:i] XOR b[i+31:i]
ENDFOR
dst[MAX:256] := 0
Run Code Online (Sandbox Code Playgroud)

但坦率地说,我看不出他们的影响有什么不同?它们都是xor 256位.但后者可用于AVX和AVX2,这是AVX2上的第一个.为什么你会使用第一个,兼容性较低的?

intrinsics avx avx2

2
推荐指数
1
解决办法
893
查看次数

将__m256值设置为所有ONE位的最快方法

如何为__m256值中的所有位设置值1?使用AVX或AVX2内在函数?

要获得全零,您可以使用_mm256_setzero_si256().

为了得到所有的,我正在使用_mm256_set1_epi64x(-1),但我怀疑这比全零情况慢.这里是否涉及内存访问或Salar/SSE/AVX切换?

我似乎无法在AVX中找到一个简单的按位NOT操作?如果可以,我可以简单地使用setzero,然后使用向量NOT.

bit-manipulation intrinsics avx avx2

2
推荐指数
1
解决办法
1893
查看次数

通过Cmake打开Android Studio调试构建的编译器优化

我正在为基于NDK的应用程序使用Android Studio 3.0。对于C ++代码,我使用CMake作为外部构建器

这很好,我可以创建调试和发布二进制文件。

但是,我想为C ++代码的一部分(物理引擎)打开编译器优化(例如-O3),不仅是针对发布版本,还包括调试版本。

因此,按原样创建大量调试版本,而不进行优化,但是,我希望在启用编译器优化的情况下构建静态库目标之一。

我该怎么办?

我有一个静态库目标的CMakeLists,该目标通过使用CMakeLists顶级文件中的add_subdirectory()指令包含在内。

请注意,我指向应用程序的build.gradle文件中的顶级CMakeList,如下所示:

externalNativeBuild {
    cmake {
        path '../../Android/jni/CMakeLists.txt'
    }
}
Run Code Online (Sandbox Code Playgroud)

cmake android-ndk android-studio

2
推荐指数
1
解决办法
1071
查看次数

OpenCL 报告的计算单元只有预期的一半

我使用 OpenCL(在 Ubuntu 下)来查询可用平台,这会产生一个平台,其中

CL_PLATFORM_PROFILE:完整_PROFILE

CL_PLATFORM_VERSION:OpenCL 2.1 AMD-APP (3143.9)

CL_PLATFORM_NAME:AMD 加速并行处理

CL_PLATFORM_VENDOR:Advanced Micro Devices, Inc.

其中提供了一种设备,我可以使用以下方式进行查询:

cl_device_id device = devices[ j ];
cl_uint units = -1;
cl_device_type type;
size_t lmem = -1;
cl_uint dims = -1;
size_t wisz[ 3 ];
size_t wgsz = -1;
size_t gmsz = -1;
err = clGetDeviceInfo( device, CL_DEVICE_NAME, sizeof(name), name, 0 );
err = clGetDeviceInfo( device, CL_DEVICE_NAME, sizeof(vend), vend, 0 );
err = clGetDeviceInfo( device, CL_DEVICE_MAX_COMPUTE_UNITS, sizeof(units), &units, 0 );
err …
Run Code Online (Sandbox Code Playgroud)

opencl amd-gpu

0
推荐指数
1
解决办法
471
查看次数