comparison src/share/vm/graal/graalCompilerToGPU.cpp @ 12456:f87c68d79f07

improved support for co-existing, multiple backends (GRAAL-363)
author Doug Simon <doug.simon@oracle.com>
date Thu, 17 Oct 2013 01:08:17 +0200
parents 67a1e27a8dbb
children bb5a7574ae81
comparison
equal deleted inserted replaced
12455:d08accd58925 12456:f87c68d79f07
21 * questions. 21 * questions.
22 */ 22 */
23 23
24 #include "precompiled.hpp" 24 #include "precompiled.hpp"
25 25
26 #include "memory/oopFactory.hpp"
26 #include "graal/graalCompiler.hpp" 27 #include "graal/graalCompiler.hpp"
27 #include "graal/graalEnv.hpp" 28 #include "graal/graalEnv.hpp"
28 #include "graal/graalJavaAccess.hpp" 29 #include "graal/graalJavaAccess.hpp"
29 #include "runtime/gpu.hpp" 30 #include "runtime/gpu.hpp"
30 #include "runtime/javaCalls.hpp" 31 #include "runtime/javaCalls.hpp"
187 return false; 188 return false;
188 } 189 }
189 return gpu::available_processors(); 190 return gpu::available_processors();
190 C2V_END 191 C2V_END
191 192
193 static objArrayHandle newSingletonStringArray(const char* value, TRAPS) {
194 objArrayOop res = oopFactory::new_objArray(SystemDictionary::String_klass(), 1, CHECK_NULL);
195 objArrayHandle res_h = objArrayHandle(THREAD, res);
196 Handle valueString = java_lang_String::create_from_str(value, CHECK_NULL);
197 res_h->obj_at_put(0, valueString());
198 return res_h;
199 }
200
201 C2V_VMENTRY(jobject, getAvailableGPUArchitectures, (JNIEnv *env, jobject))
202 if (UseGPU) {
203 if (gpu::is_available() && gpu::has_gpu_linkage()) {
204 if (gpu::get_target_il_type() == gpu::PTX) {
205 return JNIHandles::make_local(newSingletonStringArray("PTX", THREAD)());
206 }
207 if (gpu::get_target_il_type() == gpu::HSAIL) {
208 return JNIHandles::make_local(newSingletonStringArray("HSAIL", THREAD)());
209 }
210 }
211 }
212 return JNIHandles::make_local(oopFactory::new_objArray(SystemDictionary::String_klass(), 0, THREAD));
213 C2V_END
214
192 C2V_VMENTRY(jboolean, deviceDetach, (JNIEnv *env, jobject)) 215 C2V_VMENTRY(jboolean, deviceDetach, (JNIEnv *env, jobject))
193 return true; 216 return true;
194 C2V_END 217 C2V_END
195 218
196 219
203 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;" 226 #define FIELD "Lcom/oracle/graal/api/meta/JavaField;"
204 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;" 227 #define SIGNATURE "Lcom/oracle/graal/api/meta/Signature;"
205 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;" 228 #define CONSTANT_POOL "Lcom/oracle/graal/api/meta/ConstantPool;"
206 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;" 229 #define CONSTANT "Lcom/oracle/graal/api/meta/Constant;"
207 #define KIND "Lcom/oracle/graal/api/meta/Kind;" 230 #define KIND "Lcom/oracle/graal/api/meta/Kind;"
208 #define LOCAL "Lcom/oracle/graal/api/meta/Local;" 231 #define LOCAL "Lcom/oracle/graal/api/meta/Local;"
209 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;" 232 #define RUNTIME_CALL "Lcom/oracle/graal/api/code/RuntimeCall;"
210 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;" 233 #define EXCEPTION_HANDLERS "[Lcom/oracle/graal/api/meta/ExceptionHandler;"
211 #define REFLECT_METHOD "Ljava/lang/reflect/Method;" 234 #define REFLECT_METHOD "Ljava/lang/reflect/Method;"
212 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;" 235 #define REFLECT_CONSTRUCTOR "Ljava/lang/reflect/Constructor;"
213 #define REFLECT_FIELD "Ljava/lang/reflect/Field;" 236 #define REFLECT_FIELD "Ljava/lang/reflect/Field;"
232 JNINativeMethod CompilerToGPU_methods[] = { 255 JNINativeMethod CompilerToGPU_methods[] = {
233 {CC"generateKernel", CC"([B" STRING ")"GPUSPACE_METHOD, FN_PTR(generateKernel)}, 256 {CC"generateKernel", CC"([B" STRING ")"GPUSPACE_METHOD, FN_PTR(generateKernel)},
234 {CC"deviceInit", CC"()Z", FN_PTR(deviceInit)}, 257 {CC"deviceInit", CC"()Z", FN_PTR(deviceInit)},
235 {CC"deviceDetach", CC"()Z", FN_PTR(deviceDetach)}, 258 {CC"deviceDetach", CC"()Z", FN_PTR(deviceDetach)},
236 {CC"availableProcessors", CC"()I", FN_PTR(availableProcessors)}, 259 {CC"availableProcessors", CC"()I", FN_PTR(availableProcessors)},
260 {CC"getAvailableGPUArchitectures", CC"()["STRING, FN_PTR(getAvailableGPUArchitectures)},
237 {CC"executeExternalMethodVarargs", CC"(["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeExternalMethodVarargs)}, 261 {CC"executeExternalMethodVarargs", CC"(["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeExternalMethodVarargs)},
238 {CC"executeParallelMethodVarargs", CC"(III["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeParallelMethodVarargs)}, 262 {CC"executeParallelMethodVarargs", CC"(III["OBJECT HS_INSTALLED_CODE")"OBJECT, FN_PTR(executeParallelMethodVarargs)},
239 }; 263 };
240 264
241 int CompilerToGPU_methods_count() { 265 int CompilerToGPU_methods_count() {