2010-07-09 3 views
0

내 응용 프로그램의 성능을 향상시키기 위해 as3 코드를 pixelbender 코드로 변환하는 데 도움이 필요합니다.이 as3 코드를 픽셀 벤더 코드로 변환하는 데 도움이됩니다.

이 as3 코드는 다음과 같습니다. bytearray의 Number 값을 청크로 스캔합니다. 이 덩어리 길이가 100 개의 숫자이고 2 개의 숫자 (왼쪽 및 오른쪽)를 읽고 최대 값을 찾으려고합니다. 내 bytearray의 숫자는 PCM 데이터이므로 수백만 개가 있으며이 코드는 특히 저사양 컴퓨터에서 실행하는 데 오랜 시간이 걸릴 수 있습니다.

이 모든 목적은 가능한 한 빨리 파형을 렌더링하는 것입니다. 픽셀 벤더에 대해서는 거의 알지 못합니다. 나는 기본적으로 내가 정말 pixelbender을 통과 어떻게 부탁 해요 추측 ...

을 새 파일을 플래시에서 그것의 ShaderJob이를 만들 수 있지만이 접근하는 방법을 정말 확실 해요 할 수 있습니다

) 숫자의 "덩어리"하고

나를 위해 청크 물건을 할 수있는 픽셀 벤더를 다시 바로이 개 최대 값 (왼쪽)

또는

B) 내 전체 된 ByteArray 날을 전달하고받을 수

var spritePixelIndex:Number=0; 
      var spriteSize:Number; 
      spriteSize=_sizes[_numberOfZoomLevels - 1]; 
      blockSize=Math.floor(_pcmLength/spriteSize); 
       chunksize=blockSize * 100; 


for (var i:int=0; i < chunksize; ++i) 
      { 
       if (_pcmData.bytesAvailable) 
       { 
        var la:Number=_pcmData.readFloat(); 
        var ra:Number=_pcmData.readFloat(); 
        var l:Number=la > 0.0 ? la : -la; 
        var r:Number=ra > 0.0 ? ra : -ra; 

        ++_divCount; 
        var ml:Number=0; 
        var mr:Number=0; 
        var a_ml:Number=ml > 0.0 ? ml : -ml; 
        var a_mr:Number=mr > 0.0 ? mr : -mr; 

        ml=a_ml > (l) ? ml : l; 
        mr=a_mr > (r) ? mr : r; 
       } 
} 

답변

2

Pixel Bender는 루프를 지원하지 않으므로 데이터 배열을 검색하여 단일 값을 반환 할 수 없으므로이 작업에 적합한 도구가 아닙니다. 또한 다음 번 처리 된 청크로 값을 넘겨 줄 수 없기 때문에, 현재의 청크와 이전에 발견 된 최대 값을 비교할 수 있습니다. 예를 들어 버킷 체인과 같습니다.

대신 Alchemy를 살펴보고 빠른 bytearray opcode를 사용하여 데이터를 빠르게 검색 할 것을 권장합니다. Joa Ebert와 Burak Kalayci는 C로 프로그램 할 필요 없이도이 opcode를 사용할 수있는 도우미 도구를 만들었습니다. http://philippe.elsass.me/2010/05/as3-fast-memory-access-without-alchemy/

+0

주된 문제는 주 스레드가 너무 많은 계산이 진행되었다는 것입니다. 끊어지고 모든 것이 중단되었습니다. 누군가 2 픽셀 수를 받아들이고 가장 큰 값을 반환하는 픽셀 베더 코드를 표시 할 수 있다면 청크 루프에서 계산을 수행하는 대신 그 값을 호출 해 볼 수도 있습니다. 성능 성능이 – dubbeat

+0

인지 여부는 evaluatePixel 메서드가 기본적으로 루프라고 생각합니다. 따라서 데이터를 bytearry로 전달하거나 트릭을 수행 할 수있는 비트 맵으로 표시 할 수 있습니까? – dubbeat

+0

다시 말하지만 픽셀 벤더는 전달한 각 픽셀 또는 벡터 항목을 통해 커널을 실행하지만 코드를 실행할 때마다 다른 픽셀에서 진행되고있는 작업에 대해 알지 못하며 예외를 제외하고 정보를 전달할 방법이 없습니다. 변경된 픽셀을 돌려주는 Alchemy를 사용하면 코드가 백그라운드에서 실행될 수 있으며 주 프로그램의 실행을 차단하지 않습니다. – Quasimondo

관련 문제