Post

Replies

Boosts

Views

Activity

LearnMetalCpp examples: why not crashing because of used semaphore?
The examples in LearnMetalCpp do in the renderer's draw method something like this: select a frame for the instance buffer create a new command buffer call dispatch_semaphore_wait to make sure that the selected instance buffer is not used by Metal put dispatch_semaphore_signal into the command buffer's completed handler modify the instance buffer and some other Metal related variables commit the command buffer Depending on the number of frames used and the complexity of the scene there can be a couple of frames in the command queue. Suppose the window (and its related view) is closed while Metal is still busy with items in the command queue. This means that the semaphore is still in use. How is it guaranteed that the semaphore is destroyed after the view is closed? Or is it guaranteed that the view's destructor is only called after the command queue has finished all its work?
1
0
678
Sep ’22
UIDocumentPickerViewController cannot associate thumbnails for text file
I am intializing a UIDocumentPickerViewController with the UTIs public.text and public.text-plain. UIDocumentPickerViewController* documentPickerController = [[UIDocumentPickerViewController alloc] initWithDocumentTypes:[NSArray arrayWithObjects:@"public.text",@"public.text-plain",nil] inMode:UIDocumentPickerModeImport];When selecting a text file I get the error message "Failed to associate thumbnails for picked URL file:///private/var/mobile/Library/Mobile%20Documents/com~apple~CloudDocs/NIC.txt with the Inbox copy file:///private/var/mobile/Containers/Data/Application/B857A5E7-74FE-4479-B899-B61D524B7E0D/tmp/***-Inbox/NIC.txt: Error Domain=QLThumbnailErrorDomain Code=102 "(null)" UserInfo={NSUnderlyingError=0x28250df20 {Error Domain=GSLibraryErrorDomain Code=3 "Generation not found" UserInfo={NSDescription=Generation not found}}}".What can I do to get rid of this error message?
3
0
3.8k
Feb ’20
How to hide UISearchController from navigation item?
In iOS 11.0+ I use the following statements to add a UISearchController to the navigation bar:[[self navigationItem] setSearchController:[self myUISearchController]]; [[self navigationItem] setHidesSearchBarWhenScrolling:NO]; [self setDefinesPresentationContext:YES];To hide the UISearchController I tried the following:[[self myUISearchController] setActive:NO]; [[self myUISearchController] removeFromParentViewController]; // just a try [[self navigationItem] setSearchController:nil]; // this should be sufficient [self myUISearchController:nil];Actually, the search controller disappears but leaves a black rectangle at the position where it was. It seems to be that the UITableViewController inside the UINavigationController does not re-align its table view and therefore leaves a black rectangle.Any ideas?
1
0
2.9k
Mar ’18
Why is clang removing the loop when using -O3?
Consider the following code #include <chrono> #include <iostream> #include <random> #include <vector> class TestClass { public:   int A = 0;   int B = 4; protected: private: }; int main(int argc, const char * argv[]) {   std::random_device randomDevice;   std::mt19937 mersenneTwister(randomDevice());   std::uniform_int_distribution<size_t> distribution(1,255);   for (size_t i=0; i<10000000; ++i)   {     size_t const vectorSize = distribution(mersenneTwister)+1;     TestClass* testVector(reinterpret_cast<TestClass*>(malloc(vectorSize*sizeof(TestClass))));     if (testVector[0].A == 0x0ffeefed)     {       std::cout << "Sorry value hit." << std::endl;       break;     } /* if */     free(testVector);   } /* for */   return 0; } Clang completely removes the for-loop with optimisation -O3. I am a bit surprised. Although testVector will contain only garbage, I expected the loop not to be removed (actually also no warning was issued, only the analyser detected that testVector contains garbage). If I add a line assigning a value to a random element of testVector, the loop is not removed. PS: I wanted to use the loop for testing the execution speed of malloc and free.
2
0
1.2k
Dec ’20
agvtool used in workspaces
Suppose the directory structure of my project is Apps.xcworkspace App A (folder) A.xcodeproj .. App B (folder) B.xcodeproj .. A and B project (should) use both versioning. Unfortunately, this does not work (out of the box). Only when changing the directory structure to Apps.xcworkspace A.xcodeproj App A (folder) .. B.xcodeproj App B (folder) .. automatic version incrementing works. Is there a possibility to make also the first version work? PS: I am using a script that is called at the end of a successfully finished build process containing only one line: `xcrun agvtool next-version -all ` PPS: In the man pages is mentioned that agvtool is to be started in the folder where the project resides but how can I do this for each project in the workspace?
0
0
868
Oct ’20
Batch normalization - update means and variances
Is this the right method (see below) to update means and variances in the callback updateMeanAndVarianceWithCommandBuffer:batchNormalizationState:? (MPSCNNNormalizationMeanAndVarianceState*) updateMeanAndVarianceWithCommandBuffer:(id&lt;MTLCommandBuffer&gt;)commandBuffer batchNormalizationState:(MPSCNNBatchNormalizationState*)batchNormalizationState {   MPSVector* determinedMeans = [[MPSVector alloc] initWithBuffer:[batchNormalizationState mean] descriptor:[MPSVectorDescriptor vectorDescriptorWithLength:[self featureChannels] dataType:[self dataType]]];   MPSVector* determinedVariances = [[MPSVector alloc] initWithBuffer:[batchNormalizationState variance] descriptor:[MPSVectorDescriptor vectorDescriptorWithLength:[self featureChannels] dataType:[self dataType]]]; [[self meansOptimizer] encodeToCommandBuffer:commandBuffer inputGradientVector:determinedMeans inputValuesVector:[self meansVector] inputMomentumVector:nil resultValuesVector:[self meansVector]]; [[self variancesOptimizer] encodeToCommandBuffer:commandBuffer inputGradientVector:determinedVariances inputValuesVector:[self variancesVector] inputMomentumVector:nil resultValuesVector:[self variancesVector]]; [batchNormalizationState setReadCount:[batchNormalizationState readCount]-1];   return [self meanAndVarianceState]; } The means and variances optimisers are initialised like: _meansOptimizer = [[MPSNNOptimizerStochasticGradientDescent alloc] initWithDevice:_device momentumScale:0.0 useNestrovMomentum:NO optimizerDescriptor:[MPSNNOptimizerDescriptor optimizerDescriptorWithLearningRate:-0.1                                                                                                gradientRescale:1.0f                                                                                             regularizationType:MPSNNRegularizationTypeL2                                                                                      regularizationScale:-1.0f]];  _variancesOptimizer = [[MPSNNOptimizerStochasticGradientDescent alloc] initWithDevice:_device                                        momentumScale:0.0 useNestrovMomentum:NO optimizerDescriptor:[MPSNNOptimizerDescriptor optimizerDescriptorWithLearningRate:-0.1 gradientRescale:1.0f regularizationType:MPSNNRegularizationTypeL2 regularizationScale:-1.0f]]; By using this method as in GitHub - https://github.com/apple/turicreate/blob/master/src/ml/neural_net/mps_weight.mm the callback does not crash anymore but I am not sure if this is correct. Especially because the read count has to be manually decremented, is this OK? PS: [self meansVector] and [self variancesVector] return MPSVector objects. PPS: [self dataType] returns MPSDataTypeFloat32.
0
0
554
Jun ’20