Hello
I want to run OpenCL sample apps on Mali T-628 gpu in Android platform.
i hv downloaded Mali OpenCL SDK.
My host system is Ubuntu 12.04
I saw entire development guides but couldnt understand.Any instructions on how to go about it?
Thks
Hi aravind,
It was over a year ago so I don't remember specifically but it is certainly true that the opencl SDK examples do not compile for, or run on android out of the box. They require some mods to do so, as described above, and probably I had not attempted it myself at the time so couldn't say with any confidence whether it was or wasn't possible. I have since done it though so am happier to say it is possible although it is of course not strictly supported or guaranteed, i have had success in the past. The Android/Application.mk files are quite trivial to derive from ndk samples so I would encourage you to give it a go and let us know if you have any problems that we could help with.
Hth,
Chris
Thks Chris for ur help.
I will try it nd come back to u:)
Thks once again
Hello Chris
I hv got Mali SDK.
It contains the samples.i choose "hello_world_opencl". The file contents are hello_world_opencl->assets,hello_world_opencl.cpp,Makefile.
Inside assets->hello_world_opencl.cl
Basically i will hv to write the Android.mk and Application.mk files and also the source java file right?
Can u just elaborate on this?
Thanks
Hi Aravind,
Sorry for late reply, was at GDC last week. You will need to write the Android.mk and Application.mk files, but you won't need to write any Java files, you can just build an executable, i.e. not an APK, just a raw binary, with the NDK. It's fairly trivial to write the Android.mk file. Take a very simple NDK sample app and copy the jni folder, then modify that to include the correct files and build a binary, you should have no trouble! I'll try and get an example to you this week.
Thanks,
Thks Chris for reply.
1) I saw NDK samples. But the thing is the Android.mk file varies a lot with the application. So just replacing the <file name> will help?
2)Also the activity file will load the .so ( got from the cpp file) and as a result we can run the application. Without that wont we just get a default "hello world" message?
3) Say i want to run the "mandelbrot" sample in Mali SDK as an android app. What changes should i do?
Aravind
The activity file is not necessary if you're building a pure native binary, i.e. you wouldn't build the C++ code as a shared library, you would build it as a native binary with the NDK using BUILD_EXECUTABLE. c - Want to compile native Android binary I can run in terminal on the phone - Stack Overflow first answer is an example of this. I'll see if I can put a sample together this week.
Cheers,
Thks Chris
Ur knowledge base is very extensive.
So 1 prblem is solved. The changes in Android.mk still remains though. It will be nyc if u could provide furhter insights into it
So I've given it a go at producing the Android NDK makefiles necessary to build the OpenCL samples... I've attached a zip which you should be able to unzip over the top of your OpenCL SDK. It will add a couple of jni folders, one in lib and one in samples\hello_world_opencl. To build the hello_world_opencl sample fire up a command prompt and do the following:
The first ndk-build will build the OpenCL stub library, which exists purely to satisfy the link requirements for the samples. It is not a real implementation of OpenCL, and indeed at runtime you will be running against the real implementation present on the device. The second ndk-build will build the sample.
Note that this is only enough to make it build, I have made no modifications to the source code itself to make it run correctly, i.e. looking for files in the right place, etc, but this should be enough to get you building and running at least. I'd recommend building clinfo and checking that you get the correct diagnostic output.
Thanks a lot Chris.
I tried ndk-build for OpenCL stub.
ara@Aravind:~/Downloads/Mali_OpenCL_SDK_v1.1.0/lib$ ndk-build
make: *** No rule to make target `jni\../..\lib\opencl_stubs.c', needed by `obj/local/armeabi-v7a/objs/OpenCL/..\lib\opencl_stubs.o'. Stop.
It is not finding the opencl_stub file. I changed the Android.mk from LOCAL_SRC_FILES := opencl_stubs.c to LOCAL_SRC_FILES := ..\lib\opencl_stubs.c
But no use. can u plse help?
My bad, Linux doesn't like the backslashes (I wrote this on Windows ) change the backslashes to forward slashes in the Android.mk files and you're good to go
Thanks a lot.It worked.
A libs folder and and obj folder is created inside <hello_world_sample> and inside <Mali_SDK--- / lib >
How should I run it?
Also the procedure is the same for all samples right , except we have to change the source file ?
Thanks a lot
Yeah the process is the same, just look at the makefiles to see what files are compiled and what the includes are for specific samples and recreate the Android.mk files I provided for those samples to run them, just copy the binary to the device, chmod it so it's executable and run it from the shell. It will fall over trying to load a file most likely, so you will need to modify the source so it looks in /sdcard/ or something. From memory at present it will look for an Assets folder in the current working dir.
So i will have to copy the hello_world_opencl executable present inside obj->local->armeabi-v7a to device.
i run $ adb shell pm setInstallLocation 2 to install it in sdcard.
To modify source, u mean i will hv to change the Android.mk file LOCAL_SRC_FILES := hello_world_opencl.cpp to look inside sdcard? Sorry i dont understand
setInstallLocation is a package manager command, and will only affect where the package manager installs packages. In this case you don't have a package to install, I assume you'll probably just push the thing with adb push somewhere like /sdcard/ and run it from there?
As for source, I am referring to the actual C++ source code, not the Android.mk file. Generally speaking there may be some minor issues running on Android which you may need to fix, e.g. broken file paths, but then again it might just work without issues. We don't routinely test on Android as we don't support it out of the box.
I tried the push command. The problem is i am getting "permission denied error"
------------------
$adb shell
#su
# mount -o remount,rw /dev/block/stl9 /system
#chmod 777 /system/app
# exit
exit
$adb push---
-------------------
What is the problem ? Or is there an alternative ?
adb push thing /sdcard/thing isn't working? Does the device have an /sdcard/ directory? If adb push isn't working on your device then that's a support request for HardKernel I think!