병렬 감소 알고리즘을 수정하려고합니다. 주어진 배열 길이를 2의 거듭 제곱으로 나눌 논리를 사용하고 있습니다. 예를 들어 26을 넣으면 16 개의 요소 중 배열 1을 만들고 8 개의 요소의 다음 배열과 2 개의 요소의 마지막 배열을 만듭니다. 26 자체가 2의 힘이 아니지만이 방법으로 나는 각각의 병렬 감소를받을 수있는 메인 어레이에서 생성 된 서브 어레이의 수가 더 많습니다. 하지만 rendercript에서 이것을 할 수 있기를 원할 때마다 하나의 컨텍스트를 가지고 있지만 오류를 던지고있는 동안 매번 렌더 카드 메모리 할당을 다시 작성하는 루프를 사용합니다. 이 부분에서 나를 도울 수 있니? 나를 사각 지대로 안내해 주시겠습니까? 다음은 내 코드입니다!루프 안에 렌더러 메모리 할당을 넣어 일련의 가변 크기 배열을 처리 할 수 있습니까?
private void createScript() {
log ("i'm in createscript");
int pp=0;
int qq=1;
int ii=0;
**mRS = RenderScript.create(this);**
for (int gstride=0; gstride < address.length/2; gstride++){
log("im in stride noof gstride:"+gstride);
// this is the address array location
int strtadd=address[ii];
int sze = 0;
sze=address[qq]-address[pp]+1;
tempin =new int [sze];
System.arraycopy(input, strtadd, tempin, 0, tempin.length);
strtadd=address[ii+2];
log("Generated size of array: " + tempin.length);
//renderscript declarations
`enter code here`**mInAllocation=Allocation.createSized(mRS,Element.I32(mRS),tempin.length);
`enter code here`mOutAllocation=Allocation.createSized(mRS,Element.I32(mRS),address.length/2); `
mInAllocation.copyFrom(tempin);
mScript = new ScriptC_reduce2(mRS, getResources(), R.raw.reduce2);
//int row_width = input.length;
mScript.bind_gInarray(mInAllocation);
mScript.set_gIn(mInAllocation);
mScript.set_gOut(mOutAllocation);
mScript.set_gScript(mScript);
//time measurement
long lStartTime = new Date().getTime();
for (int stride = tempin.length/2; stride > 0; stride /= 2) {
mScript.set_stride(stride);
mScript.invoke_filter();
}**
long lEndTime = new Date().getTime();
long difference = lEndTime - lStartTime;
nettime[gstride]=difference;
pp=pp+1;
qq=qq+1;
mInAllocation.copyTo(tempin);
output[gstride] = tempin[0];
}
int sum=0;
int sum2=0;
int i = 0; .
while(i < output.length) {
sum += output[i];
sum2 +=nettime[i];
i++;
}
t1.setText(String.format("output:%s\n\nExecution time:%s",
+sum, +sum2 +"ms")); //input:%s\n\n ArrayToString(input),
}
I get the following error as copied from the error log: I don't think its out of memory ` `error.
V/RenderScript(2890): rsContextCreate dev=0x2a14ea68
V/ScriptC (2890): Create script for resource = reduce2
D/StopWatch(2890): StopWatch bcc: RSCompilerDriver::loadScriptCache time (us): 1988
D/StopWatch(2890): StopWatch bcc: RSCompilerDriver::build time (us): 2485
D/AndroidRuntime(2890): Shutting down VM
W/dalvikvm(2890): threadid=1: thread exiting with uncaught exception (group=0x40a71930)
E/AndroidRuntime(2890): FATAL EXCEPTION: main
E/AndroidRuntime(2890): java.lang.RuntimeException: Unable to start activity `enter code `enter code here`ComponentInfo{com.example.paralleladd2/com.example.paralleladd2.Paralleladd2}:java.lang .NullPointerException
E/AndroidRuntime(2890): at `enter code here`android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2180)
E/AndroidRuntime(2890): at `enter code here`android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
E/AndroidRuntime(2890): at android.app.ActivityThread.access$600(ActivityThread.java:141)
E/AndroidRuntime(2890): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
E/AndroidRuntime(2890): at android.os.Handler.dispatchMessage(Handler.java:99)
E/AndroidRuntime(2890): at android.os.Looper.loop(Looper.java:137)
E/AndroidRuntime(2890): at android.app.ActivityThread.main(ActivityThread.java:5041)
E/AndroidRuntime(2890): at java.lang.reflect.Method.invokeNative(Native Method)
E/AndroidRuntime(2890): at java.lang.reflect.Method.invoke(Method.java:511)
E/AndroidRuntime(2890): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
E/AndroidRuntime(2890): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
E/AndroidRuntime(2890): at dalvik.system.NativeStart.main(Native Method)
E/AndroidRuntime(2890): Caused by: java.lang.NullPointerException
E/AndroidRuntime(2890): at com.example.paralleladd2.Paralleladd2.createScript(Paralleladd2.java:157)
E/AndroidRuntime(2890): at com.example.paralleladd2.Paralleladd2.onCreate(Paralleladd2.java:48)
E/AndroidRuntime(2890): at android.app.Activity.performCreate(Activity.java:5104)
E/AndroidRuntime(2890): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1080)
E/AndroidRuntime(2890): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2144)
무엇이 오류입니까? 메모리 부족? –