> On 12 Sep 2016, at 22:49, Jens Alfke <[email protected]> wrote:
> 
> 
>> On Sep 12, 2016, at 6:42 AM, Gerriet M. Denkmann <[email protected]> 
>> wrote:
>> 
>> So: is the code ok and the compiler broken in Debug mode?
>> Or is the code fundamentally wrong and that it works in Release is just a 
>> fluke?

I tried a variation of my function. This does not crash (not even in Debug 
builds), but takes twice the memory and is about four times slower:

func markAndTell_2( talk: Bool, number: Int) -> [Bool]
{
        [...]
        let bitLimit = nbrOfThreads * itemsPerThread
        var bitfield = [Bool](count: bitLimit, repeatedValue: false)
        
        var outputSlice0: ArraySlice<Bool> = []
        [...]
        var outputSlice7: ArraySlice<Bool> = []
        
        let queue = dispatch_get_global_queue( DISPATCH_QUEUE_PRIORITY_HIGH, 0 
);
        dispatch_apply( Int(nbrOfThreads), queue,
                { ( idx: size_t) -> Void in
                        
                        let startIndex = itemsPerThread * Int(idx)
                        let endIndex = min( startIndex + itemsPerThread, 
bitLimit )
                        
                        var tempSlice: ArraySlice<Bool> = bitfield[ startIndex 
..< endIndex ]

                        var currIndex = startIndex
                        while( currIndex < endIndex )
                        {
                                tempSlice[currIndex] = true      
                                currIndex += step
                        }
                        
                        switch(idx)
                        {
                                case 0: outputSlice0 = tempSlice
                                [...]
                                case 7: outputSlice7 = tempSlice
                                default: print("Thread[\(idx)] does not know 
where to put its slice")
                        }                       
                }
        )
        
        bitfield = []
        bitfield += outputSlice0
        [...]
        bitfield += outputSlice7
        
        return bitfield
}

Gerriet.


_______________________________________________

Cocoa-dev mailing list ([email protected])

Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com

Help/Unsubscribe/Update your Subscription:
https://lists.apple.com/mailman/options/cocoa-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to