DispatchFractal.h
// |
// File: DispatchFractal.h |
// |
// Abstract: This example shows how to combine parallel computation on the CPU |
// via GCD with results processing and display on the GPU via OpenCL |
// and OpenGL. It computes escape-time fractals in parallel on the |
// global concurrent GCD queue and uses another GCD queue to upload |
// results to the GPU for processing via two OpenCL kernels. Calls to |
// OpenCL and OpenGL for display are serialized with a third GCD queue. |
// |
// Version: <1.0> |
// |
// Disclaimer: IMPORTANT: This Apple software is supplied to you by Apple Inc. ("Apple") |
// in consideration of your agreement to the following terms, and your use, |
// installation, modification or redistribution of this Apple software |
// constitutes acceptance of these terms. If you do not agree with these |
// terms, please do not use, install, modify or redistribute this Apple |
// software. |
// |
// In consideration of your agreement to abide by the following terms, and |
// subject to these terms, Apple grants you a personal, non - exclusive |
// license, under Apple's copyrights in this original Apple software ( the |
// "Apple Software" ), to use, reproduce, modify and redistribute the Apple |
// Software, with or without modifications, in source and / or binary forms; |
// provided that if you redistribute the Apple Software in its entirety and |
// without modifications, you must retain this notice and the following text |
// and disclaimers in all such redistributions of the Apple Software. Neither |
// the name, trademarks, service marks or logos of Apple Inc. may be used to |
// endorse or promote products derived from the Apple Software without specific |
// prior written permission from Apple. Except as expressly stated in this |
// notice, no other rights or licenses, express or implied, are granted by |
// Apple herein, including but not limited to any patent rights that may be |
// infringed by your derivative works or by other works in which the Apple |
// Software may be incorporated. |
// |
// The Apple Software is provided by Apple on an "AS IS" basis. APPLE MAKES NO |
// WARRANTIES, EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION THE IMPLIED |
// WARRANTIES OF NON - INFRINGEMENT, MERCHANTABILITY AND FITNESS FOR A |
// PARTICULAR PURPOSE, REGARDING THE APPLE SOFTWARE OR ITS USE AND OPERATION |
// ALONE OR IN COMBINATION WITH YOUR PRODUCTS. |
// |
// IN NO EVENT SHALL APPLE BE LIABLE FOR ANY SPECIAL, INDIRECT, INCIDENTAL OR |
// CONSEQUENTIAL DAMAGES ( INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF |
// SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS |
// INTERRUPTION ) ARISING IN ANY WAY OUT OF THE USE, REPRODUCTION, MODIFICATION |
// AND / OR DISTRIBUTION OF THE APPLE SOFTWARE, HOWEVER CAUSED AND WHETHER |
// UNDER THEORY OF CONTRACT, TORT ( INCLUDING NEGLIGENCE ), STRICT LIABILITY OR |
// OTHERWISE, EVEN IF APPLE HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
// |
// Copyright 2009 Apple Inc. All rights reserved. |
// |
#include <stdint.h> |
#include <stdbool.h> |
#include <math.h> |
#ifndef FRACTAL_TIMING |
# define FRACTAL_TIMING 1 |
#endif |
#ifndef FRACTAL_STATISTICS |
# define FRACTAL_STATISTICS 1 |
#endif |
#ifndef FRACTAL_LONG_DOUBLE |
# define FRACTAL_LONG_DOUBLE 1 |
#endif |
#if FRACTAL_LONG_DOUBLE |
typedef long double real; |
#define LOG2 log2l |
#define FABS fabsl |
#define SIN sinl |
#define SINH sinhl |
#define COS cosl |
#define COSH coshl |
#else |
typedef double real; |
#define LOG2 log2 |
#define FABS fabs |
#define SIN sin |
#define SINH sinh |
#define COS cos |
#define COSH cosh |
#endif |
typedef unsigned long natural; |
typedef volatile int32_t flag; |
typedef int64_t counter; |
typedef uint64_t nanoseconds; |
typedef float fractal_out_t; |
typedef struct fractal_initial_params_t { |
real centerX, centerY, width; |
natural maxiterations, colorroot; |
} fractal_initial_params_t; |
typedef struct { |
real centerX, centerY, width; |
natural maxiterations, subdivisions, stride; |
bool computeqconcurrent, enabledisplay, collectstats, displaystats; |
} fractal_params_t; |
typedef void *fractal_t; |
typedef real (^fractal_compute_t)(const real, const real, const natural, |
natural*); |
fractal_t fractalNew(void); |
void fractalFree(fractal_t fractal); |
void fractalStart(fractal_t fractal, |
fractal_params_t (^params)(void), fractal_compute_t compute, |
void (^start)(fractal_out_t * const, const natural), |
void (^stop)(const nanoseconds), |
void (^stats)(const counter, const counter, const counter, |
const counter, const nanoseconds)); |
void fractalStop(fractal_t fractal); |
extern const fractal_compute_t fractalCompute[]; |
extern const fractal_initial_params_t fractalInitialParams[]; |
Copyright © 2009 Apple Inc. All Rights Reserved. Terms of Use | Privacy Policy | Updated: 2009-06-05