Ignore:
Timestamp:
Dec 4, 2010, 11:01:40 AM (11 years ago)
Author:
Sven Rech
Message:

keysearcher: better stop behaviour when using opencl

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/CrypPlugins/KeySearcher/KeySearcher.cs

    r2161 r2162  
    499499                keySearcherOpenCLSubbatchOptimizer.BeginMeasurement();
    500500
    501                 for (int i = 0; i < subbatches; i++)
    502                 {
    503                     bruteforceKernel.SetArg(0, userKey);
    504                     bruteforceKernel.SetArg(1, costs);
    505                     bruteforceKernel.SetArg(2, i * subbatchSize);
    506                     oclManager.CQ[deviceIndex].EnqueueNDRangeKernel(bruteforceKernel, 1, null, globalWorkSize, null);
    507                     oclManager.CQ[deviceIndex].EnqueueBarrier();
    508 
    509                     Event e;
    510                     fixed (float* costa = costArray)
    511                         oclManager.CQ[deviceIndex].EnqueueReadBuffer(costs, true, 0, costArray.Length * 4, new IntPtr((void*)costa), 0, null, out e);
    512 
    513                     e.Wait();
    514 
    515                     checkOpenCLResults(keyTranslator, costArray, sender, bytesToUse, i * subbatchSize);
    516 
    517                     doneKeysArray[threadid] += subbatchSize;
    518                     openCLDoneKeysArray[threadid] += subbatchSize;
    519                     keycounterArray[threadid] += subbatchSize;
    520                     keysLeft[threadid] -= subbatchSize;
    521                 }
    522 
    523                 keySearcherOpenCLSubbatchOptimizer.EndMeasurement();
    524 
    525                 costs.Dispose();
     501                try
     502                {
     503                    for (int i = 0; i < subbatches; i++)
     504                    {
     505                        bruteforceKernel.SetArg(0, userKey);
     506                        bruteforceKernel.SetArg(1, costs);
     507                        bruteforceKernel.SetArg(2, i * subbatchSize);
     508                        oclManager.CQ[deviceIndex].EnqueueNDRangeKernel(bruteforceKernel, 1, null, globalWorkSize, null);
     509                        oclManager.CQ[deviceIndex].EnqueueBarrier();
     510
     511                        Event e;
     512                        fixed (float* costa = costArray)
     513                            oclManager.CQ[deviceIndex].EnqueueReadBuffer(costs, true, 0, costArray.Length * 4, new IntPtr((void*)costa), 0, null, out e);
     514
     515                        e.Wait();
     516
     517                        checkOpenCLResults(keyTranslator, costArray, sender, bytesToUse, i * subbatchSize);
     518
     519                        doneKeysArray[threadid] += subbatchSize;
     520                        openCLDoneKeysArray[threadid] += subbatchSize;
     521                        keycounterArray[threadid] += subbatchSize;
     522                        keysLeft[threadid] -= subbatchSize;
     523
     524                        if (stop)
     525                            return false;
     526                    }
     527
     528                    keySearcherOpenCLSubbatchOptimizer.EndMeasurement();
     529                }
     530                finally
     531                {
     532                    costs.Dispose();
     533                }
    526534            }
    527535            catch (Exception ex)
Note: See TracChangeset for help on using the changeset viewer.