我有一个使用 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 指定为: …
我试图从AVX(2)中找到_mm256_xor_si256和_mm256_xor_ps内在函数之间的实际差异.
他们分别映射到intel指令:
英特尔将其定义为:
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上的第一个.为什么你会使用第一个,兼容性较低的?
如何为__m256值中的所有位设置值1?使用AVX或AVX2内在函数?
要获得全零,您可以使用_mm256_setzero_si256().
为了得到所有的,我正在使用_mm256_set1_epi64x(-1),但我怀疑这比全零情况慢.这里是否涉及内存访问或Salar/SSE/AVX切换?
我似乎无法在AVX中找到一个简单的按位NOT操作?如果可以,我可以简单地使用setzero,然后使用向量NOT.
我正在为基于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) 我使用 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) avx ×2
avx2 ×2
intrinsics ×2
amd-gpu ×1
android ×1
android-ndk ×1
arm ×1
cmake ×1
linker ×1
opencl ×1